On 03/30/2013 04:26 AM, Dragomir Ivanov wrote:
I don't know OpenGL very much, but can uniforms be more than 10? So you
can have "[24]" where you will need +4, not +3.

The query gives back the name that is the base of the array, not the declaration. No matter what size the array "foo" is, you'll always get "foo[0]" as the name of the base.

On Sat, Mar 30, 2013 at 3:22 AM, Haixia Shi <h...@chromium.org
<mailto:h...@chromium.org>> wrote:

    If the active uniform is an array, then the length of the uniform
    name should
    include the three extra characters for the "[0]" suffix, which is
    required by
    the GL 4.2 spec to be appended to the uniform name in
    glGetActiveUniform().

    This avoids the situation where the output buffer does not have
    enough space
    to hold the "[0]" suffix, resulting in an incomplete array
    specification like
    "foobar[0".

    Change-Id: Icd58cd6a73c9de7bbe5659d757b8009021846019
    Signed-off-by: Haixia Shi <h...@chromium.org <mailto:h...@chromium.org>>
    Reviewed-by: Stéphane Marchesin <marc...@chromium.org
    <mailto:marc...@chromium.org>>
    ---
      src/mesa/main/shaderapi.c | 5 ++++-
      1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
    index be69467..68767f4 100644
    --- a/src/mesa/main/shaderapi.c
    +++ b/src/mesa/main/shaderapi.c
    @@ -519,8 +519,11 @@ get_programiv(struct gl_context *ctx, GLuint
    program, GLenum pname, GLint *param

            for (i = 0; i < shProg->NumUserUniformStorage; i++) {
              /* Add one for the terminating NUL character.
    +         * However if the uniform is an array, then add three extra
    characters
    +         * for the appended "[0]" suffix, in addition to the
    terminating NUL.
               */
    -        const GLint len = strlen(shProg->UniformStorage[i].name) + 1;
    +        const GLint len = strlen(shProg->UniformStorage[i].name) + 1 +
    +            ((shProg->UniformStorage[i].array_elements != 0) ? 3 : 0);

              if (len > max_len)
                 max_len = len;
    --
    1.8.1.3
    _______________________________________________
    mesa-dev mailing list
    mesa-dev@lists.freedesktop.org <mailto:mesa-dev@lists.freedesktop.org>
    http://lists.freedesktop.org/mailman/listinfo/mesa-dev

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to