From 3dfa8f17abeaa9939bcdd5a48d4bad0bd6cfd8ae Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 1 Dec 2014 18:13:28 +0000 Subject: [PATCH] Fix serialising program array uniforms. --- renderdoc/driver/gl/gl_common.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/gl/gl_common.cpp b/renderdoc/driver/gl/gl_common.cpp index 94345b73f..cfef98161 100644 --- a/renderdoc/driver/gl/gl_common.cpp +++ b/renderdoc/driver/gl/gl_common.cpp @@ -480,7 +480,6 @@ static void ForAllProgramUniforms(const GLHookSet &gl, Serialiser *ser, GLuint p char n[1024] = {0}; gl.glGetProgramResourceName(progSrc, eGL_UNIFORM, i, values[2], NULL, n); - basename = n; if(arraySize > 1) { @@ -495,13 +494,14 @@ static void ForAllProgramUniforms(const GLHookSet &gl, Serialiser *ser, GLuint p { arraySize = 1; } + + basename = n; } if(SerialiseUniforms) { ser->Serialise("type", type); ser->Serialise("arraySize", arraySize); - ser->Serialise("srcLocation", srcLocation); ser->Serialise("basename", basename); ser->Serialise("isArray", isArray); } @@ -516,8 +516,16 @@ static void ForAllProgramUniforms(const GLHookSet &gl, Serialiser *ser, GLuint p string name = basename; if(isArray) + { name += StringFormat::Fmt("[%d]", arr); + if(ReadSourceProgram) + srcLocation = gl.glGetUniformLocation(progDst, name.c_str()); + } + + if(SerialiseUniforms) + ser->Serialise("srcLocation", srcLocation); + GLint newloc = 0; if(WriteDestProgram) {