2011-07-07 67 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组件之前被丢弃的自动释放对象)。