OpenGL ES - glImageProcessing - 删除纹理

时间:2011-07-07 15:19:39

标签: iphone objective-c c opengl-es

我正在使用Apple的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纹理对象”。我想这就是我要问的怎么做。 Apple似乎没有提供任何线索; - )

还要注意:我看到这个问题提出了很多地方,但似乎没有人有答案。我相信其他人也会对这个话题有所帮助!非常感谢!

干杯, 布雷特

1 个答案:

答案 0 :(得分:3)

您在第二种情况下错误地使用glDeleteTextures()。该函数的第一个参数是您要删除的纹理数量,第二个是纹理名称数组(或指向单个纹理名称的指针)。您需要执行以下操作:

glDeleteTextures(1, &textureName);

其中textureName是在创建时获得的纹理的名称。看起来该值存储在传递给texID的Image结构的loadTexture()组件中。

这并不能完全解释您看到的崩溃,这似乎是输入图像的内存管理问题(可能是在您访问其CGImage组件之前被丢弃的自动释放对象)。