首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组的glUniformLocation

数组的glUniformLocation
EN

Stack Overflow用户
提问于 2018-06-03 06:18:12
回答 1查看 92关注 0票数 0

我正在尝试将数组的统一位置保存到Shader类中的std::map中。

我的顶点着色器有一个统一到mat4的数组。

代码语言:javascript
运行
复制
uniform mat4 bone_matrices[32];

在下面的代码中,骨骼矩阵名称显示为bone_matrices。所以我只获取第一个数组成员的位置。我认为其他的是连续的。

代码语言:javascript
运行
复制
class Shader
{
...
private:
    GLuint mi_program;
    std::map<std::string, GLint> m_maplocations;
};


void Shader::mapLocations()
{
  GLint numUniforms = 0;
  const GLenum properties[5] = {GL_BLOCK_INDEX, GL_TYPE, GL_NAME_LENGTH, GL_LOCATION, GL_ARRAY_SIZE};
  glGetProgramInterfaceiv(mi_program, GL_UNIFORM, GL_ACTIVE_RESOURCES, &numUniforms);

  for(int unif = 0; unif < numUniforms; ++unif)
    {
      GLint values[5];
      glGetProgramResourceiv(mi_program, GL_UNIFORM, unif, 5, properties, 5, NULL, values);

      // Skip any uniforms that are in a block.
      if(values[0] != -1)
        continue;

      std::string nameData;
      nameData.resize(values[2]);

    if(values[4] > 1)
        {
         // **have an array here**
        }

      glGetProgramResourceName(mi_program, GL_UNIFORM, unif, nameData.size(), NULL, &nameData[0]);
      std::string name(nameData.begin(), nameData.end() - 1);
      m_maplocations.insert(std::pair<std::string, GLint>(name, values[3]));
    }
}

我如何迭代bone_matrices数组,获得它们的名称: bone_matrices,bone_matrices1,...和地点。谢谢..

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50661621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档