2011-07-07 86 views
1

我使用Apple的glImageProcessing示例對其執行某些過濾操作。但是,我希望能夠將新圖像加載到紋理中。OpenGL ES - glImageProcessing - 刪除紋理

目前,例如加載與線圖像:

loadTexture("Image.png", &Input, &renderer); 

(我已經修改以接受實際的UIImage):

loadTexture(image, &Input, &renderer); 

然而,在測試中如何重繪新圖像,我嘗試實施(在Imaging.c中):

loadTexture(image, &Input, &renderer); 
loadTexture(newImage, &Input, &renderer); 

和示例應用程序崩潰的行:

CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(CGImage)); 
在Texture.c

我還試圖通過

loadTexture(image, &Input, &renderer); 
glDeleteTextures(GL_TEXTURE_2D, 0); 
loadTexture(newImage, &Input, &renderer); 

這也失敗刪除活動紋理。

有沒有人有任何想法如何從opengl es界面中刪除圖像/紋理,以便我可以加載一個新的圖像?

注意:在Texture.c中,apple狀態「此函數的調用者負責刪除GL紋理對象。」我想這就是我所要求的。蘋果似乎沒有給出任何線索;-)

另請注意:我看到這個問題提出了很多地方,但沒有人似乎有一個答案。我相信其他人也會讚賞這個話題的一些幫助!非常感謝!

乾杯, 佈雷特

+0

這個問題可能是最好的發佈在[gamedev.stackexchange.com](http://gamedev.stackexchange.com/) – dotminic

回答

3

你在第二種情況下使用glDeleteTextures()不正確。該函數的第一個參數是要刪除多少個紋理,第二個參數是一組紋理名稱(或指向單個紋理名稱的指針)。你需要做類似如下:

glDeleteTextures(1, &textureName); 

哪裏textureName是在其創作中獲得的紋理的名字。它看起來像存儲在傳遞到loadTexture()的Image結構的texID組件中。

這並不能完全解釋你看到的崩潰,這看起來像是輸入圖像的內存管理問題(可能是在訪問CGImage組件之前被丟棄的自動釋放對象)。