是什么可以阻止OpenGL glDrawPixels在某些视频卡上工作?

时间:2020-03-05 18:42:43  来源:igfitidea点击:

以下代码不将数据写入Intel集成视频卡(例如MacBook)上的后台缓冲区。在ATI卡上(例如在iMac中),它会吸引到后缓冲区。宽度和高度正确(和800x600缓冲区),并且m_PixelBuffer正确填充了0xAA00AA00。

到目前为止,我最好的猜测是需要glWindowPos设置有些不对劲。我目前未设置它(或者栅格位置),当我得到GL_CURRENT_RASTER_POSITION时,我注意到ATI卡上的默认值为0,0,0,0,而Intel为0,0,0,1. 当我将ATI卡上的栅格pos设置为0,0,0,1时,我得到的结果与Intel卡相同,没有任何东西被提取到后台缓冲区中。我缺少一些转换状态吗?这是2D应用程序,因此视图转换非常简单。

glDrawPixels(GetBufferWidth(), GetBufferHeight(), GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, m_PixelBuffer);

我可以提供的任何其他信息,请询问。我几乎是OpenGL和Mac newb,所以不知道我是否提供了足够的信息。

解决方案

回答

尽管我不确定这次是否是问题,但我一直对Intel的OpenGL实现有疑问。我认为我们遇到了一些字节顺序问题。请阅读并随意尝试使用用于包装和颜色顺序的不同常量。

http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/universal_binary_tips/chapter_5_section_25.html

我知道这是OSX指南,我们可能会在其他站点上的其他平台上找到类似的OpenGL文章。这应该适用。

回答

I've always had problems with OpenGL
  implementations from Intel

这就是我担心的问题,但是我很难相信他们会搞砸像glDrawPixels这样基本的东西,而且,因为我可以通过更改栅格位置矢量来"复制"问题,所以这让我感到困惑认为这是我的错,我缺少一些基本知识。

I think you're running into some
  byte-order issues

那是我的初衷,我尝试了不同的包装方式,但没有结果。我还尝试使用一些值打包缓冲区,如果出现混乱,这些值将显示可用的alpha值,但没有结果。这就是为什么我要刺耳栅格pos树的原因,但是老实说我还是不是100%确信。请注意,如果有所不同,我仅针对Intel Mac。

感谢我们提供的链接,这是一本不错的书,也非常适合将来参考。我会修改,但直到获得3分以上才可以:)

回答

像glDrawPixels这样的基本功能不太可能无法正常工作。我们是否尝试过一些非常简单的设置,例如GL_RGB或者GL_RGBA用于格式,GL_UNSIGNED_BYTE或者GL_FLOAT用于类型?如果没有,我们能否与我们分享能够重现我们问题的最小程序?

回答

默认栅格位置应为(0,0,0,1),但我们可以将其重置以确保。

在调用glDrawPixels()之前,尝试

GLint valid;
glGet(GL_CURRENT_RASTER_POSITION_VALID, &valid);

这应该告诉我们当前栅格位置是否有效。如果是这样,那么这不是问题。