Implement glSampleCoverage

This commit is contained in:
baldurk
2014-11-08 12:14:21 +00:00
parent fbabc0180b
commit 8dbdd97a2f
8 changed files with 45 additions and 0 deletions
+1
View File
@@ -173,6 +173,7 @@ enum GLChunkType
COLOR_MASK,
COLOR_MASKI,
SAMPLE_MASK,
SAMPLE_COVERAGE,
DEPTH_FUNC,
DEPTH_MASK,
DEPTH_RANGE,
+4
View File
@@ -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;
+1
View File
@@ -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));
+1
View File
@@ -228,6 +228,7 @@ struct GLHookSet
PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
PFNGLCOLORMASKIPROC glColorMaski;
PFNGLSAMPLEMASKIPROC glSampleMaski;
PFNGLSAMPLECOVERAGEPROC glSampleCoverage;
PFNGLDEPTHRANGEPROC glDepthRange;
PFNGLDEPTHRANGEFPROC glDepthRangef;
PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv;
+2
View File
@@ -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); \
+8
View File
@@ -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);
+2
View File
@@ -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);