2008-08-25 73 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); 

這應該告訴你,如果當前光柵位置是有效的。如果是這樣,那麼這不是你的問題。

相關問題