open source
This commit is contained in:
@@ -0,0 +1,249 @@
|
||||
/**
|
||||
@file JCLayaGL.h
|
||||
@brief
|
||||
@author James
|
||||
@version 1.0
|
||||
@date 2018_5_25
|
||||
*/
|
||||
|
||||
#ifndef __JCLayaGL_H__
|
||||
#define __JCLayaGL_H__
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <unordered_map>
|
||||
#if __APPLE__
|
||||
#include <OpenGLES/ES3/gl.h>
|
||||
#else
|
||||
#include <GLES3/gl3.h>
|
||||
#endif
|
||||
#include "../Image/JCImageManager.h"
|
||||
#include "JCIDGenerator.h"
|
||||
#include <Manager/JCArrayBufferManager.h>
|
||||
#include "../RenderEx/JCGlobalValue.h"
|
||||
#include "../Manager/JCOrderResManager.h"
|
||||
#include "../RenderEx/JCRegister.h"
|
||||
#include <buffer/JCCommandEncoderBuffer.h>
|
||||
|
||||
//1024*1024*4
|
||||
#define TEX_IMAGE2D_DUMMY_MAX_SIZE 4194304
|
||||
|
||||
|
||||
namespace laya
|
||||
{
|
||||
typedef GLuint WebGLShader;
|
||||
typedef GLuint WebGLProgram;
|
||||
typedef GLuint WebGLBuffer;
|
||||
typedef GLuint WebGLFramebuffer;
|
||||
typedef GLuint WebGLRenderbuffer;
|
||||
typedef GLuint WebGLTexture;
|
||||
typedef GLuint WebGLUniformLocation;
|
||||
class JCWebGLPlus;
|
||||
/**
|
||||
* @brief
|
||||
*/
|
||||
class JCLayaGL
|
||||
{
|
||||
public:
|
||||
JCLayaGL(int nWidth,int nHeight,JCArrayBufferManager* pArrayBuferManager, JCImageManager* pImageManager,JCIDGenerator* pIDGenerator,JCIDGenerator* pProgramLocationTable,JCRegister* pRegister,JCWebGLPlus* pWebGLPlus);
|
||||
static void _texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels);
|
||||
static void _createVertexArray(GLuint& vao);
|
||||
static void _bindVertexArray(GLuint vao);
|
||||
static void _deleteVertexArray(GLuint& vao);
|
||||
virtual ~JCLayaGL();
|
||||
virtual bool isContextLost();
|
||||
virtual void* getExtension(const std::string& name);
|
||||
virtual void activeTexture(GLenum texture);
|
||||
virtual void attachShader(WebGLProgram program, WebGLShader shader);
|
||||
virtual void bindAttribLocation(WebGLProgram program, GLuint index, const std::string& name);
|
||||
virtual void bindBuffer(GLenum target, WebGLBuffer buffer);
|
||||
virtual void bindFramebuffer(GLenum target, WebGLFramebuffer framebuffer);
|
||||
virtual void bindRenderbuffer(GLenum target, WebGLRenderbuffer renderbuffer);
|
||||
virtual void bindTexture(GLenum target, WebGLTexture texture);
|
||||
virtual void blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
||||
virtual void blendEquation(GLenum mode);
|
||||
virtual void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
|
||||
virtual void blendFunc(GLenum sfactor, GLenum dfactor);
|
||||
virtual void blendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
|
||||
virtual void bufferData_size(GLenum target, GLsizeiptr size, GLenum usage);
|
||||
virtual void bufferData(GLenum target, int dataSize, char* data, GLenum usage);
|
||||
virtual void bufferSubData(GLenum target, GLintptr offset,int dataSize, char* data);
|
||||
virtual GLenum checkFramebufferStatus(GLenum target);
|
||||
virtual void clear(GLbitfield mask);
|
||||
virtual void clearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
||||
virtual void clearDepth(GLclampf depth);
|
||||
virtual void clearStencil(GLint s);
|
||||
virtual void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
|
||||
virtual void compileShader(WebGLShader shader);
|
||||
virtual void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,GLsizei width, GLsizei height, GLint border,int dataSize,char* data);
|
||||
virtual void compressedTexSubImage2D(GLenum target, GLint level,GLint xoffset, GLint yoffset,GLsizei width, GLsizei height, GLenum format, int dataSize,char* data );
|
||||
virtual void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
|
||||
virtual void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
virtual WebGLBuffer createBuffer(int fakeID);
|
||||
virtual WebGLFramebuffer createFramebuffer(int fakeID);
|
||||
virtual WebGLProgram createProgram(int fakeID);
|
||||
virtual WebGLRenderbuffer createRenderbuffer(int fakeID);
|
||||
virtual WebGLShader createShader(int fakeID,GLenum type);
|
||||
virtual WebGLTexture createTexture(int fakeID);
|
||||
virtual void cullFace(GLenum mode);
|
||||
virtual void deleteBuffer(WebGLBuffer buffer);
|
||||
virtual void deleteFramebuffer(WebGLFramebuffer framebuffer);
|
||||
virtual void deleteProgram(WebGLProgram program);
|
||||
virtual void deleteRenderbuffer(WebGLRenderbuffer renderbuffer);
|
||||
virtual void deleteShader(WebGLShader shader);
|
||||
virtual void deleteTexture(WebGLTexture texture);
|
||||
virtual void depthFunc(GLenum func);
|
||||
virtual void depthMask(GLboolean flag);
|
||||
virtual void depthRange(GLclampf zNear, GLclampf zFar);
|
||||
virtual void detachShader(WebGLProgram program, WebGLShader shader);
|
||||
virtual void disable(GLenum cap);
|
||||
virtual void disableVertexAttribArray(GLuint index);
|
||||
virtual void drawArrays(GLenum mode, GLint first, GLsizei count);
|
||||
virtual void drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset);
|
||||
virtual void enable(GLenum cap);
|
||||
virtual void enableVertexAttribArray(GLuint index);
|
||||
virtual void finish();
|
||||
virtual void flush();
|
||||
virtual void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, WebGLRenderbuffer renderbuffer);
|
||||
virtual void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, WebGLTexture texture, GLint level);
|
||||
virtual void frontFace(GLenum mode);
|
||||
virtual void generateMipmap(GLenum target);
|
||||
virtual GLint getAttribLocation(WebGLProgram program,const std::string& name);
|
||||
virtual GLint getBufferParameter(GLenum target, GLenum pname);
|
||||
virtual GLint getParameter(GLenum pname,int fakeID);
|
||||
virtual GLenum getError();
|
||||
virtual GLint getFramebufferAttachmentParameter(GLenum target, GLenum attachment,GLenum pname);
|
||||
virtual GLint getProgramParameter(WebGLProgram program, GLenum pname);
|
||||
virtual std::string getProgramInfoLog(WebGLProgram program);
|
||||
virtual GLint getRenderbufferParameter(GLenum target, GLenum pname);
|
||||
virtual GLint getShaderParameter(WebGLShader shader, GLenum pname);
|
||||
virtual std::string getShaderInfoLog(WebGLShader shader);
|
||||
virtual std::string getShaderSource(WebGLShader shader);
|
||||
virtual GLint getTexParameter(GLenum target, GLenum pname);
|
||||
virtual GLint getUniform(WebGLProgram program, WebGLUniformLocation location);
|
||||
virtual WebGLUniformLocation getUniformLocation(WebGLProgram program, int fakeLoc,const std::string& name);
|
||||
virtual GLint getVertexAttrib(GLuint index, GLenum pname);
|
||||
virtual GLsizeiptr getVertexAttribOffset(GLuint index, GLenum pname);
|
||||
virtual void hint(GLenum target, GLenum mode);
|
||||
virtual GLboolean isBuffer(WebGLBuffer buffer);
|
||||
virtual GLboolean isEnabled(GLenum cap);
|
||||
virtual GLboolean isFramebuffer(WebGLFramebuffer framebuffer);
|
||||
virtual GLboolean isProgram(WebGLProgram program);
|
||||
virtual GLboolean isRenderbuffer(WebGLRenderbuffer renderbuffer);
|
||||
virtual GLboolean isShader(WebGLShader shader);
|
||||
virtual GLboolean isTexture(WebGLTexture texture);
|
||||
virtual void lineWidth(GLfloat width);
|
||||
virtual void linkProgram(WebGLProgram program);
|
||||
virtual void pixelStorei(GLenum pname, GLint param);
|
||||
virtual void polygonOffset(GLfloat factor, GLfloat units);
|
||||
virtual void readPixelsAsync(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, int callbackObjID, int funcID);
|
||||
virtual void renderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
|
||||
virtual void sampleCoverage(GLclampf value, GLboolean invert);
|
||||
virtual void scissor(GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
virtual void shaderSource(WebGLShader shader, const std::string& source);
|
||||
virtual void stencilFunc(GLenum func, GLint ref, GLuint mask);
|
||||
virtual void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
|
||||
virtual void stencilMask(GLuint mask);
|
||||
virtual void stencilMaskSeparate(GLenum face, GLuint mask);
|
||||
virtual void stencilOp(GLenum fail, GLenum zfail, GLenum zpass);
|
||||
virtual void stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
|
||||
virtual void texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, void* pixels);
|
||||
virtual void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels);
|
||||
virtual void texParameterf(GLenum target, GLenum pname, GLfloat param);
|
||||
virtual void texParameteri(GLenum target, GLenum pname, GLint param);
|
||||
virtual void uniform1f(WebGLUniformLocation location, GLfloat x);
|
||||
virtual void uniform1fv(WebGLUniformLocation location, int byteSize, const GLfloat* v );
|
||||
virtual void uniform1i(WebGLUniformLocation location, GLint x);
|
||||
virtual void uniform1iv(WebGLUniformLocation location, int byteSize, const GLint* v );
|
||||
virtual void uniform2f(WebGLUniformLocation location, GLfloat x, GLfloat y);
|
||||
virtual void uniform2fv(WebGLUniformLocation location, int byteSize, const GLfloat* v );
|
||||
virtual void uniform2i(WebGLUniformLocation location, GLint x, GLint y);
|
||||
virtual void uniform2iv(WebGLUniformLocation location, int byteSize, const GLint* v );
|
||||
virtual void uniform3f(WebGLUniformLocation location, GLfloat x, GLfloat y, GLfloat z);
|
||||
virtual void uniform3fv(WebGLUniformLocation location, int byteSize, const GLfloat* v);
|
||||
virtual void uniform3i(WebGLUniformLocation location, GLint x, GLint y, GLint z);
|
||||
virtual void uniform3iv(WebGLUniformLocation location, int byteSize, const GLint* v );
|
||||
virtual void uniform4f(WebGLUniformLocation location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
|
||||
virtual void uniform4fv(WebGLUniformLocation location, int byteSize, const GLfloat* v );
|
||||
virtual void uniform4i(WebGLUniformLocation location, GLint x, GLint y, GLint z, GLint w);
|
||||
virtual void uniform4iv(WebGLUniformLocation location, int byteSize, const GLint* v);
|
||||
virtual void uniformMatrix2fv(WebGLUniformLocation location, int byteSize,GLboolean transpose,GLfloat* value);
|
||||
virtual void uniformMatrix3fv(WebGLUniformLocation location, int byteSize,GLboolean transpose,GLfloat* value);
|
||||
virtual void uniformMatrix4fv(WebGLUniformLocation location, int byteSize, GLboolean transpose,GLfloat* value);
|
||||
virtual void useProgram(WebGLProgram program);
|
||||
virtual void validateProgram(WebGLProgram program);
|
||||
virtual void vertexAttrib1f(GLuint index, GLfloat x);
|
||||
virtual void vertexAttrib1fv(GLuint index, GLfloat* values);
|
||||
virtual void vertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
|
||||
virtual void vertexAttrib2fv(GLuint index, GLfloat* values);
|
||||
virtual void vertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
|
||||
virtual void vertexAttrib3fv(GLuint index, GLfloat* values);
|
||||
virtual void vertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
|
||||
virtual void vertexAttrib4fv(GLuint index, GLfloat* values);
|
||||
virtual void vertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);
|
||||
virtual void viewport(GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
virtual void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
|
||||
virtual int createVertexArray(int fakeID);
|
||||
virtual void bindVertexArray(int fakeID);
|
||||
virtual void deleteVertexArray(int fakeID);
|
||||
virtual void vertexAttribDivisor(GLuint index, GLuint divisor);
|
||||
virtual void drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei primcount);
|
||||
virtual void drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLintptr indices, GLsizei primcount);
|
||||
virtual void texImage2DCanvas(GLsizei width, GLsizei height, int canvas);
|
||||
virtual void texStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
virtual void useCommandEncoder(int nCmdSetID);
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
public:
|
||||
virtual void deleteAllGLRes();
|
||||
virtual void removeTextureFromMap(GLuint texture);
|
||||
virtual void removeFrameBufferFromMap(GLuint frameBuffer);
|
||||
virtual void removeProgramFromMap(GLuint program);
|
||||
virtual void removeShaderFromMap(GLuint shader);
|
||||
virtual void removeRenderBufferFromMap(GLuint renderBuffer);
|
||||
virtual void removeBufferFromMap(GLuint buffer);
|
||||
virtual void removeVAOFromMap(GLuint VAO);
|
||||
public:
|
||||
void _readPixelsAsync(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, int callbackObjID, int funcID);
|
||||
private:
|
||||
void flipY(GLenum format, GLsizei width, GLsizei height, void* pixels);
|
||||
public:
|
||||
static char m_pDummyData[TEX_IMAGE2D_DUMMY_MAX_SIZE];
|
||||
public:
|
||||
JCWebGLPlus* m_pWebGLPlus;
|
||||
JCImageManager* m_pImageManager;
|
||||
JCArrayBufferManager* m_pArrayBufferManager;
|
||||
JCRegister* m_pRegister;
|
||||
protected:
|
||||
GLint m_nMainFrameBuffer;
|
||||
JCIDGenerator* m_pIDGenerator;
|
||||
JCIDGenerator* m_pProgramLocationTable;
|
||||
bool m_bFlipY;
|
||||
public:
|
||||
int m_nCurrentBuffer;
|
||||
int m_nCurrentProgram;
|
||||
static float s_fMainCanvasScaleX;
|
||||
static float s_fMainCanvasScaleY;
|
||||
static float s_fMainCanvasTX;
|
||||
static float s_fMainCanvasTY;
|
||||
int m_nMainCanvasWidth;
|
||||
int m_nMainCanvasHeight;
|
||||
private:
|
||||
std::unordered_map<GLuint, bool> m_vAllTexture;
|
||||
std::unordered_map<GLuint, bool> m_vAllFrameBuffer;;
|
||||
std::unordered_map<GLuint, bool> m_vAllProgram;
|
||||
std::unordered_map<GLuint, bool> m_vAllShader;
|
||||
std::unordered_map<GLuint, bool> m_vAllRenderBuffer;
|
||||
std::unordered_map<GLuint, bool> m_vAllBuffer;
|
||||
std::unordered_map<GLuint, bool> m_vAllVAO;
|
||||
};
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#endif //__JCLayaGL_H__
|
||||
|
||||
//-----------------------------END FILE--------------------------------
|
||||
Reference in New Issue
Block a user