mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-18 21:47:13 +00:00
Implement glSampleCoverage
This commit is contained in:
@@ -173,6 +173,7 @@ enum GLChunkType
|
||||
COLOR_MASK,
|
||||
COLOR_MASKI,
|
||||
SAMPLE_MASK,
|
||||
SAMPLE_COVERAGE,
|
||||
DEPTH_FUNC,
|
||||
DEPTH_MASK,
|
||||
DEPTH_RANGE,
|
||||
|
||||
@@ -126,6 +126,7 @@ const char *GLChunkNames[] =
|
||||
"glColorMask",
|
||||
"glColorMaski",
|
||||
"glSampleMaski",
|
||||
"glSampleCoverage",
|
||||
"glDepthFunc",
|
||||
"glDepthMask",
|
||||
"glDepthRange",
|
||||
@@ -1652,6 +1653,9 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
|
||||
case SAMPLE_MASK:
|
||||
Serialise_glSampleMaski(0, 0);
|
||||
break;
|
||||
case SAMPLE_COVERAGE:
|
||||
Serialise_glSampleCoverage(0.0f, 0);
|
||||
break;
|
||||
case DEPTH_FUNC:
|
||||
Serialise_glDepthFunc(eGL_NONE);
|
||||
break;
|
||||
|
||||
@@ -344,6 +344,7 @@ class WrappedOpenGL
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glColorMaski(GLuint buf, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glSampleMaski(GLuint maskNumber, GLbitfield mask));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glSampleCoverage(GLfloat value, GLboolean invert));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glClear(GLbitfield mask));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glClearDepth(GLclampd depth));
|
||||
|
||||
@@ -228,6 +228,7 @@ struct GLHookSet
|
||||
PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
|
||||
PFNGLCOLORMASKIPROC glColorMaski;
|
||||
PFNGLSAMPLEMASKIPROC glSampleMaski;
|
||||
PFNGLSAMPLECOVERAGEPROC glSampleCoverage;
|
||||
PFNGLDEPTHRANGEPROC glDepthRange;
|
||||
PFNGLDEPTHRANGEFPROC glDepthRangef;
|
||||
PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv;
|
||||
|
||||
@@ -245,6 +245,7 @@
|
||||
HookExtension(PFNGLSTENCILOPSEPARATEPROC, glStencilOpSeparate); \
|
||||
HookExtension(PFNGLCOLORMASKIPROC, glColorMaski); \
|
||||
HookExtension(PFNGLSAMPLEMASKIPROC, glSampleMaski); \
|
||||
HookExtension(PFNGLSAMPLECOVERAGEPROC, glSampleCoverage); \
|
||||
HookExtension(PFNGLDEPTHRANGEPROC, glDepthRange); \
|
||||
HookExtension(PFNGLDEPTHRANGEFPROC, glDepthRangef); \
|
||||
HookExtension(PFNGLDEPTHRANGEARRAYVPROC, glDepthRangeArrayv); \
|
||||
@@ -842,6 +843,7 @@
|
||||
HookWrapper4(void, glStencilOpSeparate, GLenum, face, GLenum, sfail, GLenum, dpfail, GLenum, dppass); \
|
||||
HookWrapper5(void, glColorMaski, GLuint, index, GLboolean, r, GLboolean, g, GLboolean, b, GLboolean, a); \
|
||||
HookWrapper2(void, glSampleMaski, GLuint, maskNumber, GLbitfield, mask); \
|
||||
HookWrapper2(void, glSampleCoverage, GLfloat, value, GLboolean, invert); \
|
||||
HookWrapper2(void, glDepthRange, GLdouble, near, GLdouble, far); \
|
||||
HookWrapper2(void, glDepthRangef, GLfloat, n, GLfloat, f); \
|
||||
HookWrapper3(void, glDepthRangeArrayv, GLuint, first, GLsizei, count, const GLdouble *, v); \
|
||||
|
||||
@@ -39,6 +39,7 @@ GLRenderState::~GLRenderState()
|
||||
|
||||
void GLRenderState::FetchState()
|
||||
{
|
||||
GLint boolread = 0;
|
||||
// TODO check GL_MAX_*
|
||||
// TODO check the extensions/core version for these is around
|
||||
|
||||
@@ -216,6 +217,8 @@ void GLRenderState::FetchState()
|
||||
m_Real->glGetBooleanv(eGL_COLOR_WRITEMASK, &ColorMasks[i].red);
|
||||
|
||||
m_Real->glGetIntegeri_v(eGL_SAMPLE_MASK_VALUE, 0, (GLint *)&SampleMask[0]);
|
||||
m_Real->glGetIntegerv(eGL_SAMPLE_COVERAGE_VALUE, (GLint *)&SampleCoverage);
|
||||
m_Real->glGetIntegerv(eGL_SAMPLE_COVERAGE_INVERT, (GLint *)&boolread); SampleCoverageInvert = (boolread != 0);
|
||||
|
||||
m_Real->glGetFloatv(eGL_COLOR_CLEAR_VALUE, &ColorClearValue.red);
|
||||
|
||||
@@ -425,6 +428,7 @@ void GLRenderState::ApplyState()
|
||||
m_Real->glColorMaski(i, ColorMasks[i].red, ColorMasks[i].green, ColorMasks[i].blue, ColorMasks[i].alpha);
|
||||
|
||||
m_Real->glSampleMaski(0, (GLbitfield)SampleMask[0]);
|
||||
m_Real->glSampleCoverage(SampleCoverage, SampleCoverageInvert ? GL_TRUE : GL_FALSE);
|
||||
|
||||
m_Real->glClearColor(ColorClearValue.red, ColorClearValue.green, ColorClearValue.blue, ColorClearValue.alpha);
|
||||
|
||||
@@ -483,6 +487,8 @@ void GLRenderState::Clear()
|
||||
RDCEraseEl(StencilBack);
|
||||
RDCEraseEl(ColorMasks);
|
||||
RDCEraseEl(SampleMask);
|
||||
RDCEraseEl(SampleCoverage);
|
||||
RDCEraseEl(SampleCoverageInvert);
|
||||
RDCEraseEl(ColorClearValue);
|
||||
|
||||
RDCEraseEl(Hints);
|
||||
@@ -681,6 +687,8 @@ void GLRenderState::Serialise(LogState state, void *ctx, WrappedOpenGL *gl)
|
||||
m_pSerialiser->Serialise<4>("GL_COLOR_WRITEMASK", &ColorMasks[i].red);
|
||||
|
||||
m_pSerialiser->Serialise<2>("GL_SAMPLE_MASK_VALUE", &SampleMask[0]);
|
||||
m_pSerialiser->Serialise("GL_SAMPLE_COVERAGE_VALUE", SampleCoverage);
|
||||
m_pSerialiser->Serialise("GL_SAMPLE_COVERAGE_INVERT", SampleCoverageInvert);
|
||||
|
||||
m_pSerialiser->Serialise<4>("GL_COLOR_CLEAR_VALUE", &ColorClearValue.red);
|
||||
|
||||
|
||||
@@ -191,6 +191,8 @@ struct GLRenderState
|
||||
} ColorMasks[8];
|
||||
|
||||
uint32_t SampleMask[2];
|
||||
float SampleCoverage;
|
||||
bool SampleCoverageInvert;
|
||||
|
||||
struct
|
||||
{
|
||||
|
||||
@@ -897,6 +897,32 @@ void WrappedOpenGL::glSampleMaski(GLuint maskNumber, GLbitfield mask)
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glSampleCoverage(GLfloat value, GLboolean invert)
|
||||
{
|
||||
SERIALISE_ELEMENT(float, Value, value);
|
||||
SERIALISE_ELEMENT(bool, Invert, invert != 0);
|
||||
|
||||
if(m_State <= EXECUTING)
|
||||
{
|
||||
m_Real.glSampleCoverage(Value, Invert ? GL_TRUE : GL_FALSE);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedOpenGL::glSampleCoverage(GLfloat value, GLboolean invert)
|
||||
{
|
||||
m_Real.glSampleCoverage(value, invert);
|
||||
|
||||
if(m_State == WRITING_CAPFRAME)
|
||||
{
|
||||
SCOPED_SERIALISE_CONTEXT(SAMPLE_COVERAGE);
|
||||
Serialise_glSampleCoverage(value, invert);
|
||||
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glPatchParameteri(GLenum pname, GLint value)
|
||||
{
|
||||
SERIALISE_ELEMENT(GLenum, PName, pname);
|
||||
|
||||
Reference in New Issue
Block a user