1

我想将一组 vec4 作为统一传递给 OpenGL 的片段着色器,这似乎比我希望的要困难得多。到了我试图传递一组 GLfloat 并在着色器中重建 vec4 的地步,但它仍然不起作用

我尝试在 vshader 中声明:

#extension GL_NV_shader_buffer_load : enable
uniform GLfloat* points;

并从代码中调用:

glUniform1fv(points, pointsLen*4, points);

认为我以 1 个一组传递浮点数,并且我的 vec4 数量是 4 倍。
遗憾的是,这个 vshader 没有将编译传递给 GLSL 程序。

我该如何解决?通过解决此问题或以完全不同的方式进行操作:)

4

1 回答 1

1

NVIDIA 的 shader_buffer_load 不能这样工作。当你声明一个uniform指针时,这意味着你告诉编译器你将提供一个 GPU 地址来存储该指针的数据。该 GPU 地址来自一个缓冲区对象

所以你需要把你的数据放在一个缓冲区对象中,然后让它常驻(这样你就可以得到GPU地址)。您不会给它一个指向数据数组的 CPU 指针。

如果您只想拥有一个数据数组,则根本不需要 shader_buffer_load。GLSL 允许统一数组。您只需要在它们上放置一个明确的大小

于 2012-01-19T23:14:00.647 回答