/** @file JSLayaGL.h @brief @author James @version 1.0 @date 2018_5_25 */ #ifndef __JSLayaGL_H__ #define __JSLayaGL_H__ #include "../JSInterface/JSInterface.h" #include #include #include /** * @brief */ namespace laya { struct WebGLActiveInfo { const static GLsizei bufsize = 255; GLsizei length; GLint size; GLenum type; GLchar name[bufsize]; }; struct ShaderPrecisionFormat { int range[2]; int precision[1]; }; class JSLayaGL:public JsObjBase, public JSObjNode { public: static JsObjClassInfo JSCLSINFO; void exportJS(); static JSLayaGL* getInstance(); JSLayaGL(); ~JSLayaGL(); void setSyncArrayBufferID(int nSyncArrayBufferID); void setFrameAndSyncCountArrayBufferID(int nBufferID); void setRootCommandEncoder( int nCommandEncoderID ); public: int getAttribLocationEx(const char* vs, const char* ps, const char* define,const char* sName); JsValue getShaderPrecisionFormat(int shaderType, int precisionType); JsValue getUniformEx(const char* locationName); int getParameter(int pname); bool getBooleanv(int pname); int getIntegerv(int pname); JsValue getIntegerArrayv(int pname); float getFloatv(int pname); JsValue getFloatArrayv(int pname); JsValue readPixels(int x, int y, int width, int height, int format, int type); void setCurrentContext(int nContextID); int getThreadMode(); public: int getProgramParameterEx(const char* vs, const char* ps, const char* define, int type); JsValue getActiveAttribEx(const char* vs, const char* ps, const char* define, int nIndex); JsValue getActiveUniformEx(const char* vs, const char* ps, const char* define, int nIndex); const char* getStringEx(unsigned int name); const char* getShaderInfoLogEx(const char* source,int type); const char* getProgramInfoLogEx(const char* vs, const char* ps, const char* define); //int getBufferParameter(int target, int pname); int getFramebufferAttachmentParameter(int target, int attachement, int pname); //int getRenderbufferParameter(int target, int pname); //int getTexParameter(int target, int pname); int getShaderParameter(const char* src, int type,int pname); int checkFramebufferStatusEx(int target); int getVertexAttribEx(int index, int target); JsValue getVertexAttribExfv(int index, int target); int getVertexAttribOffset(int index, int target); int getBufferParameterEx(int target, int pname); int getRenderbufferParameterEx(int target, int pname); int getTexParameterEx(int target, int pname); int isEnabled(unsigned int cap); void flushCommand(); void setMainContextSize(int width, int height); private: void _getStringEx(unsigned int name); void _getProgramParameterEx(const std::string& vs, const std::string& ps, const std::string& define, int type); void _getActiveAttribEx(const std::string& vs, const std::string& ps, const std::string& define, int nIndex); void _getActiveUniformEx(const std::string& vs, const std::string& ps, const std::string& define, int nIndex); void _getAttribLocationEx(const std::string& vs, const std::string& ps, const std::string& define, const std::string& name); void _getShaderPrecisionFormat(int shaderType, int precisionType); void _getUniformEx(const std::string& locationName); void _getParameter(int pname); void _getBooleanv(int pname); void _getIntegerv(int pname); void _getIntegerArrayv(int pname); void _getFloatv(int pname); void _getFloatArrayv(int pname); void _createShader(const std::string& vs, const std::string& ps, const std::string& define); void _getShaderInfoLog(const std::string& source,int type); void _getProgramInfoLog(const std::string& vs, const std::string& ps, const std::string& define); //void _getBufferParameter(int target, int pname); void _getFramebufferAttachmentParameter(int target, int attachement, int pname); //void _getRenderbufferParameter(int target, int pname); //void _getTexParameter(int target, int pname); void _getShaderParameter(const std::string& source, int type, int pname); void _readPixels(int x, int y, int width, int height, int format, int type); public: static JSLayaGL* s_pLayaGL; JCGlobalValue* m_pValueTemplate; int m_nSyncToRenderABListID; int m_nFrameAndSyncCountABListID; int m_nRootCommandEncoderID; JCArrayBufferManager::ArrayBufferContent* m_pRootCommandEncoder; int m_nFrameCount; int m_nSyncArrayBufferCount; int m_nParameterResult; float m_nParameterResultFloat; GLboolean m_nParameterResultBool; std::vector m_nParameterResultArray; std::vector m_nParameterResultByteArray; private: int m_nAttribLocation; int m_nProgramParameter; ShaderPrecisionFormat* m_pShaderPrecisionFormat; WebGLActiveInfo* m_pShaderActiveInfo; JCGpuProgramTemplate* m_pShaderTemplate; JCGpuProgram* m_pGpuProgram; std::string m_sShaderVS; std::string m_sShaderPS; std::string m_sShaderDefine; std::string m_sErrorInfo; std::string m_sGLString; }; } //------------------------------------------------------------------------------ #endif //__JSLayaGL_H__ //-----------------------------END FILE--------------------------------