diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index 0aa585bc5..67c0afdd4 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -134,6 +134,8 @@ enum GLChunkType FRAMEBUFFER_TEX, BIND_FRAMEBUFFER, + BIND_SAMPLER, + GEN_BUFFER, BIND_BUFFER, BIND_BUFFER_BASE, diff --git a/renderdoc/driver/gl/gl_device_driver.cpp b/renderdoc/driver/gl/gl_device_driver.cpp index bc5485b0c..0366ab636 100644 --- a/renderdoc/driver/gl/gl_device_driver.cpp +++ b/renderdoc/driver/gl/gl_device_driver.cpp @@ -321,13 +321,30 @@ void WrappedOpenGL::glGenSamplers(GLsizei count, GLuint *samplers) } } +bool WrappedOpenGL::Serialise_glBindSampler(GLuint unit, GLuint sampler) +{ + SERIALISE_ELEMENT(uint32_t, Unit, unit); + SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(SamplerRes(sampler))); + + if(m_State < WRITING) + { + GLResource res = GetResourceManager()->GetLiveResource(id); + glBindSampler(Unit, res.name); + } + + return true; +} + void WrappedOpenGL::glBindSampler(GLuint unit, GLuint sampler) { m_Real.glBindSampler(unit, sampler); - if(m_State >= WRITING) + if(m_State == WRITING_CAPFRAME) { - RDCUNIMPLEMENTED(); + SCOPED_SERIALISE_CONTEXT(BIND_SAMPLER); + Serialise_glBindSampler(unit, sampler); + + m_ContextRecord->AddChunk(scope.Get()); } } diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index 1f7b65df0..99c3284ff 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -91,6 +91,8 @@ const char *GLChunkNames[] = "glFramebufferTexture", "glBindFramebuffer", + "glBindSampler", + "glGenBuffers", "glBindBuffer", "glBindBufferBase", @@ -949,6 +951,10 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context) Serialise_glBindFramebuffer(eGL_UNKNOWN_ENUM, 0); break; + case BIND_SAMPLER: + Serialise_glBindSampler(0, 0); + break; + case CLEAR: Serialise_glClear(0); break;