我正在寻找使用现代OpenGL逐像素渲染简单图像的最佳方式(如“最自然”或“最有效”)。
由于我不想要mip-mapping,我转向矩形纹理 - 正如我所假设的 - 这个任务的自然选择。
我很惊讶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上运行版本340.52的NVidia驱动程序,在GeForce GTX 760上运行。)
答案 0 :(得分:4)
具有类型特定名称的纹理采样函数(如texture2DRect()
)已全部弃用,并且在核心配置文件中不再可用。
相反,请使用texture()
,它会为所有支持的纹理类型重载。仍支持矩形纹理,因此它适用于sampler2DRect
类型的采样器。
答案 1 :(得分:3)
只需使用GLSL内置函数texelFetch
通过绝对整数坐标来处理纹理图像像素。