Save draw and read framebuffer bindings, add some more TODOs

This commit is contained in:
baldurk
2014-08-15 12:33:32 +01:00
parent 7d52069401
commit 2717e05b48
2 changed files with 29 additions and 1 deletions
+23
View File
@@ -141,6 +141,9 @@ void GLRenderState::FetchState()
for(GLuint i=0; i < (GLuint)ARRAY_COUNT(Scissors); i++)
m_Real->glGetIntegeri_v(eGL_SCISSOR_BOX, i, &Scissors[i].x);
m_Real->glGetIntegerv(eGL_DRAW_FRAMEBUFFER_BINDING, (GLint *)&DrawFBO);
m_Real->glGetIntegerv(eGL_READ_FRAMEBUFFER_BINDING, (GLint *)&ReadFBO);
for(size_t i=0; i < ARRAY_COUNT(DrawBuffers); i++)
m_Real->glGetIntegerv(GLenum(eGL_DRAW_BUFFER0 + i), (GLint *)&DrawBuffers[i]);
@@ -304,6 +307,9 @@ void GLRenderState::ApplyState()
m_Real->glScissorArrayv(0, ARRAY_COUNT(Scissors), &Scissors[0].x);
m_Real->glBindFramebuffer(eGL_READ_FRAMEBUFFER, ReadFBO);
m_Real->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, DrawFBO);
GLenum DBs[8] = { eGL_UNKNOWN_ENUM };
uint32_t numDBs = 0;
for(GLuint i=0; i < (GLuint)ARRAY_COUNT(DrawBuffers); i++)
@@ -395,6 +401,10 @@ void GLRenderState::Clear()
RDCEraseEl(Viewports);
RDCEraseEl(Scissors);
RDCEraseEl(DrawFBO);
RDCEraseEl(ReadFBO);
RDCEraseEl(DrawBuffers);
RDCEraseEl(PatchParams);
RDCEraseEl(PolygonMode);
RDCEraseEl(PolygonOffset);
@@ -447,6 +457,19 @@ void GLRenderState::Serialise(LogState state, void *ctx, GLResourceManager *rm)
if(state < WRITING && ID != ResourceId()) BufferBindings[i] = rm->GetLiveResource(ID).name;
}
{
ResourceId ID = ResourceId();
if(state >= WRITING) ID = rm->GetID(FramebufferRes(ctx, DrawFBO));
m_pSerialiser->Serialise("GL_DRAW_FRAMEBUFFER_BINDING", ID);
if(state < WRITING && ID != ResourceId()) DrawFBO = rm->GetLiveResource(ID).name;
}
{
ResourceId ID = ResourceId();
if(state >= WRITING) ID = rm->GetID(FramebufferRes(ctx, ReadFBO));
m_pSerialiser->Serialise("GL_READ_FRAMEBUFFER_BINDING", ID);
if(state < WRITING && ID != ResourceId()) ReadFBO = rm->GetLiveResource(ID).name;
}
struct { IdxRangeBuffer *bufs; int count; } idxBufs[] =
{
{ AtomicCounter, ARRAY_COUNT(AtomicCounter), },
+6 -1
View File
@@ -120,13 +120,18 @@ struct GLRenderState
{
int32_t x, y, width, height;
} Scissors[16];
GLuint ReadFBO, DrawFBO;
GLenum DrawBuffers[8];
// TODO:
// Framebuffer Bindings
// Program Bindings
// Vertex Attribs/Buffers/Pointers etc
// Image state (GL_IMAGE_BINDING_NAME)
// multisampling
// provoking vertex
// other misc state :)
struct
{