Shadow texture state by type, not just by unit

* When you do glTexImage2D(GL_TEXTURE_2D) it should refer to the last 2D texture
  bound to the currently active unit, even if a 3D or other type of texture was
  bound in between. Previously we only tracked per-unit and ignored the type.
This commit is contained in:
baldurk
2019-05-02 11:05:16 +01:00
parent ac7801b738
commit 346d01b17a
5 changed files with 201 additions and 101 deletions
+49
View File
@@ -1207,6 +1207,55 @@ GLenum BufferEnum(size_t idx)
return eGL_NONE;
}
size_t TextureIdx(GLenum buf)
{
switch(buf)
{
case eGL_TEXTURE_1D: return 0;
case eGL_TEXTURE_1D_ARRAY: return 1;
case eGL_TEXTURE_2D: return 2;
case eGL_TEXTURE_2D_ARRAY: return 3;
case eGL_TEXTURE_2D_MULTISAMPLE: return 4;
case eGL_TEXTURE_2D_MULTISAMPLE_ARRAY: return 5;
case eGL_TEXTURE_RECTANGLE: return 6;
case eGL_TEXTURE_3D: return 7;
case eGL_TEXTURE_CUBE_MAP:
case eGL_TEXTURE_CUBE_MAP_POSITIVE_X:
case eGL_TEXTURE_CUBE_MAP_NEGATIVE_X:
case eGL_TEXTURE_CUBE_MAP_POSITIVE_Y:
case eGL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
case eGL_TEXTURE_CUBE_MAP_POSITIVE_Z:
case eGL_TEXTURE_CUBE_MAP_NEGATIVE_Z: return 8;
case eGL_TEXTURE_CUBE_MAP_ARRAY: return 9;
case eGL_TEXTURE_BUFFER: return 10;
default: RDCERR("Unexpected enum as texture target: %s", ToStr(buf).c_str());
}
return 0;
}
GLenum TextureEnum(size_t idx)
{
GLenum enums[] = {
eGL_TEXTURE_1D,
eGL_TEXTURE_1D_ARRAY,
eGL_TEXTURE_2D,
eGL_TEXTURE_2D_ARRAY,
eGL_TEXTURE_2D_MULTISAMPLE,
eGL_TEXTURE_2D_MULTISAMPLE_ARRAY,
eGL_TEXTURE_RECTANGLE,
eGL_TEXTURE_3D,
eGL_TEXTURE_CUBE_MAP,
eGL_TEXTURE_CUBE_MAP_ARRAY,
eGL_TEXTURE_BUFFER,
};
if(idx < ARRAY_COUNT(enums))
return enums[idx];
return eGL_NONE;
}
size_t QueryIdx(GLenum query)
{
size_t idx = 0;
+3
View File
@@ -548,6 +548,9 @@ size_t GLTypeSize(GLenum type);
size_t BufferIdx(GLenum buf);
GLenum BufferEnum(size_t idx);
size_t TextureIdx(GLenum buf);
GLenum TextureEnum(size_t idx);
size_t QueryIdx(GLenum query);
GLenum QueryEnum(size_t idx);
+31 -2
View File
@@ -384,7 +384,6 @@ private:
string glExtsString;
// state
GLResourceRecord *m_TextureRecord[256]; // TODO this needs on per texture type :(
GLResourceRecord *m_BufferRecord[16];
GLResourceRecord *m_VertexArrayRecord;
GLResourceRecord *m_FeedbackRecord;
@@ -395,7 +394,33 @@ private:
GLuint m_ProgramPipeline;
GLuint m_Program;
GLResourceRecord *GetActiveTexRecord() { return m_TextureRecord[m_TextureUnit]; }
GLResourceRecord *GetActiveTexRecord(GLenum target)
{
return m_TextureRecord[TextureIdx(target)][m_TextureUnit];
}
void SetActiveTexRecord(GLenum target, GLResourceRecord *record)
{
m_TextureRecord[TextureIdx(target)][m_TextureUnit] = record;
}
GLResourceRecord *GetTexUnitRecord(GLenum target, GLenum texunit)
{
return m_TextureRecord[TextureIdx(target)][texunit - eGL_TEXTURE0];
}
void SetTexUnitRecord(GLenum target, GLenum texunit, GLResourceRecord *record)
{
SetTexUnitRecordIndexed(target, texunit - eGL_TEXTURE0, record);
}
void ClearAllTexUnitRecordsIndexed(uint32_t unitidx)
{
for(size_t i = 0; i < ARRAY_COUNT(m_TextureRecord); i++)
m_TextureRecord[i][unitidx] = NULL;
}
// modern DSA bindings set by index, not enum
void SetTexUnitRecordIndexed(GLenum target, uint32_t unitidx, GLResourceRecord *record)
{
m_TextureRecord[TextureIdx(target)][unitidx] = record;
}
// GLES allows drawing from client memory, in which case we will copy to
// temporary VBOs so that input mesh data is recorded. See struct ClientMemoryData
GLuint m_ClientMemoryVBOs[16];
@@ -405,6 +430,10 @@ private:
GLResourceRecord *m_ContextDataRecord;
ResourceId m_ContextFBOID;
private:
// kept private to force everyone through accessors above
GLResourceRecord *m_TextureRecord[11][256];
};
struct ClientMemoryData
@@ -1480,7 +1480,7 @@ void WrappedOpenGL::glTexStorageMem1DEXT(GLenum target, GLsizei levels, GLenum i
if(IsCaptureMode(m_State))
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(!record)
{
@@ -1594,7 +1594,7 @@ void WrappedOpenGL::glTexStorageMem2DEXT(GLenum target, GLsizei levels, GLenum i
if(IsCaptureMode(m_State))
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(!record)
{
@@ -1717,7 +1717,7 @@ void WrappedOpenGL::glTexStorageMem2DMultisampleEXT(GLenum target, GLsizei sampl
if(IsCaptureMode(m_State))
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(!record)
{
@@ -1832,7 +1832,7 @@ void WrappedOpenGL::glTexStorageMem3DEXT(GLenum target, GLsizei levels, GLenum i
if(IsCaptureMode(m_State))
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(!record)
{
@@ -1953,7 +1953,7 @@ void WrappedOpenGL::glTexStorageMem3DMultisampleEXT(GLenum target, GLsizei sampl
if(IsCaptureMode(m_State))
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(!record)
{
+113 -94
View File
@@ -293,14 +293,14 @@ void WrappedOpenGL::glBindTexture(GLenum target, GLuint texture)
if(texture == 0)
{
cd.m_TextureRecord[cd.m_TextureUnit] = NULL;
cd.SetActiveTexRecord(target, NULL);
return;
}
if(IsCaptureMode(m_State))
{
GLResourceRecord *r = cd.m_TextureRecord[cd.m_TextureUnit] =
GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture));
GLResourceRecord *r = GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture));
cd.SetActiveTexRecord(target, r);
if(r->datatype)
{
@@ -389,13 +389,23 @@ void WrappedOpenGL::glBindTextures(GLuint first, GLsizei count, const GLuint *te
if(IsCaptureMode(m_State))
{
ContextData &cd = GetCtxData();
for(GLsizei i = 0; i < count; i++)
{
if(textures == NULL || textures[i] == 0)
GetCtxData().m_TextureRecord[first + i] = 0;
{
// NULLs all targets
cd.ClearAllTexUnitRecordsIndexed(first + i);
}
else
GetCtxData().m_TextureRecord[first + i] =
{
GLResourceRecord *texrecord =
GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), textures[i]));
GLenum target = TextureTarget(texrecord->datatype);
cd.SetTexUnitRecordIndexed(target, first + i, texrecord);
}
}
}
}
@@ -454,14 +464,14 @@ void WrappedOpenGL::glBindMultiTextureEXT(GLenum texunit, GLenum target, GLuint
if(texture == 0)
{
cd.m_TextureRecord[texunit - eGL_TEXTURE0] = NULL;
cd.SetTexUnitRecord(target, texunit, NULL);
return;
}
if(IsCaptureMode(m_State))
{
GLResourceRecord *r = cd.m_TextureRecord[texunit - eGL_TEXTURE0] =
GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture));
GLResourceRecord *r = GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture));
cd.SetTexUnitRecord(target, texunit, r);
if(r->datatype)
{
@@ -527,10 +537,18 @@ void WrappedOpenGL::glBindTextureUnit(GLuint unit, GLuint texture)
ContextData &cd = GetCtxData();
if(texture == 0)
cd.m_TextureRecord[unit] = NULL;
{
// NULLs all targets
cd.ClearAllTexUnitRecordsIndexed(unit);
}
else
cd.m_TextureRecord[unit] =
{
GLResourceRecord *texrecord =
GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture));
GLenum target = TextureTarget(texrecord->datatype);
cd.SetTexUnitRecordIndexed(target, unit, texrecord);
}
}
}
@@ -856,7 +874,7 @@ void WrappedOpenGL::glGenerateMipmap(GLenum target)
SERIALISE_TIME_CALL(GL.glGenerateMipmap(target));
if(IsCaptureMode(m_State))
Common_glGenerateTextureMipmapEXT(GetCtxData().GetActiveTexRecord(), target);
Common_glGenerateTextureMipmapEXT(GetCtxData().GetActiveTexRecord(target), target);
}
void WrappedOpenGL::glGenerateMultiTexMipmapEXT(GLenum texunit, GLenum target)
@@ -864,7 +882,7 @@ void WrappedOpenGL::glGenerateMultiTexMipmapEXT(GLenum texunit, GLenum target)
SERIALISE_TIME_CALL(GL.glGenerateMultiTexMipmapEXT(texunit, target));
if(IsCaptureMode(m_State))
Common_glGenerateTextureMipmapEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target);
Common_glGenerateTextureMipmapEXT(GetCtxData().GetTexUnitRecord(target, texunit), target);
}
void WrappedOpenGL::glInvalidateTexImage(GLuint texture, GLint level)
@@ -1119,8 +1137,8 @@ void WrappedOpenGL::glCopyMultiTexSubImage1DEXT(GLenum texunit, GLenum target, G
SERIALISE_TIME_CALL(GL.glCopyMultiTexSubImage1DEXT(texunit, target, level, xoffset, x, y, width));
if(IsCaptureMode(m_State))
Common_glCopyTextureSubImage1DEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
level, xoffset, x, y, width);
Common_glCopyTextureSubImage1DEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, level,
xoffset, x, y, width);
}
void WrappedOpenGL::glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y,
@@ -1129,8 +1147,8 @@ void WrappedOpenGL::glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffse
SERIALISE_TIME_CALL(GL.glCopyTexSubImage1D(target, level, xoffset, x, y, width));
if(IsCaptureMode(m_State))
Common_glCopyTextureSubImage1DEXT(GetCtxData().GetActiveTexRecord(), eGL_NONE, level, xoffset,
x, y, width);
Common_glCopyTextureSubImage1DEXT(GetCtxData().GetActiveTexRecord(target), eGL_NONE, level,
xoffset, x, y, width);
}
template <typename SerialiserType>
@@ -1228,8 +1246,8 @@ void WrappedOpenGL::glCopyMultiTexSubImage2DEXT(GLenum texunit, GLenum target, G
width, height));
if(IsCaptureMode(m_State))
Common_glCopyTextureSubImage2DEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
level, xoffset, yoffset, x, y, width, height);
Common_glCopyTextureSubImage2DEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, level,
xoffset, yoffset, x, y, width, height);
}
void WrappedOpenGL::glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
@@ -1238,8 +1256,8 @@ void WrappedOpenGL::glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffse
SERIALISE_TIME_CALL(GL.glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height));
if(IsCaptureMode(m_State))
Common_glCopyTextureSubImage2DEXT(GetCtxData().GetActiveTexRecord(), target, level, xoffset,
yoffset, x, y, width, height);
Common_glCopyTextureSubImage2DEXT(GetCtxData().GetActiveTexRecord(target), target, level,
xoffset, yoffset, x, y, width, height);
}
template <typename SerialiserType>
@@ -1341,8 +1359,8 @@ void WrappedOpenGL::glCopyMultiTexSubImage3DEXT(GLenum texunit, GLenum target, G
zoffset, x, y, width, height));
if(IsCaptureMode(m_State))
Common_glCopyTextureSubImage3DEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
level, xoffset, yoffset, zoffset, x, y, width, height);
Common_glCopyTextureSubImage3DEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, level,
xoffset, yoffset, zoffset, x, y, width, height);
}
void WrappedOpenGL::glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
@@ -1353,8 +1371,8 @@ void WrappedOpenGL::glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffse
GL.glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height));
if(IsCaptureMode(m_State))
Common_glCopyTextureSubImage3DEXT(GetCtxData().GetActiveTexRecord(), target, level, xoffset,
yoffset, zoffset, x, y, width, height);
Common_glCopyTextureSubImage3DEXT(GetCtxData().GetActiveTexRecord(target), target, level,
xoffset, yoffset, zoffset, x, y, width, height);
}
template <typename SerialiserType>
@@ -1462,7 +1480,7 @@ void WrappedOpenGL::glTexParameteri(GLenum target, GLenum pname, GLint param)
SERIALISE_TIME_CALL(GL.glTexParameteri(target, pname, param));
if(IsCaptureMode(m_State))
Common_glTextureParameteriEXT(GetCtxData().GetActiveTexRecord(), target, pname, param);
Common_glTextureParameteriEXT(GetCtxData().GetActiveTexRecord(target), target, pname, param);
}
void WrappedOpenGL::glMultiTexParameteriEXT(GLenum texunit, GLenum target, GLenum pname, GLint param)
@@ -1470,8 +1488,8 @@ void WrappedOpenGL::glMultiTexParameteriEXT(GLenum texunit, GLenum target, GLenu
SERIALISE_TIME_CALL(GL.glMultiTexParameteriEXT(texunit, target, pname, param));
if(IsCaptureMode(m_State))
Common_glTextureParameteriEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
pname, param);
Common_glTextureParameteriEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, pname,
param);
}
template <typename SerialiserType>
@@ -1568,7 +1586,7 @@ void WrappedOpenGL::glTexParameteriv(GLenum target, GLenum pname, const GLint *p
SERIALISE_TIME_CALL(GL.glTexParameteriv(target, pname, params));
if(IsCaptureMode(m_State))
Common_glTextureParameterivEXT(GetCtxData().GetActiveTexRecord(), target, pname, params);
Common_glTextureParameterivEXT(GetCtxData().GetActiveTexRecord(target), target, pname, params);
}
void WrappedOpenGL::glMultiTexParameterivEXT(GLenum texunit, GLenum target, GLenum pname,
@@ -1577,8 +1595,8 @@ void WrappedOpenGL::glMultiTexParameterivEXT(GLenum texunit, GLenum target, GLen
SERIALISE_TIME_CALL(GL.glMultiTexParameterivEXT(texunit, target, pname, params));
if(IsCaptureMode(m_State))
Common_glTextureParameterivEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
pname, params);
Common_glTextureParameterivEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, pname,
params);
}
template <typename SerialiserType>
@@ -1675,7 +1693,7 @@ void WrappedOpenGL::glTexParameterIiv(GLenum target, GLenum pname, const GLint *
SERIALISE_TIME_CALL(GL.glTexParameterIiv(target, pname, params));
if(IsCaptureMode(m_State))
Common_glTextureParameterIivEXT(GetCtxData().GetActiveTexRecord(), target, pname, params);
Common_glTextureParameterIivEXT(GetCtxData().GetActiveTexRecord(target), target, pname, params);
}
void WrappedOpenGL::glMultiTexParameterIivEXT(GLenum texunit, GLenum target, GLenum pname,
@@ -1684,8 +1702,8 @@ void WrappedOpenGL::glMultiTexParameterIivEXT(GLenum texunit, GLenum target, GLe
SERIALISE_TIME_CALL(GL.glMultiTexParameterIivEXT(texunit, target, pname, params));
if(IsCaptureMode(m_State))
Common_glTextureParameterIivEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
pname, params);
Common_glTextureParameterIivEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, pname,
params);
}
template <typename SerialiserType>
@@ -1782,7 +1800,7 @@ void WrappedOpenGL::glTexParameterIuiv(GLenum target, GLenum pname, const GLuint
SERIALISE_TIME_CALL(GL.glTexParameterIuiv(target, pname, params));
if(IsCaptureMode(m_State))
Common_glTextureParameterIuivEXT(GetCtxData().GetActiveTexRecord(), target, pname, params);
Common_glTextureParameterIuivEXT(GetCtxData().GetActiveTexRecord(target), target, pname, params);
}
void WrappedOpenGL::glMultiTexParameterIuivEXT(GLenum texunit, GLenum target, GLenum pname,
@@ -1791,8 +1809,8 @@ void WrappedOpenGL::glMultiTexParameterIuivEXT(GLenum texunit, GLenum target, GL
SERIALISE_TIME_CALL(GL.glMultiTexParameterIuivEXT(texunit, target, pname, params));
if(IsCaptureMode(m_State))
Common_glTextureParameterIuivEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
pname, params);
Common_glTextureParameterIuivEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, pname,
params);
}
template <typename SerialiserType>
@@ -1885,7 +1903,7 @@ void WrappedOpenGL::glTexParameterf(GLenum target, GLenum pname, GLfloat param)
SERIALISE_TIME_CALL(GL.glTexParameterf(target, pname, param));
if(IsCaptureMode(m_State))
Common_glTextureParameterfEXT(GetCtxData().GetActiveTexRecord(), target, pname, param);
Common_glTextureParameterfEXT(GetCtxData().GetActiveTexRecord(target), target, pname, param);
}
void WrappedOpenGL::glMultiTexParameterfEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat param)
@@ -1893,8 +1911,8 @@ void WrappedOpenGL::glMultiTexParameterfEXT(GLenum texunit, GLenum target, GLenu
SERIALISE_TIME_CALL(GL.glMultiTexParameterfEXT(texunit, target, pname, param));
if(IsCaptureMode(m_State))
Common_glTextureParameterfEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
pname, param);
Common_glTextureParameterfEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, pname,
param);
}
template <typename SerialiserType>
@@ -1991,7 +2009,7 @@ void WrappedOpenGL::glTexParameterfv(GLenum target, GLenum pname, const GLfloat
SERIALISE_TIME_CALL(GL.glTexParameterfv(target, pname, params));
if(IsCaptureMode(m_State))
Common_glTextureParameterfvEXT(GetCtxData().GetActiveTexRecord(), target, pname, params);
Common_glTextureParameterfvEXT(GetCtxData().GetActiveTexRecord(target), target, pname, params);
}
void WrappedOpenGL::glMultiTexParameterfvEXT(GLenum texunit, GLenum target, GLenum pname,
@@ -2000,8 +2018,8 @@ void WrappedOpenGL::glMultiTexParameterfvEXT(GLenum texunit, GLenum target, GLen
SERIALISE_TIME_CALL(GL.glMultiTexParameterfvEXT(texunit, target, pname, params));
if(IsCaptureMode(m_State))
Common_glTextureParameterfvEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
pname, params);
Common_glTextureParameterfvEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, pname,
params);
}
template <typename SerialiserType>
@@ -2275,7 +2293,7 @@ void WrappedOpenGL::glTexImage1D(GLenum target, GLint level, GLint internalforma
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureImage1DEXT(record->GetResourceID(), target, level, internalformat, width,
border, format, type, pixels);
@@ -2301,7 +2319,7 @@ void WrappedOpenGL::glMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint le
}
else
{
GLResourceRecord *record = GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0];
GLResourceRecord *record = GetCtxData().GetTexUnitRecord(target, texunit);
if(record != NULL)
Common_glTextureImage1DEXT(record->GetResourceID(), target, level, internalformat, width,
border, format, type, pixels);
@@ -2523,7 +2541,7 @@ void WrappedOpenGL::glTexImage2D(GLenum target, GLint level, GLint internalforma
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureImage2DEXT(record->GetResourceID(), target, level, internalformat, width,
height, border, format, type, pixels);
@@ -2550,7 +2568,7 @@ void WrappedOpenGL::glMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint le
}
else
{
GLResourceRecord *record = GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0];
GLResourceRecord *record = GetCtxData().GetTexUnitRecord(target, texunit);
if(record != NULL)
Common_glTextureImage2DEXT(record->GetResourceID(), target, level, internalformat, width,
height, border, format, type, pixels);
@@ -2754,7 +2772,7 @@ void WrappedOpenGL::glTexImage3D(GLenum target, GLint level, GLint internalforma
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureImage3DEXT(record->GetResourceID(), target, level, internalformat, width,
height, depth, border, format, type, pixels);
@@ -2781,7 +2799,7 @@ void WrappedOpenGL::glMultiTexImage3DEXT(GLenum texunit, GLenum target, GLint le
}
else
{
GLResourceRecord *record = GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0];
GLResourceRecord *record = GetCtxData().GetTexUnitRecord(target, texunit);
if(record != NULL)
Common_glTextureImage3DEXT(record->GetResourceID(), target, level, internalformat, width,
height, depth, border, format, type, pixels);
@@ -2978,7 +2996,7 @@ void WrappedOpenGL::glCompressedTexImage1D(GLenum target, GLint level, GLenum in
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glCompressedTextureImage1DEXT(record->GetResourceID(), target, level, internalformat,
width, border, imageSize, pixels);
@@ -3002,7 +3020,7 @@ void WrappedOpenGL::glCompressedMultiTexImage1DEXT(GLenum texunit, GLenum target
}
else
{
GLResourceRecord *record = GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0];
GLResourceRecord *record = GetCtxData().GetTexUnitRecord(target, texunit);
if(record != NULL)
Common_glCompressedTextureImage1DEXT(record->GetResourceID(), target, level, internalformat,
width, border, imageSize, pixels);
@@ -3332,7 +3350,7 @@ void WrappedOpenGL::glCompressedTexImage2D(GLenum target, GLint level, GLenum in
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glCompressedTextureImage2DEXT(record->GetResourceID(), target, level, internalformat,
width, height, border, imageSize, pixels);
@@ -3357,7 +3375,7 @@ void WrappedOpenGL::glCompressedMultiTexImage2DEXT(GLenum texunit, GLenum target
}
else
{
GLResourceRecord *record = GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0];
GLResourceRecord *record = GetCtxData().GetTexUnitRecord(target, texunit);
if(record != NULL)
Common_glCompressedTextureImage2DEXT(record->GetResourceID(), target, level, internalformat,
width, height, border, imageSize, pixels);
@@ -3569,7 +3587,7 @@ void WrappedOpenGL::glCompressedTexImage3D(GLenum target, GLint level, GLenum in
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glCompressedTextureImage3DEXT(record->GetResourceID(), target, level, internalformat,
width, height, depth, border, imageSize, pixels);
@@ -3594,7 +3612,7 @@ void WrappedOpenGL::glCompressedMultiTexImage3DEXT(GLenum texunit, GLenum target
}
else
{
GLResourceRecord *record = GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0];
GLResourceRecord *record = GetCtxData().GetTexUnitRecord(target, texunit);
if(record != NULL)
Common_glCompressedTextureImage3DEXT(record->GetResourceID(), target, level, internalformat,
width, height, depth, border, imageSize, pixels);
@@ -3741,8 +3759,8 @@ void WrappedOpenGL::glCopyMultiTexImage1DEXT(GLenum texunit, GLenum target, GLin
if(IsReplayMode(m_State))
RDCERR("Internal textures should be allocated via dsa interfaces");
else
Common_glCopyTextureImage1DEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
level, internalformat, x, y, width, border);
Common_glCopyTextureImage1DEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, level,
internalformat, x, y, width, border);
}
void WrappedOpenGL::glCopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x,
@@ -3755,8 +3773,8 @@ void WrappedOpenGL::glCopyTexImage1D(GLenum target, GLint level, GLenum internal
if(IsReplayMode(m_State))
RDCERR("Internal textures should be allocated via dsa interfaces");
else
Common_glCopyTextureImage1DEXT(GetCtxData().GetActiveTexRecord(), target, level, internalformat,
x, y, width, border);
Common_glCopyTextureImage1DEXT(GetCtxData().GetActiveTexRecord(target), target, level,
internalformat, x, y, width, border);
}
template <typename SerialiserType>
@@ -3894,8 +3912,8 @@ void WrappedOpenGL::glCopyMultiTexImage2DEXT(GLenum texunit, GLenum target, GLin
if(IsReplayMode(m_State))
RDCERR("Internal textures should be allocated via dsa interfaces");
else
Common_glCopyTextureImage2DEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
level, internalformat, x, y, width, height, border);
Common_glCopyTextureImage2DEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, level,
internalformat, x, y, width, height, border);
}
void WrappedOpenGL::glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x,
@@ -3908,8 +3926,8 @@ void WrappedOpenGL::glCopyTexImage2D(GLenum target, GLint level, GLenum internal
if(IsReplayMode(m_State))
RDCERR("Internal textures should be allocated via dsa interfaces");
else
Common_glCopyTextureImage2DEXT(GetCtxData().GetActiveTexRecord(), target, level, internalformat,
x, y, width, height, border);
Common_glCopyTextureImage2DEXT(GetCtxData().GetActiveTexRecord(target), target, level,
internalformat, x, y, width, height, border);
}
#pragma endregion
@@ -4033,7 +4051,7 @@ void WrappedOpenGL::glTexStorage1D(GLenum target, GLsizei levels, GLenum interna
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureStorage1DEXT(record->GetResourceID(), target, levels, internalformat, width);
else
@@ -4162,7 +4180,7 @@ void WrappedOpenGL::glTexStorage2D(GLenum target, GLsizei levels, GLenum interna
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureStorage2DEXT(record->GetResourceID(), target, levels, internalformat, width,
height);
@@ -4295,7 +4313,7 @@ void WrappedOpenGL::glTexStorage3D(GLenum target, GLsizei levels, GLenum interna
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureStorage3DEXT(record->GetResourceID(), target, levels, internalformat, width,
height, depth);
@@ -4440,7 +4458,7 @@ void WrappedOpenGL::glTexStorage2DMultisample(GLenum target, GLsizei samples, GL
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureStorage2DMultisampleEXT(record->GetResourceID(), target, samples,
internalformat, width, height, fixedsamplelocations);
@@ -4466,7 +4484,7 @@ void WrappedOpenGL::glTexImage2DMultisample(GLenum target, GLsizei samples, GLen
{
// assuming texstorage is equivalent to teximage (this is not true in the case where someone
// tries to re-size an image by re-calling teximage).
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureStorage2DMultisampleEXT(record->GetResourceID(), target, samples,
internalformat, width, height, fixedsamplelocations);
@@ -4617,7 +4635,7 @@ void WrappedOpenGL::glTexStorage3DMultisample(GLenum target, GLsizei samples, GL
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureStorage3DMultisampleEXT(record->GetResourceID(), target, samples,
internalformat, width, height, depth,
@@ -4644,7 +4662,7 @@ void WrappedOpenGL::glTexImage3DMultisample(GLenum target, GLsizei samples, GLen
{
// assuming texstorage is equivalent to teximage (this is not true in the case where someone
// tries to re-size an image by re-calling teximage).
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureStorage3DMultisampleEXT(record->GetResourceID(), target, samples,
internalformat, width, height, depth,
@@ -4851,8 +4869,8 @@ void WrappedOpenGL::glTexSubImage1D(GLenum target, GLint level, GLint xoffset, G
SERIALISE_TIME_CALL(GL.glTexSubImage1D(target, level, xoffset, width, format, type, pixels));
if(IsCaptureMode(m_State))
Common_glTextureSubImage1DEXT(GetCtxData().GetActiveTexRecord(), target, level, xoffset, width,
format, type, pixels);
Common_glTextureSubImage1DEXT(GetCtxData().GetActiveTexRecord(target), target, level, xoffset,
width, format, type, pixels);
}
void WrappedOpenGL::glMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level,
@@ -4863,8 +4881,8 @@ void WrappedOpenGL::glMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint
GL.glMultiTexSubImage1DEXT(texunit, target, level, xoffset, width, format, type, pixels));
if(IsCaptureMode(m_State))
Common_glTextureSubImage1DEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
level, xoffset, width, format, type, pixels);
Common_glTextureSubImage1DEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, level,
xoffset, width, format, type, pixels);
}
template <typename SerialiserType>
@@ -5067,7 +5085,7 @@ void WrappedOpenGL::glTexSubImage2D(GLenum target, GLint level, GLint xoffset, G
GL.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels));
if(IsCaptureMode(m_State))
Common_glTextureSubImage2DEXT(GetCtxData().GetActiveTexRecord(), target, level, xoffset,
Common_glTextureSubImage2DEXT(GetCtxData().GetActiveTexRecord(target), target, level, xoffset,
yoffset, width, height, format, type, pixels);
}
@@ -5079,8 +5097,8 @@ void WrappedOpenGL::glMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint
height, format, type, pixels));
if(IsCaptureMode(m_State))
Common_glTextureSubImage2DEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
level, xoffset, yoffset, width, height, format, type, pixels);
Common_glTextureSubImage2DEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, level,
xoffset, yoffset, width, height, format, type, pixels);
}
template <typename SerialiserType>
@@ -5288,7 +5306,7 @@ void WrappedOpenGL::glTexSubImage3D(GLenum target, GLint level, GLint xoffset, G
depth, format, type, pixels));
if(IsCaptureMode(m_State))
Common_glTextureSubImage3DEXT(GetCtxData().GetActiveTexRecord(), target, level, xoffset,
Common_glTextureSubImage3DEXT(GetCtxData().GetActiveTexRecord(target), target, level, xoffset,
yoffset, zoffset, width, height, depth, format, type, pixels);
}
@@ -5301,9 +5319,9 @@ void WrappedOpenGL::glMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint
width, height, depth, format, type, pixels));
if(IsCaptureMode(m_State))
Common_glTextureSubImage3DEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0], target,
level, xoffset, yoffset, zoffset, width, height, depth, format,
type, pixels);
Common_glTextureSubImage3DEXT(GetCtxData().GetTexUnitRecord(target, texunit), target, level,
xoffset, yoffset, zoffset, width, height, depth, format, type,
pixels);
}
template <typename SerialiserType>
@@ -5488,7 +5506,7 @@ void WrappedOpenGL::glCompressedTexSubImage1D(GLenum target, GLint level, GLint
GL.glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, pixels));
if(IsCaptureMode(m_State))
Common_glCompressedTextureSubImage1DEXT(GetCtxData().GetActiveTexRecord(), target, level,
Common_glCompressedTextureSubImage1DEXT(GetCtxData().GetActiveTexRecord(target), target, level,
xoffset, width, format, imageSize, pixels);
}
@@ -5500,8 +5518,8 @@ void WrappedOpenGL::glCompressedMultiTexSubImage1DEXT(GLenum texunit, GLenum tar
format, imageSize, pixels));
if(IsCaptureMode(m_State))
Common_glCompressedTextureSubImage1DEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0],
target, level, xoffset, width, format, imageSize, pixels);
Common_glCompressedTextureSubImage1DEXT(GetCtxData().GetTexUnitRecord(target, texunit), target,
level, xoffset, width, format, imageSize, pixels);
}
template <typename SerialiserType>
@@ -5703,8 +5721,9 @@ void WrappedOpenGL::glCompressedTexSubImage2D(GLenum target, GLint level, GLint
format, imageSize, pixels));
if(IsCaptureMode(m_State))
Common_glCompressedTextureSubImage2DEXT(GetCtxData().GetActiveTexRecord(), target, level, xoffset,
yoffset, width, height, format, imageSize, pixels);
Common_glCompressedTextureSubImage2DEXT(GetCtxData().GetActiveTexRecord(target), target, level,
xoffset, yoffset, width, height, format, imageSize,
pixels);
}
void WrappedOpenGL::glCompressedMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level,
@@ -5716,8 +5735,8 @@ void WrappedOpenGL::glCompressedMultiTexSubImage2DEXT(GLenum texunit, GLenum tar
texunit, target, level, xoffset, yoffset, width, height, format, imageSize, pixels));
if(IsCaptureMode(m_State))
Common_glCompressedTextureSubImage2DEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0],
target, level, xoffset, yoffset, width, height, format,
Common_glCompressedTextureSubImage2DEXT(GetCtxData().GetTexUnitRecord(target, texunit), target,
level, xoffset, yoffset, width, height, format,
imageSize, pixels);
}
@@ -5924,7 +5943,7 @@ void WrappedOpenGL::glCompressedTexSubImage3D(GLenum target, GLint level, GLint
height, depth, format, imageSize, pixels));
if(IsCaptureMode(m_State))
Common_glCompressedTextureSubImage3DEXT(GetCtxData().GetActiveTexRecord(), target, level,
Common_glCompressedTextureSubImage3DEXT(GetCtxData().GetActiveTexRecord(target), target, level,
xoffset, yoffset, zoffset, width, height, depth, format,
imageSize, pixels);
}
@@ -5940,9 +5959,9 @@ void WrappedOpenGL::glCompressedMultiTexSubImage3DEXT(GLenum texunit, GLenum tar
imageSize, pixels));
if(IsCaptureMode(m_State))
Common_glCompressedTextureSubImage3DEXT(GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0],
target, level, xoffset, yoffset, zoffset, width, height,
depth, format, imageSize, pixels);
Common_glCompressedTextureSubImage3DEXT(GetCtxData().GetTexUnitRecord(target, texunit), target,
level, xoffset, yoffset, zoffset, width, height, depth,
format, imageSize, pixels);
}
#pragma endregion
@@ -6120,7 +6139,7 @@ void WrappedOpenGL::glTexBufferRange(GLenum target, GLenum internalformat, GLuin
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureBufferRangeEXT(record->GetResourceID(), target, internalformat, buffer,
offset, size);
@@ -6303,7 +6322,7 @@ void WrappedOpenGL::glTexBuffer(GLenum target, GLenum internalformat, GLuint buf
}
else
{
GLResourceRecord *record = GetCtxData().GetActiveTexRecord();
GLResourceRecord *record = GetCtxData().GetActiveTexRecord(target);
if(record != NULL)
Common_glTextureBufferEXT(record->GetResourceID(), target, internalformat, buffer);
else
@@ -6324,7 +6343,7 @@ void WrappedOpenGL::glMultiTexBufferEXT(GLenum texunit, GLenum target, GLenum in
}
else
{
GLResourceRecord *record = GetCtxData().m_TextureRecord[texunit - eGL_TEXTURE0];
GLResourceRecord *record = GetCtxData().GetTexUnitRecord(target, texunit);
if(record != NULL)
Common_glTextureBufferEXT(record->GetResourceID(), target, internalformat, buffer);
else