From c37884bdd85ab81c8cf9e1f752c4fadb7b5942a9 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 1 Dec 2014 22:23:49 +0000 Subject: [PATCH] Handle arrays of sampler variables. See gl-330-sampler-object --- renderdoc/driver/gl/gl_shader_refl.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/gl/gl_shader_refl.cpp b/renderdoc/driver/gl/gl_shader_refl.cpp index c1a37e42c..c6e0a4d90 100644 --- a/renderdoc/driver/gl/gl_shader_refl.cpp +++ b/renderdoc/driver/gl/gl_shader_refl.cpp @@ -450,11 +450,30 @@ void MakeShaderReflection(const GLHookSet &gl, GLenum shadType, GLuint sepProg, continue; } - create_array_uninit(res.name, values[1]); - gl.glGetProgramResourceName(sepProg, eGL_UNIFORM, u, values[1], NULL, res.name.elems); - res.name.count--; // trim off trailing null + char *namebuf = new char[values[1]+1]; + gl.glGetProgramResourceName(sepProg, eGL_UNIFORM, u, values[1], NULL, namebuf); + namebuf[values[1]] = 0; + + string name = namebuf; + + res.name = name; resources.push_back(res); + + // array of samplers + if(values[4] > 1) + { + name = name.substr(0, name.length()-3); // trim off [0] on the end + for(int i=1; i < values[4]; i++) + { + string arrname = StringFormat::Fmt("%s[%d]", name.c_str(), i); + + res.bindPoint = (int32_t)resources.size(); + res.name = arrname; + + resources.push_back(res); + } + } } refl.Resources = resources;