opengl - GLSL:当前绘制调用中的图元数量

标签 opengl glsl

TES 着色器提供了一个内置的输入变量 gl_PrimitiveID​ ,这是正在为此绘制调用处理的补丁系列中当前补丁的索引。

除了设置统一变量之外,我如何知道此绘制调用中的补丁总数?为什么没有这样的输入?拥有类似 gl_NumPrimitives 的东西似乎很合乎逻辑。内置,如果我们已经有了 gl_PrimitiveID柜台。

动机:我想根据 gl_PrimitiveID​ 将一维采样器从 0.0 索引到 1.0 ,因此绘制调用中的第一个图元对应于 0.0,最后一个对应于 1.0。

最佳答案

How can I know the total number of patches in this draw call, besides setting uniform variable?


你只能设置一个统一变量。

And why is there no such input?


我不是 Khronos 的一部分,但我推测:
  • 底层硬件非常面向流。事实上,您无法事先知道一般情况下的原语数量(例如,当您使用原语重启索引时),这意味着计算它需要完成一个不适合的单独步骤当前基于流的架构。
  • 他们试图将最新的 OpenGL 版本保持在最低限度。这意味着可以通过现有功能高效实现的任何功能都将被淘汰。
  • 关于opengl - GLSL:当前绘制调用中的图元数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39508772/

    相关文章:

    c++ - 使用未声明的标识符 'gl_LightSource'

    math - 将极角映射到 0..1

    c++ - 实例化的立方体仅显示一次

    opengl - 为什么 OpenCL 着色器在写入 OpenGL 纹理时会忽略绿色、蓝色和 Alpha channel ?

    c - OpenGL glTexImage2D 内存问题

    c++ - AMD 驱动程序的 glGetUniformLocation 中可能存在错误

    opengl - 几何着色器中的宽线表现得很奇怪

    c++ - 如何在 Linux 上静态编译 SDL2 和 GLEW 应用程序?

    c++ - 我如何使用着色器将一个 3D 对象变形为另一个对象?

    opengl - GLSL:删除死代码会导致视觉错误