Fix ES attrib client pointers being interpreted as buffer offsets.

This commit is contained in:
michaelrgb
2017-10-09 14:54:14 +01:00
committed by Baldur Karlsson
parent 43d6d6e197
commit 87a587cc98
@@ -2959,6 +2959,12 @@ bool WrappedOpenGL::Serialise_glVertexArrayVertexAttribOffsetEXT(GLuint vaobj, G
GLenum SizeEnum = Size == 1 ? eGL_RED : Size == 2 ? eGL_RG : Size == 3 ? eGL_RGB : eGL_RGBA;
Stride = (uint32_t)GetByteSize(1, 1, 1, SizeEnum, Type);
}
if(!buffer)
{
// ES allows client-memory pointers, which we override with temp buffers during capture.
// For replay, discard these pointers to prevent driver complaining about "negative offsets".
Offset = 0;
}
m_Real.glVertexArrayBindVertexBufferEXT(vaobj, Index, buffer, (GLintptr)Offset, Stride);
m_Real.glBindVertexArray(prevVAO);
@@ -3071,6 +3077,10 @@ bool WrappedOpenGL::Serialise_glVertexArrayVertexAttribIOffsetEXT(GLuint vaobj,
GLenum SizeEnum = Size == 1 ? eGL_RED : Size == 2 ? eGL_RG : Size == 3 ? eGL_RGB : eGL_RGBA;
Stride = (uint32_t)GetByteSize(1, 1, 1, SizeEnum, Type);
}
if(!buffer)
{
Offset = 0;
}
m_Real.glVertexArrayBindVertexBufferEXT(vaobj, Index, buffer, (GLintptr)Offset, Stride);
}
@@ -3180,6 +3190,10 @@ bool WrappedOpenGL::Serialise_glVertexArrayVertexAttribLOffsetEXT(GLuint vaobj,
GLenum SizeEnum = Size == 1 ? eGL_RED : Size == 2 ? eGL_RG : Size == 3 ? eGL_RGB : eGL_RGBA;
Stride = (uint32_t)GetByteSize(1, 1, 1, SizeEnum, Type);
}
if(!buffer)
{
Offset = 0;
}
m_Real.glVertexArrayBindVertexBufferEXT(vaobj, Index, buffer, (GLintptr)Offset, Stride);
}