【发布时间】:2012-02-03 12:55:26
【问题描述】:
我正在写application that uses a GLSL fragment shader to do some color conversion to RGB。此应用程序使用GL_TEXTURE_RECTANGLE_ARB,因为我需要支持 NPOT 纹理。
当 1280x720 图像被渲染到 较小的表面(例如 640x480)时,就会出现问题。
显然,我的 ATI Technologies Inc RV610 视频设备 [Radeon HD 2400 PRO] 在使用 GL_LINEAR 执行缩小过滤时出现问题:
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
下图中的红色矩形显示了问题的确切位置。视频顶部正在渲染绿色线条(高度为 4 或 5 个像素)(图像周围的黑色边框不是渲染的一部分,好吗?!)。根据正在渲染的图像,线条的颜色也会发生变化:
缩放:
问题不会发生在:
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
我已经在另一台装有 Intel 卡的 PC 上测试了此应用程序,它也使用了 Intel Corporation 4 系列芯片组集成图形控制器(修订版 03),与设置的过滤模式无关。巧合?
我是否忘记在the code 中做某事,这可能是驱动程序问题吗?我有几台具有相同英特尔卡的机器,并且所有机器都出现了问题。请务必声明NVIDIA GeForce 7300 不会发生此问题。
【问题讨论】:
-
我还尝试将
GL_TEXTURE_WRAP_S和GL_TEXTURE_WRAP_T设置为不同的模式,例如GL_CLAMP、GL_CLAMP_TO_BORDER和GL_CLAMP_TO_EDGE,但没有任何区别。 -
我怀疑会发生什么。但是有一些源代码,客户端绘图命令和服务器端 GLSL 都会有所帮助。
-
The entire source code is available in this question。该代码唯一需要更改的是将
GL_TEXTURE_MIN_FILTER设置为GL_LINEAR的调用。 -
我们也可以去聊天,如果您更容易的话,我可以按照您的指示进行测试。
标签: c++ c opengl filter rendering