2013-05-17 137 views
2

我試圖使用OpenGL函數glDrawPixels()glDrawPixels訪問衝突讀取位置

#define SIZE 480 
unsigned int rgbPixels[SIZE][SIZE] 
... 
glDrawPixels(SIZE, SIZE, GL_RGB, GL_UNSIGNED_INT, rgbPixels); 

渲染體積數據如果我做sizeof(rgbpixels)返回921600這就是480 * 480 * 4。

我已經試過GL_RGBA但並沒有好處。最後,我在屏幕上的東西沒有得到使用glDrawPixels(SIZE, SIZE*0.81, GL_RGB, GL_UNSIGNED_INT, rgbPixels);

訪問衝突但它不是按我預期的輸出。那麼在這種情況下誰能幫助我?

+0

'rgbPixels'是什麼類型? –

回答

4

你告訴glDrawPixels您的數據SIZExSIZE像素和每個像素具有32位無符號整數類型每個GL_UNSIGNED_INT)的3個組分(GL_RGB)。如果這不是rgbPixels的情況下(這可能不是當你說這只是SIZE*SIZE*4而不是需要SIZE*SIZE*3*4),那麼這很可能會導致訪問衝突或其他不確定的行爲。

當你說你的rgbPixels是大小SIZE*SIZE*4的,那麼我想每個像素包含4個字節,每個單個字節是一個顏色分量。如果是這樣的話,你需要

glDrawPixels(SIZE, SIZE, GL_RGBA, GL_UNSIGNED_BYTE, rgbPixels); 

就始終牢記的glDrawPixels所有參數告訴OpenGL的指針參數(rgbPixels)所使用的內存,並以哪種方式它奠定了。所以那些當然必須匹配rgbPixels包含的(或指向)的實際內存。

+0

你真棒..不知道我是怎麼錯過的......浪費了3個連續小時 – Adorn

+0

而且我還想補充一句:「爲什麼你在地球上首先使用drawPixels()?」。 ;) –

+0

是的,我知道它是緩慢的..但是有沒有其他選項可以在屏幕上繪製圖像?我正在渲染體積數據,從文件中讀取並重復繪製圖像 – Adorn

1

由於OpenGL將期望每個像素3個無符號整數!您可能想使用GL_UNSIGNED_INT_8_8_8_8代替數據類型。