diff --git a/desmume/src/OGLRender.cpp b/desmume/src/OGLRender.cpp index f36b8e0be..7a8fd5e2b 100755 --- a/desmume/src/OGLRender.cpp +++ b/desmume/src/OGLRender.cpp @@ -158,6 +158,7 @@ OGLEXT(PFNGLACTIVETEXTUREARBPROC, glActiveTextureARB) #endif // Blending +OGLEXT(PFNGLBLENDEQUATIONPROC, glBlendEquation) // Core in v1.2 OGLEXT(PFNGLBLENDFUNCSEPARATEPROC, glBlendFuncSeparate) // Core in v1.4 OGLEXT(PFNGLBLENDEQUATIONSEPARATEPROC, glBlendEquationSeparate) // Core in v2.0 @@ -239,6 +240,7 @@ static void OGLLoadEntryPoints_Legacy() #endif // Blending + INITOGLEXT(PFNGLBLENDEQUATIONPROC, glBlendEquation) // Core in v1.2 INITOGLEXT(PFNGLBLENDFUNCSEPARATEPROC, glBlendFuncSeparate) // Core in v1.4 INITOGLEXT(PFNGLBLENDEQUATIONSEPARATEPROC, glBlendEquationSeparate) // Core in v2.0 diff --git a/desmume/src/OGLRender.h b/desmume/src/OGLRender.h index 30f308d07..c859b6fcf 100755 --- a/desmume/src/OGLRender.h +++ b/desmume/src/OGLRender.h @@ -105,6 +105,7 @@ EXTERNOGLEXT(PFNGLACTIVETEXTUREARBPROC, glActiveTextureARB) #endif // Blending +EXTERNOGLEXT(PFNGLBLENDEQUATIONPROC, glBlendEquation) // Core in v1.2 EXTERNOGLEXT(PFNGLBLENDFUNCSEPARATEPROC, glBlendFuncSeparate) // Core in v1.4 EXTERNOGLEXT(PFNGLBLENDEQUATIONSEPARATEPROC, glBlendEquationSeparate) // Core in v2.0 @@ -194,6 +195,7 @@ EXTERNOGLEXT(PFNGLACTIVETEXTUREPROC, glActiveTexture) // Core in v1.3 #endif // Blending +EXTERNOGLEXT(PFNGLBLENDEQUATIONPROC, glBlendEquation) // Core in v1.2 EXTERNOGLEXT(PFNGLBLENDFUNCSEPARATEPROC, glBlendFuncSeparate) // Core in v1.4 EXTERNOGLEXT(PFNGLBLENDEQUATIONSEPARATEPROC, glBlendEquationSeparate) // Core in v2.0 @@ -226,6 +228,7 @@ EXTERNOGLEXT(PFNGLDRAWBUFFERSPROC, glDrawBuffers) // Core in v2.0 // Generic vertex attributes EXTERNOGLEXT(PFNGLBINDATTRIBLOCATIONPROC, glBindAttribLocation) // Core in v2.0 EXTERNOGLEXT(PFNGLBINDFRAGDATALOCATIONPROC, glBindFragDataLocation) // Core in v3.0 +EXTERNOGLEXT(PFNGLBINDFRAGDATALOCATIONINDEXEDPROC, glBindFragDataLocationIndexed) // Core in v3.3 EXTERNOGLEXT(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray) // Core in v2.0 EXTERNOGLEXT(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray) // Core in v2.0 EXTERNOGLEXT(PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer) // Core in v2.0 diff --git a/desmume/src/OGLRender_3_2.cpp b/desmume/src/OGLRender_3_2.cpp index 48b8c1bff..6f657915c 100755 --- a/desmume/src/OGLRender_3_2.cpp +++ b/desmume/src/OGLRender_3_2.cpp @@ -39,6 +39,7 @@ OGLEXT(PFNGLCLEARBUFFERFIPROC, glClearBufferfi) // Core in v3.0 // Shaders OGLEXT(PFNGLBINDFRAGDATALOCATIONPROC, glBindFragDataLocation) // Core in v3.0 +OGLEXT(PFNGLBINDFRAGDATALOCATIONINDEXEDPROC, glBindFragDataLocationIndexed) // Core in v3.3 // Buffer Objects OGLEXT(PFNGLMAPBUFFERRANGEPROC, glMapBufferRange) // Core in v3.0 @@ -2032,6 +2033,22 @@ void OpenGLRenderer_3_2::GetExtensionSet(std::set *oglExtensionSet) } } +Render3DError OpenGLRenderer_3_2::InitFinalRenderStates(const std::set *oglExtensionSet) +{ + Render3DError error = OpenGLRenderer_2_1::InitFinalRenderStates(oglExtensionSet); + if (error != OGLERROR_NOERR) + { + return error; + } + + if (this->_isDualSourceBlendingSupported) + { + INITOGLEXT(PFNGLBINDFRAGDATALOCATIONINDEXEDPROC, glBindFragDataLocationIndexed) + } + + return error; +} + void OpenGLRenderer_3_2::_SetupGeometryShaders(const OGLGeometryFlags flags) { const OGLRenderRef &OGLRef = *this->ref; diff --git a/desmume/src/OGLRender_3_2.h b/desmume/src/OGLRender_3_2.h index 297d90a72..db38cfaba 100644 --- a/desmume/src/OGLRender_3_2.h +++ b/desmume/src/OGLRender_3_2.h @@ -94,6 +94,7 @@ protected: virtual Render3DError CreateFramebufferOutput8888Program(const size_t outColorIndex, const char *vtxShaderCString, const char *fragShaderCString); virtual void GetExtensionSet(std::set *oglExtensionSet); + virtual Render3DError InitFinalRenderStates(const std::set *oglExtensionSet); virtual void _SetupGeometryShaders(const OGLGeometryFlags flags); virtual Render3DError EnableVertexAttributes(); virtual Render3DError DisableVertexAttributes();