【问题标题】:Passing an array of vec4 (GLfloat quad) as uniform to openGL shaders将vec4(GLfloat quad)数组作为统一传递给openGL着色器
【发布时间】:2012-01-19 22:04:09
【问题描述】:

我想将 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 程序。

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

【问题讨论】:

标签: arrays opengl uniform


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2011-03-14
    相关资源
    最近更新 更多