2008-08-25 71 views
3

以下代码不会将数据写入Intel集成显卡上的后台缓冲区,例如,在MacBook上。在ATI卡上,例如在iMac中,它将绘制到后台缓冲区。宽度和高度是正确的(并且800x600缓冲区),m_PixelBuffer正确填充0xAA00AA00。什么能阻止OpenGL glDrawPixels在某些显卡上工作?

到目前为止,我的最佳猜测是,需要glWindowPos设置有些不妥之处。我目前没有设置它(或栅格位置),当我得到GL_CURRENT_RASTER_POSITION时,我注意到ATI卡上的默认值是0,0,0,0,而Intel是0,0,0,1。当我将ATI卡上的光栅位置设置为0,0,0,1时,我得到的结果与Intel卡相同,没有任何东西绘制到后台缓冲区。有一些变形状态我错过了吗?这是一个2D应用程序,所以视图变换是一个非常简单的glOrtho。

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

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

回答

2

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

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

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

1

我一直与OpenGL的问题来自英特尔

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

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

那是我的第一个倾向,我尝试了不同的包装,没有结果。我也尝试用缓冲区打包缓冲区,如果使用的话会出现一个可用的阿尔法值,而没有结果。这就是为什么我咆哮光栅pos树,但我仍然不是100%确定。请注意,如果这有所帮助,我只针对英特尔Mac。

感谢您的链接,它是一个很好的阅读,并很好的藏起来以备将来参考。我会upmod,但我不能,直到我得到3个更多的重点:)

1

这是不太可能的基本功能,如glDrawPixels可能无法正常工作。你有没有试过像GL_RGBGL_RGBA格式和GL_UNSIGNED_BYTEGL_FLOAT类型一些非常简单的设置?如果不是的话,你能否与我们分享最小可能的复制你的问题的计划?

1

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

只调用glDrawPixels()之前,尝试

GLint valid; 
glGet(GL_CURRENT_RASTER_POSITION_VALID, &valid); 

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

相关问题