3

以下代码不向 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 应用程序,因此视图变换是一个非常简单的 glOrtho。

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

我可以提供更多信息,请询问。我几乎是 OpenGL 和 Mac 新手,所以我不知道我是否提供了足够的信息。

4

4 回答 4

2

我一直在使用英特尔的 OpenGL 实现时遇到问题,但我不确定这次是你的问题。我认为您遇到了一些字节顺序问题。阅读本文并随意尝试不同的包装和颜色顺序常数。

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

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

于 2008-08-25T11:12:06.267 回答
1

我一直对英特尔的 OpenGL 实现有疑问

这就是我所担心的,但我很难相信他们会搞砸像 glDrawPixels 这样基本的东西,而且,因为我可以通过更改光栅位置矢量来“复制”问题,这让我认为这是我的错,我错过了一些基本的东西。

我认为您遇到了一些字节顺序问题

那是我的第一个倾向,我尝试过不同的包装,但没有结果。我还尝试将缓冲区中的值打包,如果混合后会显示可用的 alpha,但没有结果。这就是为什么我要咆哮光栅 pos 树,但老实说,我仍然不能 100% 确定。请注意,如果这有所作为,我只针对英特尔 Mac。

感谢您的链接,这是一本好书,可以收藏起来以备将来参考。我会升级,但在我再获得 3 个代表点之前我不能:)

于 2008-08-25T17:40:46.800 回答
1

It's highly unlikely that a basic function like glDrawPixels might not be working. Have you tried some really simple settings like GL_RGB or GL_RGBA for format and GL_UNSIGNED_BYTE or GL_FLOAT for type? If not, can you share with us the smallest possible program which replicates your problem?

于 2008-08-27T04:55:03.223 回答
1

默认栅格位置应为 (0,0,0,1),但您可以重置它以确保。

就在调用 glDrawPixels() 之前,尝试

GLint valid;
glGet(GL_CURRENT_RASTER_POSITION_VALID, &valid);

这应该告诉您当前的光栅位置是否有效。如果是,那么这不是你的问题。

于 2008-09-30T18:57:06.860 回答