2012-12-22 30 views
1

我試圖趕上來自不兼容的圖像紋理分辨率的錯誤解決方法不兼容時如何捕獲glTexImage2D錯誤?

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, imgdata); 


1. Compatible resolution, working fine = 1024x1024, 1920x1200, 1920x1080, 704x891 
2. Incompatible resolutions, all giving error = 2058x1734, 1018x1280, 591x602, etc. 

我不知道爲什麼glTexImage2D做工精緻用1號決議和#2的分辨率給錯誤。我無法提取它所遵循的分辨率模式,這意味着某些分辨率工作正常,有些則不行。我不知道爲什麼。

現在的問題是,如果用戶嘗試創建具有不兼容分辨率的紋理,那麼OpenGL應該會捕獲錯誤,並且如果紋理未創建,我應該得到0,但glTexImage2D沒有返回任何東西,因此我們無法爲用戶確定。 「這個決議不被支持,不要使用它。」但問題是OpenGL不會捕獲glTexImage2D錯誤。

在運行時刻執行

cout<<until here working fine..<<endl; 

glTexImage2D(......) run-time execution stops here and windows gives not responding error. 

cout<<"output of something that never executed"<<endl; 
Here If I use glGetError() it never works. Because windows gives error in glTexImage2D. 

那麼,是有人知道我怎麼能趕上glTexImage2D錯誤。如果它給出錯誤,我顯示OK「不要使用這個圖像,使用另一個。」並返回0.

如何實現此任務? 我也想過僅限於某些分辨率的用戶,但這不是解決方案。對 ?

+2

模式明智的,我只能看到非工作紋理是不是4個像素寬的倍數。 – JasonD

+0

我這麼認爲,你是對的。那麼你認爲我可以用這種方式來限制嗎? if(imgW%4 == 0)然後創建紋理。對 ? – furqan

+0

你不應該,似乎有一個不同的基本問題。你確定你的圖片數據對於那些非工作尺寸有效嗎?即您的圖像加載器是否傳遞了glTexImage的僞指針? – JasonD

回答

4

在您的情況下不被接受的圖像格式不是4的倍數。這導致我的問題:您是否設置像素存儲參數?設置所有GL_UNPACK_…參數以匹配您的圖像數據之前調用glTexImage。 GL_UNPACK_ALIGNMENT對您的問題特別感興趣。

http://www.opengl.org/sdk/docs/man/xhtml/glPixelStore.xml

+0

我明白了你的觀點,但在哪裏把glPixelStorei(GL_UNPACK_ALIGNMENT,1);在glTexImage2D()之前?或在哪裏? – furqan

+0

你說得對。我用\t glPixelStorei(GL_UNPACK_ALIGNMENT,1)解決了它; //這是非常重要的,以避免無效的圖像分辨率。在glTexImage2D中應該將圖像寬度除以4(圖像 - >寬度%4 == 0)。 glPixelStorei使紋理兼容。 – furqan

+0

@furqan:我在我的答案中寫過,將調用放到glPixelStore的位置。爲了強調,我重新格式化了現有的節。 – datenwolf

0

這看起來像一些奇怪的驅動程序錯誤。無論你傳遞什麼,OpenGL調用都不會崩潰(只要它不是無效指針或指針操作的大小錯誤)。此外,我沒有看到任何紋理無法加載的紋理。

一般應該只有關於有效紋理3個限制功能: 縱橫比和尺寸:

  • 紋理可能太高或太寬以進行處理。
  • 舊卡片可能需要紋理爲正方形(寬度=高度)。
  • 舊卡可能需要紋理尺寸爲2的冪(width = 2 n; height = 2 m)。

我在紋理尺寸中看不到任何真實圖案。

紋理格式(即顏色深度/顏色通道)可能是另一個問題,但不認爲這實際上涉及這裏。

+0

我沒有使用舊版GPU,它的Nvidia GeForce GT 220 512 MB。顏色或通道在這裏不是問題,因爲相同的圖像在調整到兼容的分辨率之後工作。 JasonD發現,可能是模式明智的寬度應該除以4. – furqan

相關問題