@@ -13,13 +13,30 @@
# include <memory>
# include <memory>
# include <atomic>
# include <atomic>
namespace Vivid2D : : Render : : Texture
{
class Texture ;
}
// <20> <> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> spdlog::logger <20> Ա<EFBFBD> <D4B1> <EFBFBD> <EFBFBD> <EFBFBD> ͷ<EFBFBD> ļ<EFBFBD> <C4BC> а <EFBFBD> <D0B0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> spdlog::logger <20> Ա<EFBFBD> <D4B1> <EFBFBD> <EFBFBD> <EFBFBD> ͷ<EFBFBD> ļ<EFBFBD> <C4BC> а <EFBFBD> <D0B0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
namespace spdlog {
namespace spdlog {
class logger ;
class logger ;
}
}
/**
* @class RenderSystem
* @brief <20> ṩһ <E1B9A9> <D2BB> <EFBFBD> ̰߳<DFB3> ȫ<EFBFBD> ġ<EFBFBD> <C4A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> е <EFBFBD> OpenGL API <20> <> װ<EFBFBD> 㡣
* @details
* <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> ȫ<EFBFBD> <C8AB> ̬<EFBFBD> <CCAC> <EFBFBD> ּ࣬<E0A3AC> ڽ<EFBFBD> <DABD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> κ<EFBFBD> <CEBA> ̵߳<DFB3> <CCB5> <EFBFBD> Ⱦ<EFBFBD> <C8BE> <EFBFBD> <EFBFBD> <EFBFBD> Ŷӣ<C5B6> <D3A3> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> ר<EFBFBD> õ<EFBFBD> <C3B5> <EFBFBD> Ⱦ<EFBFBD> ߳<EFBFBD> <DFB3> <EFBFBD> ִ<EFBFBD> <D6B4> <EFBFBD> <EFBFBD> <EFBFBD> ǡ<EFBFBD>
* <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȷ<EFBFBD> <C8B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> OpenGL <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̰߳<DFB3> ȫ<EFBFBD> ԡ<EFBFBD> <D4A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ṩ<EFBFBD> ˶<EFBFBD> OpenGL ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* <20> <EFBFBD> <DFBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ܣ<EFBFBD> <DCA3> Լ<EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> ڵ<EFBFBD> <DAB5> ԵĴ<D4B5> <C4B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ơ<EFBFBD>
* ʹ <> ÷<EFBFBD> <C3B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̻߳<DFB3> <CCBB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <DFBC> ߳<EFBFBD> <DFB3> е <EFBFBD> <D0B5> ù<EFBFBD> <C3B9> <EFBFBD> <EFBFBD> ľ<EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> RenderSystem::drawElements<74> <73> <EFBFBD> <EFBFBD>
* <20> <> Щ<EFBFBD> <D0A9> <EFBFBD> <EFBFBD> <EFBFBD> Ὣ<EFBFBD> <E1BDAB> Ⱦ<EFBFBD> <C8BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ¼<EFBFBD> <C2BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> <EFBFBD> Ⱦ<EFBFBD> ̵߳<DFB3> ѭ<EFBFBD> <D1AD> <EFBFBD> У <EFBFBD> <D0A3> <EFBFBD> <EFBFBD> <EFBFBD> RenderSystem::replayQueue()
* <20> <> ִ<EFBFBD> <D6B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŷӵ<C5B6> <D3B5> <EFBFBD> <EFBFBD>
*/
class VIVID_2D_MYDLL_API RenderSystem {
class VIVID_2D_MYDLL_API RenderSystem {
public :
public :
// RenderSystem <20> <> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> ̬<EFBFBD> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> ࣬<EFBFBD> <E0A3AC> <EFBFBD> ˽<EFBFBD> ֹʵ<D6B9> <CAB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
RenderSystem ( ) = delete ;
RenderSystem ( ) = delete ;
~ RenderSystem ( ) = delete ;
~ RenderSystem ( ) = delete ;
RenderSystem ( const RenderSystem & ) = delete ;
RenderSystem ( const RenderSystem & ) = delete ;
@@ -38,36 +55,151 @@ public:
static void ShutdownLogging ( ) ;
static void ShutdownLogging ( ) ;
// ================== <20> <> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD> <EFBFBD> ̹߳<DFB3> <CCB9> <EFBFBD> ==================
// ================== <20> <> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD> <EFBFBD> ̹߳<DFB3> <CCB9> <EFBFBD> ==================
/**
* @brief <20> <> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ר<EFBFBD> õ<EFBFBD> <C3B5> <EFBFBD> Ⱦ<EFBFBD> ̡߳<DFB3>
*/
static void initRenderThread ( ) ;
static void initRenderThread ( ) ;
/**
* @brief <20> <> ʼ <EFBFBD> <CABC> Ⱦϵͳ<CFB5> ij<EFBFBD> ʼ <EFBFBD> <CABC> <EFBFBD> Ρ <D7B6> <CEA1> ڴ˽Σ<D7B6> <CEA3> <EFBFBD> <EFBFBD> ÿ<EFBFBD> <C3BF> <EFBFBD> ֱ<EFBFBD> <D6B1> <EFBFBD> ڵ<EFBFBD> <DAB5> <EFBFBD> <EFBFBD> ߳<EFBFBD> <DFB3> <EFBFBD> ִ<EFBFBD> С <EFBFBD>
*/
static void beginInitialization ( ) ;
static void beginInitialization ( ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ⱦϵͳ<CFB5> ij<EFBFBD> ʼ <EFBFBD> <CABC> <EFBFBD> Ρ <D7B6> <CEA1> ˺<EFBFBD> <CBBA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> е <EFBFBD> <D0B5> ö<EFBFBD> <C3B6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŷӡ<C5B6>
*/
static void finishInitialization ( ) ;
static void finishInitialization ( ) ;
/**
* @brief <20> <> <EFBFBD> 鵱ǰ<E9B5B1> ߳<EFBFBD> <DFB3> Ƿ<EFBFBD> <C7B7> <EFBFBD> <EFBFBD> <EFBFBD> Ⱦ<EFBFBD> ̡߳<DFB3>
* @return <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ⱦ<EFBFBD> ̣߳<DFB3> <CCA3> <EFBFBD> true<75> <65>
*/
static bool isOnRenderThread ( ) ;
static bool isOnRenderThread ( ) ;
/**
* @brief <20> <> <EFBFBD> 鵱ǰ<E9B5B1> Ƿ<EFBFBD> <C7B7> <EFBFBD> <EFBFBD> ڳ<EFBFBD> ʼ <EFBFBD> <CABC> <EFBFBD> Ρ <D7B6>
* @return <20> <> <EFBFBD> <EFBFBD> <EFBFBD> dz<EFBFBD> ʼ <EFBFBD> <CABC> <EFBFBD> Σ<D7B6> <CEA3> <EFBFBD> true<75> <65>
*/
static bool isInInitPhase ( ) ;
static bool isInInitPhase ( ) ;
/**
* @brief <20> <> <EFBFBD> Ե<EFBFBD> ǰ<EFBFBD> ̱߳<DFB3> <CCB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ⱦ<EFBFBD> ̣߳<DFB3> <CCA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֹ<EFBFBD> <D6B9>
*/
static void assertOnRenderThread ( ) ;
static void assertOnRenderThread ( ) ;
/**
* @brief <20> <> <EFBFBD> Ե<EFBFBD> ǰ<EFBFBD> ̱߳<DFB3> <CCB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ⱦ<EFBFBD> ̻߳<DFB3> <CCBB> <EFBFBD> <EFBFBD> ڳ<EFBFBD> ʼ <EFBFBD> <CABC> <EFBFBD> Ρ <D7B6>
*/
static void assertOnRenderThreadOrInit ( ) ;
static void assertOnRenderThreadOrInit ( ) ;
/**
* @brief ʹ <> <CAB9> GLAD <20> <> <EFBFBD> <EFBFBD> OpenGL <20> <> <EFBFBD> <EFBFBD> ָ<EFBFBD> 롣
* @param loader һ <> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> 룬<EFBFBD> <EBA3AC> <EFBFBD> ڻ<EFBFBD> ȡ OpenGL <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ĵ<EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> glfwGetProcAddress<73> <73> <EFBFBD> <EFBFBD>
*/
static void loadGLFunctions ( GLADloader loader ) ;
static void loadGLFunctions ( GLADloader loader ) ;
// ================== <20> <> Ⱦ<EFBFBD> <C8BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
// ================== <20> <> Ⱦ<EFBFBD> <C8BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
/**
* @brief <20> <> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> Ⱦ<EFBFBD> <C8BE> <EFBFBD> ã<EFBFBD> <C3A3> <EFBFBD> Ϊ lambda <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ¼<EFBFBD> <C2BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> У <EFBFBD> <D0A3> Ա<EFBFBD> <D4B1> Ժ<EFBFBD> <D4BA> <EFBFBD> <EFBFBD> <EFBFBD> Ⱦ<EFBFBD> ߳<EFBFBD> <DFB3> <EFBFBD> ִ<EFBFBD> С <EFBFBD>
* @param renderCall Ҫִ<D2AA> е <EFBFBD> <D0B5> <EFBFBD> Ⱦ<EFBFBD> <C8BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void recordRenderCall ( std : : function < void ( ) > & & renderCall ) ;
static void recordRenderCall ( std : : function < void ( ) > & & renderCall ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> Ⱦ<EFBFBD> ߳<EFBFBD> <DFB3> <EFBFBD> ִ<EFBFBD> <D6B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> е <EFBFBD> <D0B5> <EFBFBD> <EFBFBD> д<EFBFBD> <D0B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ⱦ<EFBFBD> <C8BE> <EFBFBD> á<EFBFBD>
*/
static void replayQueue ( ) ;
static void replayQueue ( ) ;
// ================== OpenGL ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> װ ==================
// ================== OpenGL ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> װ ==================
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> OpenGL <20> <> <EFBFBD> ܣ<EFBFBD> <DCA3> <EFBFBD> <EFBFBD> <EFBFBD> GL_BLEND<4E> <44> <EFBFBD> <EFBFBD>
* @param capability Ҫ<> <D2AA> <EFBFBD> õ<EFBFBD> OpenGL <20> <> <EFBFBD> <EFBFBD> ö<EFBFBD> ١ <EFBFBD>
*/
static void enable ( GLenum capability ) ;
static void enable ( GLenum capability ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> OpenGL <20> <> <EFBFBD> ܡ<EFBFBD>
* @param capability Ҫ<> <D2AA> <EFBFBD> õ<EFBFBD> OpenGL <20> <> <EFBFBD> <EFBFBD> ö<EFBFBD> ١ <EFBFBD>
*/
static void disable ( GLenum capability ) ;
static void disable ( GLenum capability ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> Ⱦ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϡ<EFBFBD> <CFA1> ӿڵȣ <DAB5> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> ״̬<D7B4> <CCAC> ջ<EFBFBD> <D5BB>
*/
static void pushState ( ) ;
static void pushState ( ) ;
/**
* @brief <20> <> ״̬<D7B4> <CCAC> ջ<EFBFBD> е <EFBFBD> <D0B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> <D6B8> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> Ⱦ״̬<D7B4> <CCAC>
*/
static void popState ( ) ;
static void popState ( ) ;
/**
* @brief <20> <> ȡ<EFBFBD> <C8A1> ǰ״̬<D7B4> <CCAC> ջ<EFBFBD> Ĵ<EFBFBD> С <EFBFBD> <D0A1>
* @return <20> <> ջ<EFBFBD> е <EFBFBD> ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static size_t getStateStackSize ( ) ;
static size_t getStateStackSize ( ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB>
*/
static void clearColor ( float r , float g , float b , float a ) ;
static void clearColor ( float r , float g , float b , float a ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> ָ<EFBFBD> <D6B8> <EFBFBD> Ļ<EFBFBD> <C4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> GL_COLOR_BUFFER_BIT<49> <54> <EFBFBD> <EFBFBD>
* @param mask Ҫ<> <D2AA> <EFBFBD> <EFBFBD> <EFBFBD> Ļ<EFBFBD> <C4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> <CEBB> <EFBFBD> <EFBFBD> <EFBFBD> 롣
*/
static void clear ( GLbitfield mask ) ;
static void clear ( GLbitfield mask ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> OpenGL <20> ӿڡ<D3BF>
*/
static void viewport ( int x , int y , int width , int height ) ;
static void viewport ( int x , int y , int width , int height ) ;
// ================== VAO / VBO / EBO <20> <> <EFBFBD> <EFBFBD> ==================
// ================== VAO / VBO / EBO <20> <> <EFBFBD> <EFBFBD> ==================
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (VAO)<29> <>
* @return <20> ´ <EFBFBD> <C2B4> <EFBFBD> <EFBFBD> <EFBFBD> VAO <20> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLuint GenVertexArrays ( ) ;
static GLuint GenVertexArrays ( ) ;
/**
* @brief ɾ<> <C9BE> һ <EFBFBD> <D2BB> VAO<41> <4F>
* @param vao Ҫɾ<D2AA> <C9BE> <EFBFBD> <EFBFBD> VAO <20> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void DeleteVertexArrays ( GLuint vao ) ;
static void DeleteVertexArrays ( GLuint vao ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> VAO<41> <4F>
* @param vao Ҫ<> <EFBFBD> VAO <20> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void BindVertexArray ( GLuint vao ) ;
static void BindVertexArray ( GLuint vao ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (VBO/EBO)<29> <>
* @return <20> ´ <EFBFBD> <C2B4> <EFBFBD> <EFBFBD> Ļ<EFBFBD> <C4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLuint GenBuffers ( ) ;
static GLuint GenBuffers ( ) ;
/**
* @brief ɾ<> <C9BE> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @param buffer Ҫɾ<D2AA> <C9BE> <EFBFBD> Ļ<EFBFBD> <C4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void DeleteBuffers ( GLuint buffer ) ;
static void DeleteBuffers ( GLuint buffer ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @param target <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŀ<EFBFBD> <C4BF> (<28> <> <EFBFBD> <EFBFBD> GL_ARRAY_BUFFER)<29> <>
* @param buffer Ҫ<> Ļ<F3B6A8B5> <C4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void BindBuffer ( GLenum target , GLuint buffer ) ;
static void BindBuffer ( GLenum target , GLuint buffer ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <CFB4> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> Ļ<F3B6A8B5> <C4BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @param target <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŀ<EFBFBD> ꡣ
* @param size <20> <> <EFBFBD> ݵĴ<DDB5> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> <EFBFBD> ֽ<EFBFBD> Ϊ<EFBFBD> <CEAA> λ<EFBFBD> <CEBB> <EFBFBD> <EFBFBD>
* @param data ָ<> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> ݵ<EFBFBD> ָ<EFBFBD> 롣
* @param usage <20> <> <EFBFBD> ݵ<EFBFBD> Ԥ<EFBFBD> <D4A4> <EFBFBD> <EFBFBD> ; (<28> <> <EFBFBD> <EFBFBD> GL_STATIC_DRAW)<29> <>
*/
static void BufferData ( GLenum target , GLsizeiptr size , const void * data , GLenum usage ) ;
static void BufferData ( GLenum target , GLsizeiptr size , const void * data , GLenum usage ) ;
// ================== Uniform <20> <> <EFBFBD> <EFBFBD> ==================
// ================== Uniform <20> <> <EFBFBD> <EFBFBD> ==================
@@ -83,39 +215,147 @@ public:
static void uniform4f ( GLint location , const glm : : vec4 & vec ) ;
static void uniform4f ( GLint location , const glm : : vec4 & vec ) ;
static void uniformMatrix3 ( GLint location , const glm : : mat3 & matrix , bool transpose = false ) ;
static void uniformMatrix3 ( GLint location , const glm : : mat3 & matrix , bool transpose = false ) ;
static void uniformMatrix4 ( GLint location , const glm : : mat4 & matrix , bool transpose = false ) ;
static void uniformMatrix4 ( GLint location , const glm : : mat4 & matrix , bool transpose = false ) ;
/**
* @brief <20> <> ȡ<EFBFBD> <C8A1> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> uniform <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> á<EFBFBD>
* @param program <20> <> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
* @param name uniform <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ơ<EFBFBD>
* @return uniform <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> á<EFBFBD>
*/
static GLint getUniformLocation ( GLuint program , const std : : string & name ) ;
static GLint getUniformLocation ( GLuint program , const std : : string & name ) ;
// ================== <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
// ================== <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
/**
* @brief <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ߿<EFBFBD> <DFBF> <EFBFBD>
*/
static void lineWidth ( float width ) ;
static void lineWidth ( float width ) ;
/**
* @brief ʹ <> <CAB9> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> л<EFBFBD> <D0BB> ơ<EFBFBD>
*/
static void drawElements ( GLenum mode , GLsizei count , GLenum type , const void * indices ) ;
static void drawElements ( GLenum mode , GLsizei count , GLenum type , const void * indices ) ;
/**
* @brief ֱ<> <D6B1> ʹ <EFBFBD> ö<EFBFBD> <C3B6> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> л<EFBFBD> <D0BB> ơ<EFBFBD>
*/
static void drawArrays ( GLenum mode , GLint first , GLsizei count ) ;
static void drawArrays ( GLenum mode , GLint first , GLsizei count ) ;
// ================== <20> <> <EFBFBD> <EFBFBD> ģʽ ==================
// ================== <20> <> <EFBFBD> <EFBFBD> ģʽ ==================
/**
* @brief <20> <> <EFBFBD> û<EFBFBD> <C3BB> ϡ<EFBFBD>
*/
static void enableBlend ( ) ;
static void enableBlend ( ) ;
/**
* @brief <20> <> <EFBFBD> û<EFBFBD> <C3BB> ϡ<EFBFBD>
*/
static void disableBlend ( ) ;
static void disableBlend ( ) ;
/**
* @brief <20> <> <EFBFBD> û<EFBFBD> <C3BB> Ϻ <EFBFBD> <CFBA> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void blendFunc ( GLenum sfactor , GLenum dfactor ) ;
static void blendFunc ( GLenum sfactor , GLenum dfactor ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> Ĭ<EFBFBD> ϵ<EFBFBD> Alpha <20> <> <EFBFBD> Ϻ <EFBFBD> <CFBA> <EFBFBD> (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)<29> <>
*/
static void defaultBlendFunc ( ) ;
static void defaultBlendFunc ( ) ;
// ================== <20> <> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
// ================== <20> <> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> յ<EFBFBD> <D5B5> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @return <20> ³<EFBFBD> <C2B3> <EFBFBD> <EFBFBD> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLuint createProgram ( ) ;
static GLuint createProgram ( ) ;
/**
* @brief <20> <> ȡ<EFBFBD> <C8A1> ǰ<EFBFBD> <EFBFBD> <F3B6A8B5> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @return <20> <> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> <EFBFBD> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLint getCurrentProgram ( ) ;
static GLint getCurrentProgram ( ) ;
/**
* @brief <20> <> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> ӵ<EFBFBD> <D3B5> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void attachShader ( GLuint program , GLuint shader ) ;
static void attachShader ( GLuint program , GLuint shader ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void linkProgram ( GLuint program ) ;
static void linkProgram ( GLuint program ) ;
/**
* @brief <20> <> ȡ<EFBFBD> <C8A1> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> IJ<EFBFBD> <C4B2> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLint getProgrami ( GLuint program , GLenum pname ) ;
static GLint getProgrami ( GLuint program , GLenum pname ) ;
/**
* @brief <20> <> ȡ<EFBFBD> <C8A1> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ־<EFBFBD> <D6BE> Ϣ<EFBFBD> <CFA2>
*/
static std : : string getProgramInfoLog ( GLuint program ) ;
static std : : string getProgramInfoLog ( GLuint program ) ;
/**
* @brief <20> ӳ<EFBFBD> <D3B3> <EFBFBD> <EFBFBD> з<EFBFBD> <D0B7> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD>
*/
static void detachShader ( GLuint program , GLuint shader ) ;
static void detachShader ( GLuint program , GLuint shader ) ;
/**
* @brief ɾ<> <C9BE> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void deleteProgram ( GLuint program ) ;
static void deleteProgram ( GLuint program ) ;
/**
* @brief <20> <> <EFBFBD> Ӷ<EFBFBD> <D3B6> <EFBFBD> <EFBFBD> <EFBFBD> Ƭ<EFBFBD> <C6AC> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> Դ<EFBFBD> <D4B4> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ij<EFBFBD> <C4B3> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLuint linkProgram ( GLuint vertexShader , GLuint fragmentShader ) ;
static GLuint linkProgram ( GLuint vertexShader , GLuint fragmentShader ) ;
/**
* @brief <20> <> <EFBFBD> Ӷ<EFBFBD> <D3B6> 㡢<EFBFBD> <E3A1A2> <EFBFBD> κ<EFBFBD> Ƭ<EFBFBD> <C6AC> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> Դ<EFBFBD> <D4B4> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ij<EFBFBD> <C4B3> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLuint linkProgram ( GLuint vertexShader , GLuint geometryShader , GLuint fragmentShader ) ;
static GLuint linkProgram ( GLuint vertexShader , GLuint geometryShader , GLuint fragmentShader ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void useProgram ( GLuint program ) ;
static void useProgram ( GLuint program ) ;
// ================== <20> <> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
// ================== <20> <> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> ͵<EFBFBD> <CDB5> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @param type <20> <> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> GL_VERTEX_SHADER)<29> <>
* @return <20> <> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLuint createShader ( GLenum type ) ;
static GLuint createShader ( GLenum type ) ;
/**
* @brief Ϊ<> <CEAA> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Դ<EFBFBD> <D4B4> <EFBFBD> 롣
*/
static void shaderSource ( GLuint shader , const std : : string & source ) ;
static void shaderSource ( GLuint shader , const std : : string & source ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD>
*/
static void compileShader ( GLuint shader ) ;
static void compileShader ( GLuint shader ) ;
/**
* @brief <20> <> ȡ<EFBFBD> <C8A1> ɫ<EFBFBD> <C9AB> <EFBFBD> IJ<EFBFBD> <C4B2> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLint getShaderi ( GLuint shader , GLenum pname ) ;
static GLint getShaderi ( GLuint shader , GLenum pname ) ;
/**
* @brief <20> <> ȡ<EFBFBD> <C8A1> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ־<EFBFBD> <D6BE> Ϣ<EFBFBD> <CFA2>
*/
static std : : string getShaderInfoLog ( GLuint shader ) ;
static std : : string getShaderInfoLog ( GLuint shader ) ;
/**
* @brief ɾ<> <C9BE> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD>
*/
static void deleteShader ( GLuint shader ) ;
static void deleteShader ( GLuint shader ) ;
/**
* @brief <20> <> Դ<EFBFBD> <D4B4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> ͵<EFBFBD> <CDB5> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD>
* @return <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLuint compileShader ( GLenum type , const std : : string & source ) ;
static GLuint compileShader ( GLenum type , const std : : string & source ) ;
// ================== <20> <> <EFBFBD> Ȳ<EFBFBD> <C8B2> <EFBFBD> ==================
// ================== <20> <> <EFBFBD> Ȳ<EFBFBD> <C8B2> <EFBFBD> ==================
@@ -126,10 +366,36 @@ public:
static void disableDepthTest ( ) ;
static void disableDepthTest ( ) ;
// ================== <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
// ================== <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> 2D <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <EFBFBD> <EEB6AF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ԫ<EFBFBD> <D4AA>
* @param texture Ҫ<> <EFBFBD> <F3B6A8B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void bindTexture ( GLuint texture ) ;
static void bindTexture ( GLuint texture ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> Texture <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ԫ<EFBFBD> <D4AA>
* @details <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ԫ<EFBFBD> Ͱ<EFBFBD> <CDB0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϲ <EFBFBD> Ϊһ <CEAA> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD>
* <20> <> <EFBFBD> <EFBFBD> ȫ<EFBFBD> <C8AB> <EFBFBD> ύ<EFBFBD> <E1BDBB> <EFBFBD> <EFBFBD> Ⱦ<EFBFBD> ̡߳<DFB3>
* @param texture Ҫ<> <EFBFBD> Texture <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ij<EFBFBD> <C4B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> á<EFBFBD>
* @param textureUnit Ҫ<> <EFBFBD> <F3B6A8B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ԫ<EFBFBD> <D4AA> <EFBFBD> <EFBFBD> (0, 1, 2, ...)<29> <>
*/
static void bindTexture ( const Vivid2D : : Render : : Texture : : Texture & texture , int textureUnit = 0 ) ;
static void getTexImage ( GLenum target , GLint level , GLenum format , GLenum type , void * pixels ) ;
static void getTexImage ( GLenum target , GLint level , GLenum format , GLenum type , void * pixels ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ԫ<EFBFBD> <D4AA>
* @param texture Ҫ<> <D2AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ԫ (<28> <> <EFBFBD> <EFBFBD> GL_TEXTURE0)<29> <>
*/
static void activeTexture ( GLenum texture ) ;
static void activeTexture ( GLenum texture ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @return <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLuint genTextures ( ) ;
static GLuint genTextures ( ) ;
/**
* @brief ɾ<> <C9BE> һ <EFBFBD> <D2BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @param texture Ҫɾ<D2AA> <C9BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static void deleteTextures ( GLuint texture ) ;
static void deleteTextures ( GLuint texture ) ;
static void texImage2D ( GLenum target , GLint level , GLint internalFormat , GLsizei width , GLsizei height , GLint border , GLenum format , GLenum type , const void * pixels ) ;
static void texImage2D ( GLenum target , GLint level , GLint internalFormat , GLsizei width , GLsizei height , GLint border , GLenum format , GLenum type , const void * pixels ) ;
static void texParameteri ( GLenum target , GLenum pname , GLint param ) ;
static void texParameteri ( GLenum target , GLenum pname , GLint param ) ;
@@ -137,6 +403,11 @@ public:
static void setTextureMagFilter ( GLenum filter ) ;
static void setTextureMagFilter ( GLenum filter ) ;
static void setTextureWrapS ( GLenum wrap ) ;
static void setTextureWrapS ( GLenum wrap ) ;
static void setTextureWrapT ( GLenum wrap ) ;
static void setTextureWrapT ( GLenum wrap ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> Ĭ<EFBFBD> ϵ<EFBFBD> 1x1 <20> <> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @return Ĭ<> <C4AC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ľ<EFBFBD> <C4BE> <EFBFBD> <EFBFBD> <EFBFBD>
*/
static GLuint createDefaultTexture ( ) ;
static GLuint createDefaultTexture ( ) ;
// ================== <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
// ================== <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ==================
@@ -146,20 +417,41 @@ public:
// ================== <20> <> <EFBFBD> ߷<EFBFBD> <DFB7> <EFBFBD> ==================
// ================== <20> <> <EFBFBD> ߷<EFBFBD> <DFB7> <EFBFBD> ==================
static void readPixels ( int x , int y , int width , int height , GLenum format , GLenum type , void * pixels ) ;
static void readPixels ( int x , int y , int width , int height , GLenum format , GLenum type , void * pixels ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> ֧<EFBFBD> <D6A7> ij<EFBFBD> <C4B3> OpenGL <20> <> չ<EFBFBD> <D5B9>
*/
static bool isExtensionSupported ( const std : : string & extension ) ;
static bool isExtensionSupported ( const std : : string & extension ) ;
static void pixelStore ( GLenum pname , GLint param ) ;
static void pixelStore ( GLenum pname , GLint param ) ;
static std : : string getVendor ( ) ;
static std : : string getVendor ( ) ;
static std : : string getRenderer ( ) ;
static std : : string getRenderer ( ) ;
static std : : string getOpenGLVersion ( ) ;
static std : : string getOpenGLVersion ( ) ;
static std : : string getGLSLVersion ( ) ;
static std : : string getGLSLVersion ( ) ;
/**
* @brief <20> <> ¼<EFBFBD> <C2BC> ϸ<EFBFBD> <CFB8> OpenGL <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ<EFBFBD> <CFA2>
*/
static void logDetailedGLInfo ( ) ;
static void logDetailedGLInfo ( ) ;
/**
* @brief <20> <> <EFBFBD> <EFBFBD> һ <EFBFBD> <D2BB> Ĭ<EFBFBD> ϵ<EFBFBD> OpenGL ״̬<D7B4> <CCAC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> û<EFBFBD> <C3BB> ϣ<EFBFBD> <CFA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɫ<EFBFBD> <C9AB> <EFBFBD> <EFBFBD>
*/
static void setupDefaultState ( ) ;
static void setupDefaultState ( ) ;
/**
* @brief <20> <> <EFBFBD> 鲢<EFBFBD> <E9B2A2> ¼<EFBFBD> κη<CEBA> <CEB7> <EFBFBD> <EFBFBD> <EFBFBD> OpenGL <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @param operation <20> <> <EFBFBD> ¼<EFBFBD> <C2BC> <EFBFBD> <EFBFBD> IJ<EFBFBD> <C4B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ơ<EFBFBD>
*/
static void checkGLError ( const std : : string & operation ) ;
static void checkGLError ( const std : : string & operation ) ;
// ================== <20> <> ȡ״̬ ==================
// ================== <20> <> ȡ״̬ ==================
static int getViewportWidth ( ) ;
static int getViewportWidth ( ) ;
static int getViewportHeight ( ) ;
static int getViewportHeight ( ) ;
static glm : : vec4 getClearColor ( ) ;
static glm : : vec4 getClearColor ( ) ;
/**
* @brief <20> <> ȡ<EFBFBD> <C8A1> ǰ<EFBFBD> <C7B0> Ⱦ<EFBFBD> <C8BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> е <EFBFBD> <D0B5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @return <20> <> <EFBFBD> д<EFBFBD> С <EFBFBD> <D0A1>
*/
static size_t getQueueSize ( ) ;
static size_t getQueueSize ( ) ;
private :
private :