【问题标题】:In opengl ES can I use a vertex buffer array buffer etc for shader shared matrices?在 opengl ES 中,我可以将顶点缓冲区数组缓冲区等用于着色器共享矩阵吗?
【发布时间】:2018-12-11 08:11:27
【问题描述】:

由于 OpenGL ES 不支持共享的“统一块”,我想知道是否有一种方法可以放置可以被许多不同着色器引用的矩阵,一个简单的例子是不会改变的 worldToViewport 或 worldToEye对于整个帧并且所有着色器都会引用。我看到一篇文章,其中一个顶点使用 3 或 4 个点调用将其从 4 个“列向量”转换,但想知道是否有办法将缓冲区数据分配给着色器中的“mat4”。

啊,是的,需要这个的是 webGL,目前它似乎只支持 openGLES 2.0。

我想知道它是否支持索引属性缓冲区,因为我假设它们不需要相对于位置顶点数组的大小是任何指定的大小。

然后,如果可以使用硬编码或计算的索引到属性缓冲区(在着色器中),并且可以一次绑定多个属性缓冲区,并且可以同时访问所有“绑定到着色器”缓冲区着色器...

我看看所有 true 是否可行。我需要一个关于着色器的良好语言/架构参考,因为我对着色器编程有点陌生,因为我试图在不知道砖块形状的情况下设计一堵墙:)

【问题讨论】:

    标签: opengl-es vertex-shader vertex-buffer


    【解决方案1】:

    顶点属性是逐顶点的,因此无法在多个顶点之间共享顶点属性。

    OpenGL ES 2.0 及更高版本具有 CPU 端统一,必须在绘制时从 CPU 单独上传。 Uniforms 属于 program 对象,因此对于一个 frame 中固定的 Uniforms,您只需修改每个程序一次,因此成本不一定与绘制次数成正比。

    OpenGL ES 3.0 及更高版本具有统一缓冲区对象 (UBO),它允许您从内存中的缓冲区加载统一文件。

    我不确定您所说的“不支持共享统一块”是什么意思,因为这几乎就是 UBO,尽管它不适用于仅支持 OpenGL ES 2.x 的旧硬件。

    【讨论】:

    • 我添加到问题中 - 我需要了解有关着色器的更多信息 :)
    • 嗯,它确实看起来像 UBO 是可以使用的 - 现在我需要弄清楚如何在着色器中使用它们并访问它的所有部分:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2011-12-30
    • 1970-01-01
    相关资源
    最近更新 更多