glGetProgramiv returns 活动制服数量减少,为什么?

glGetProgramiv returns a lower number of active uniforms, why?

我正在为 Android 使用 opengl es 2.0 和 java 中的 glsl 开发游戏框架。 我做了一个方法,自动将 GL 程序中的所有活动制服加载到带有定位器的 java 地图。我发现的问题是行

        GLES20.glGetProgramiv( this.m_GL_Program_ID, GLES20.GL_ACTIVE_UNIFORMS, total, 0);

返回的制服数量少于我在顶点着色器中声明的数量。我知道如果编译器不使用一些制服可以被削减,但我测试了这个试图获得 m_Joint_Matrix[30] 并且它返回了一个不同于 -1 的值(glGetProgram 返回了 28 个活动制服)所以它不是裁剪所有这些制服。

所以...你认为我做错了什么?这是函数的代码(注意 var debug_value,我在其中测试我的联合矩阵制服):

private void loadUniformCache(){
    int[] total = new int[1];

    GLES20.glGetProgramiv( this.m_GL_Program_ID, GLES20.GL_ACTIVE_UNIFORMS, total, 0);

    Map<String, Triplet<Integer, Integer, Object>> mapa_programa = m_Uniform_Cache_Store.get(this.m_GL_Program_ID);
    if (mapa_programa == null){
        mapa_programa = new HashMap<String, Triplet<Integer, Integer, Object>>();
        m_Uniform_Cache_Store.put(this.m_GL_Program_ID, mapa_programa);
    }

    for(int i=0; i < total[0]; ++i)  {

        int[] uniformType = new int[1];
        int[] uniformSize = new int[1];

        String uniformName = GLES20.glGetActiveUniform( this.m_GL_Program_ID, i, uniformSize, 0, uniformType, 0);

        int uniformLocation = GLES20.glGetUniformLocation(this.m_GL_Program_ID, uniformName);

        int debug_value = GLES20.glGetUniformLocation(this.m_GL_Program_ID, "m_Joint_Matrix_Array[30]");

        // tupla de location, último valor asignado al uniform
        Triplet<Integer, Integer, Object> uniform_location_type_and_value = new Triplet<Integer, Integer, Object>(uniformLocation, uniformType[0], null);

        mapa_programa.put(uniformName, uniform_location_type_and_value);
    }
}

发生这种情况的原因是,正如我在评论中所说,一组制服被报告为仅活动制服。

https://www.opengl.org/sdk/docs/man/html/glGetActiveUniform.xhtml

"Only one active uniform variable will be reported for a uniform array."