统一块中的GLSL Uniform - 如何访问?

时间:2016-12-16 02:24:44

标签: opengl glsl shader block uniform

我得到了一个带有这些统一变量的GLSL着色器:

#version 150
layout (shared) uniform GlobalData {
  uniform mat4 worldMatrix;
  uniform mat4 projMatrix;
  // ...
};

如何从我的程序中设置这两个矩阵?不幸的是我无法编辑GLSL代码,因为我只为现​​有应用程序编写插件。

我试过了:

glGetUniformLocation(program, "GlobalData.worldMatrix");
glGetUniformLocation(program, "worldMatrix");

既不起作用。

Teh GlobalData块还有很多其他我不想改变的制服 - 我所关心的只是worldMatrix。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

  

我只为现有应用程序编写插件。

然后你不要。除非您可以访问插件将用于存储这些矩阵的缓冲区对象。

GlobalDatauniform block;它代表UBO的着色器一侧。 C ++端将统一数据存储在缓冲区对象中。因此,除非您的应用程序允许您访问该缓冲区,否则您无能为力。

您可能能够绑定自己的缓冲区,但除非应用程序旨在允许您覆盖其缓冲区,否则它可能会覆盖您在渲染之前绑定的任何内容。