【问题标题】:Saving up variables to process later on shaders保存变量以便稍后在着色器上处理
【发布时间】:2013-09-09 13:35:56
【问题描述】:

由于 GLES2.0 没有几何着色器,我想只使用顶点着色器来模拟一个。 我的想法是这样的: 我有:x、y、z、大小变量,每个顶点发送一个,然后将它们保存在某个地方。在第 6 个顶点之后,我使用最后 6 个值(x、y、z、大小和另外两个,如果需要)来构建接下来的 6 个顶点。例如:

  • 在第一次调用顶点着色器时,我将 x 变量保存在某处,并返回 gl_Position = (0,0,0)、gl_Color = (0,0,0,0) 等...
  • 在第二次调用时,我将 y 变量保存在某处,然后以与上述相同的方式丢弃顶点。 然后我重复这个直到第 6 个顶点。
  • 在第 6 个顶点,我从某处提取 x、y、z 和 size 变量,然后使用它们构建正方形的左上顶点。 (gl_Position = (x-size/2, y-size/2, 0)... 等等。

问题是,我不知道这个“某处”是什么。我不知道如何在顶点着色器调用中保存一个变量,以便在下一次调用中使用它。

TLDL:我想在一次绘图调用中在 GLES2.0 上用 5200 * (x, y, z, square_size) 制作 10400 个三角形,对如何做有想法,但不知道如何实现它

【问题讨论】:

    标签: android opengl-es opengl-es-2.0 vertex-shader


    【解决方案1】:

    问题是,我不知道这个“某处”是什么。我不知道如何在顶点着色器调用中保存一个变量,以便在下一次调用中使用它。

    这是你无法做到的(它需要超出顶点着色器阶段才能做到这一点)。简单地考虑一下所有个顶点是由GPU同时通过顶点着色器处理的。这是您在使用顶点阶段时应该想到的模型。我认为很明显为什么会这样,你想要的东西不能那样做。

    【讨论】:

    • 出于某种原因,我什至没有考虑到顶点着色器将是多线程的......
    • @Guedez:所有着色器阶段本质上都是大规模并行的。这就是 GPU 与 CPU 如此不同的原因。
    猜你喜欢
    • 2022-10-14
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2012-05-27
    相关资源
    最近更新 更多