在我的游戏的 OpenGL UI 中,我的一小部分用户 (<1%) 遇到了奇怪的失真。看来我的像素完美投影设置:
glViewport(0, 0, clientSizeWidth, clientSizeHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, clientSizeWidth, clientSizeHeight, 0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
double transAmount = 0.375;
glTranslated(transAmount, transAmount, 0.0);
导致他们的系统出现问题。我一直未能成功收集有关他们系统的详细信息,但我相信他们可以成功运行类似的 OpenGL 游戏。所以我相信我的代码有问题。
这是视觉伪影的图片:
这是一张没有视觉伪影的图片(忽略操作系统的差异):
尽管我的游戏将最终渲染缩放为 2x,但它是通过glSubTexImage2D
在执行 1x 渲染之后的一次调用来实现的。这意味着第一个屏幕截图中的伪影在像素加倍之前存在(因此伪影也是像素加倍的原因)。所以像素加倍本身不可能是问题的根源。
关于可能导致这种情况的任何想法?我目前没有办法测试。绝大多数用户(包括我自己)没有体验到视觉伪影。
编辑(4 月 30 日):一位波兰用户告诉我他/她的视频卡遇到了这些伪影,并且是“nVidia 9500 GS”。不确定这是否意味着9500M GS或9500 GT,但两者看起来都相当现代。