/** @file JCWebGLPlus.h @brief @author James @version 1.0 @date 2019_8_24 */ #ifndef __JCWebGLPlus_H__ #define __JCWebGLPlus_H__ #if __APPLE__ #include #else #include #endif #include #include #include #include #include "Manager/JCArrayBufferManager.h" namespace laya { enum THREAD_MODE { THREAD_MODE_SINGLE = 1, THREAD_MODE_DOUBLE, }; enum UNIFORM_FUN { UNIFORM1F = 0, UNIFORM1FV, UNIFORM1I, UNIFORM1IV, UNIFORM2F, UNIFORM2FV, UNIFORM2I, UNIFORM2IV, UNIFORM3F, UNIFORM3FV, UNIFORM3I, UNIFORM3IV, UNIFORM4F, UNIFORM4FV, UNIFORM4I, UNIFORM4IV, UNIFORMMATRIX2FV, UNIFORMMATRIX3FV, UNIFORMMATRIX4FV, UNIFORMSAMPLER_2D, UNIFORMSAMPLER_CUBE, }; struct WEBGLPLUS_iiiiii { int b; int c; int d; int e; int f; int g; }; /** * @brief */ class JCWebGLPlus { public: /** @brief构造函数 */ JCWebGLPlus(); /** @brief析构函数 */ ~JCWebGLPlus(); static JCWebGLPlus* getInstance(); static void releaseInstance(); void init(int nThreadMode); void exportJS(void* ctx, void* object); void clearAll(); private: void clean(); public: int culling3D(int cullingCount, char* pFrustumBuffer, int nFrustumLen, char* pCullingBuffer, int nCullingBufferLen, char* pCullingBufferIndices, int nCullingBufferIndicesLen, char* pCullingBufferResult, int nCullingBufferResultLen); bool updateAnimationNodeWorldMatix3D(char* pLocPosition, int nLocPosLen, char* pLocRotation, int nLocRotLen, char* pLocScaling, int nLocScaLen, char* pParentIndices, int nLocParentLen, char* pOutWorldMatrix, int nOutWorldLen); bool computeSubSkinnedData3D(char* pWorldMatrixs, int nWorldMatLen, char* pWorldMatrixIndex, int nWorldMatIndeLen, char* pInverseBindPoses, int nInverseBindPosesLen, char* pBoneIndices, int nBoneIndicesLen, char* pBindPoseIndices, int nBindPoseIndicesLen, char* pResultData, int nResultDataLen); void calcMatrix(float* pos, float* scale, float* quat, float* outE); void matrix4x4MultiplyFFF(float* a, float* b, float* e); public: void uniformMatrix2fvEx(GLuint location, GLboolean transpose, int id); void uniformMatrix3fvEx(GLuint location, GLboolean transpose, int id); void uniformMatrix4fvEx(GLuint location, GLboolean transpose, int id); void uploadShaderUniforms(int nCmdID, int nDataID); void uploadShaderUniformsBuffer(int nCmdID, char* pData, int nDataSize); void _uploadShaderUniforms(JCCommandEncoderBuffer* cmd, char* data, int dataSize); public: static JCWebGLPlus* s_pWebGLPlus; JCArrayBufferManager* m_pJSArrayBufferManager; /// uniform1f; std::function uniform1fv; std::function uniform1i; std::function uniform1iv; std::function uniform2f; std::function uniform2fv; std::function uniform2i; std::function uniform2iv; std::function uniform3f; std::function uniform3fv; std::function uniform3i; std::function uniform3iv; std::function uniform4f; std::function uniform4fv; std::function uniform4i; std::function uniform4iv; std::function uniformMatrix2fv; std::function uniformMatrix3fv; std::function uniformMatrix4fv; std::function activeTexture; std::function bindTexture; }; } #endif //__JCWebGLPlus_H__ //-----------------------------END FILE--------------------------------