【问题标题】:Do rectangle textures really require the GL_ARB_TEXTURE_RECTANGLE extension in OpenGL 4.3?矩形纹理真的需要 OpenGL 4.3 中的 GL_ARB_TEXTURE_RECTANGLE 扩展吗?
【发布时间】:2014-12-25 20:12:11
【问题描述】:

我正在寻找使用现代 OpenGL 逐像素渲染简单图像的最佳方式(如“最自然”或“最有效”)。

由于我不想要 mip 映射,因此我将矩形纹理作为 - 正如我所推测的那样 - 这个任务的自然选择。

我很惊讶glCompileShader() 拒绝接受我在片段着色器中对texture2DRect() 的调用,除非我启用扩展GL_ARB_TEXTURE_RECTANGLE

我没想到会这样,因为我使用的是现代 OpenGL(我指定 #version 430),而 https://www.khronos.org/files/opengl44-quick-reference-card.pdf 的 OpenGL 参考表没有提到需要扩展。

为了增加混乱,着色器编译器接受我的统一声明 uniform sampler2DRect sampler; 甚至没有警告。

这是我的 OpenGL 驱动程序中的错误吗? (我在 Windows 8.1 和 GeForce GTX 760 上运行版本 340.52 的 NVidia 驱动程序)。

【问题讨论】:

    标签: opengl textures


    【解决方案1】:

    具有特定类型名称的纹理采样函数,如 texture2DRect() 都已弃用,并且不再在核心配置文件中可用。

    改为使用texture(),它为所有支持的纹理类型重载。矩形纹理仍然受支持,因此它可以与 sampler2DRect 类型的采样器一起使用。

    【讨论】:

      【解决方案2】:

      只需使用 GLSL 内置函数 texelFetch 通过绝对整数坐标来寻址纹理图像像素。

      【讨论】:

      • 感谢 datenwolf。尽管 Reto Koradi 的建议在我的设置中与您的建议一样有效,但规范说 texture() 采用浮点纹理坐标,而 texelFetch() 指定使用整数坐标。所以我决定接受你的回答而不是 Reto 的回答。
      猜你喜欢
      • 1970-01-01
      • 2013-09-23
      • 2013-04-07
      • 2010-10-18
      • 1970-01-01
      • 2018-08-19
      • 2019-06-10
      • 1970-01-01
      • 2015-07-29
      相关资源
      最近更新 更多