将一系列vec4(GLfloat quad)作为均匀传递给openGL着色器

时间:2012-01-19 22:04:10

标签: arrays opengl uniform

我想将一个vec4数组传递给OpenGL的片段着色器作为制服,它似乎比我希望的要困难得多。它试图传递一系列GLfloat并在着色器中重建vec4s,但它仍然无法正常工作

我尝试在vshader中声明:

#extension GL_NV_shader_buffer_load : enable
uniform GLfloat* points;

并从代码中调用:

glUniform1fv(points, pointsLen*4, points);

认为我以1组为单位传递浮动数,而我的数量是vec4s数的4倍 可悲的是,这个vshader没有将编译传递给GLSL程序。

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

1 个答案:

答案 0 :(得分:1)

NVIDIA的shader_buffer_load无法正常工作。当您声明uniform指针时,这意味着您告诉编译器您将提供存储该指针数据的GPU地址。该GPU地址来自缓冲区对象

因此,您需要将数据放在缓冲区对象中,然后使其驻留(以便您可以获取GPU地址)。你没有给它一个指向数组数组的CPU指针。

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