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

时间:2008-08-25 04:11:50

标签: macos opengl graphics

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

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

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

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

4 个答案:

答案 0 :(得分:2)

我一直有来自英特尔的OpenGL实现的问题,虽然我不确定这次是你的问题。我认为你遇到了一些字节顺序问题。给它一个阅读,并随意尝试不同的常量包装和颜色顺序。

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

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

答案 1 :(得分:1)

  

我一直遇到OpenGL问题   来自英特尔的实施

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

  

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

那是我的第一个倾向,我尝试过不同的包装,没有结果。我还尝试用缓冲区填充缓冲区,这些值会在调整时显示可用的alpha值,但没有结果。这就是我咆哮光栅pos树的原因,但老实说我还不是100%肯定。请注意,如果有所不同,我只针对英特尔Mac。

感谢您的链接,这是一个很好的阅读,并且很好地收集以备将来参考。我upmod但我不能直到我得到3个以上的代表点:))

答案 2 :(得分:1)

glDrawPixels 这样的基本功能可能无法正常工作。您是否尝试过一些非常简单的设置,例如 GL_RGB GL_RGBA 用于格式, GL_UNSIGNED_BYTE GL_FLOAT 用于类型?如果没有,你能和我们分享一个最小的程序来复制你的问题吗?

答案 3 :(得分:1)

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

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

GLint valid;
glGet(GL_CURRENT_RASTER_POSITION_VALID, &valid);

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