From 7c7503432dcf52e4e29d1c3b67f9c46ae6588146 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 6 Nov 2014 23:18:42 +0000 Subject: [PATCH] Implement glBlendEquation{,i} --- renderdoc/driver/gl/gl_common.h | 2 + renderdoc/driver/gl/gl_driver.cpp | 8 +++ renderdoc/driver/gl/gl_driver.h | 2 + renderdoc/driver/gl/gl_hookset.h | 2 + renderdoc/driver/gl/gl_hookset_defs.h | 4 ++ .../driver/gl/wrappers/gl_state_funcs.cpp | 51 +++++++++++++++++++ 6 files changed, 69 insertions(+) diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index 45288f26e..8f8474158 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -160,6 +160,8 @@ enum GLChunkType BLEND_COLOR, BLEND_FUNC_SEP, BLEND_FUNC_SEPI, + BLEND_EQ, + BLEND_EQI, BLEND_EQ_SEP, BLEND_EQ_SEPI, STENCIL_OP, diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index 6ecf143e2..ca90bccf0 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -113,6 +113,8 @@ const char *GLChunkNames[] = "glBlendColor", "glBlendFuncSeparate", "glBlendFuncSeparatei", + "glBlendEquation", + "glBlendEquationi", "glBlendEquationSeparate", "glBlendEquationSeparatei", "glStencilOp", @@ -1601,6 +1603,12 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) case BLEND_FUNC_SEPI: Serialise_glBlendFuncSeparatei(0, eGL_NONE, eGL_NONE, eGL_NONE, eGL_NONE); break; + case BLEND_EQ: + Serialise_glBlendEquation(eGL_NONE); + break; + case BLEND_EQI: + Serialise_glBlendEquationi(0, eGL_NONE); + break; case BLEND_EQ_SEP: Serialise_glBlendEquationSeparate(eGL_NONE, eGL_NONE); break; diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index a3197b82a..617e98863 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -331,6 +331,8 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)); IMPLEMENT_FUNCTION_SERIALISED(void, glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)); IMPLEMENT_FUNCTION_SERIALISED(void, glBlendFuncSeparatei(GLuint buf, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)); + IMPLEMENT_FUNCTION_SERIALISED(void, glBlendEquation(GLenum mode)); + IMPLEMENT_FUNCTION_SERIALISED(void, glBlendEquationi(GLuint buf, GLenum mode)); IMPLEMENT_FUNCTION_SERIALISED(void, glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)); IMPLEMENT_FUNCTION_SERIALISED(void, glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha)); IMPLEMENT_FUNCTION_SERIALISED(void, glStencilFunc(GLenum func, GLint ref, GLuint mask)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index aa4eb2ca0..cbb8f7d85 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -217,6 +217,8 @@ struct GLHookSet PFNGLBLENDFUNCIPROC glBlendFunci; PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate; PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei; + PFNGLBLENDEQUATIONPROC glBlendEquation; + PFNGLBLENDEQUATIONIPROC glBlendEquationi; // aliases glBlendEquationiARB PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate; PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei; PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index d2acdd753..c9a246ca9 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -238,6 +238,8 @@ HookExtension(PFNGLBLENDFUNCIPROC, glBlendFunci); \ HookExtension(PFNGLBLENDFUNCSEPARATEPROC, glBlendFuncSeparate); \ HookExtension(PFNGLBLENDFUNCSEPARATEIPROC, glBlendFuncSeparatei); \ + HookExtension(PFNGLBLENDEQUATIONPROC, glBlendEquation); \ + HookExtension(PFNGLBLENDEQUATIONIPROC, glBlendEquationi); \ HookExtension(PFNGLBLENDEQUATIONSEPARATEPROC, glBlendEquationSeparate); \ HookExtension(PFNGLBLENDEQUATIONSEPARATEIPROC, glBlendEquationSeparatei); \ HookExtension(PFNGLSTENCILFUNCSEPARATEPROC, glStencilFuncSeparate); \ @@ -761,6 +763,8 @@ HookWrapper3(void, glBlendFunci, GLuint, buf, GLenum, src, GLenum, dst); \ HookWrapper4(void, glBlendFuncSeparate, GLenum, sfactorRGB, GLenum, dfactorRGB, GLenum, sfactorAlpha, GLenum, dfactorAlpha); \ HookWrapper5(void, glBlendFuncSeparatei, GLuint, buf, GLenum, srcRGB, GLenum, dstRGB, GLenum, srcAlpha, GLenum, dstAlpha); \ + HookWrapper1(void, glBlendEquation, GLenum, mode); \ + HookWrapper2(void, glBlendEquationi, GLuint, buf, GLenum, mode); \ HookWrapper2(void, glBlendEquationSeparate, GLenum, modeRGB, GLenum, modeAlpha); \ HookWrapper3(void, glBlendEquationSeparatei, GLuint, buf, GLenum, modeRGB, GLenum, modeAlpha); \ HookWrapper4(void, glStencilFuncSeparate, GLenum, face, GLenum, func, GLint, ref, GLuint, mask); \ diff --git a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp index 919b37954..c4ed62e59 100644 --- a/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_state_funcs.cpp @@ -165,6 +165,57 @@ void WrappedOpenGL::glBlendFuncSeparatei(GLuint buf, GLenum sfactorRGB, GLenum d } } +bool WrappedOpenGL::Serialise_glBlendEquation(GLenum mode) +{ + SERIALISE_ELEMENT(GLenum, m, mode); + + if(m_State <= EXECUTING) + { + m_Real.glBlendEquation(m); + } + + return true; +} + +void WrappedOpenGL::glBlendEquation(GLenum mode) +{ + m_Real.glBlendEquation(mode); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(BLEND_EQ); + Serialise_glBlendEquation(mode); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + +bool WrappedOpenGL::Serialise_glBlendEquationi(GLuint buf, GLenum mode) +{ + SERIALISE_ELEMENT(uint32_t, b, buf); + SERIALISE_ELEMENT(GLenum, m, mode); + + if(m_State <= EXECUTING) + { + m_Real.glBlendEquationi(b, m); + } + + return true; +} + +void WrappedOpenGL::glBlendEquationi(GLuint buf, GLenum mode) +{ + m_Real.glBlendEquationi(buf, mode); + + if(m_State == WRITING_CAPFRAME) + { + SCOPED_SERIALISE_CONTEXT(BLEND_EQI); + Serialise_glBlendEquationi(buf, mode); + + m_ContextRecord->AddChunk(scope.Get()); + } +} + bool WrappedOpenGL::Serialise_glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) { SERIALISE_ELEMENT(GLenum, m1, modeRGB);