以下代码不会将数据写入英特尔集成显卡的后缓冲区,例如,在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应用程序,因此视图转换是一个非常简单的glOrtho。

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

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

===============>>#1 票数:2

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

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

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

===============>>#2 票数:1

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

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

GLint valid;
glGet(GL_CURRENT_RASTER_POSITION_VALID, &valid);

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

===============>>#3 票数:1

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

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

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

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

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

===============>>#4 票数:1

glDrawPixels这样的基本函数可能无法正常工作。 您是否尝试过一些非常简单的设置,例如GL_RGBGL_RGBA用于格式, GL_UNSIGNED_BYTEGL_FLOAT用于类型? 如果没有,您能与我们分享最复杂的程序来复制您的问题吗?

  ask by Chris Blackwell translate from so

未解决问题?本站智能推荐: