我正在使用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似乎没有提供任何线索; - )
还要注意:我看到这个问题提出了很多地方,但似乎没有人有答案。我相信其他人也会对这个话题有所帮助!非常感谢!
干杯, 布雷特
答案 0 :(得分:3)
您在第二种情况下错误地使用glDeleteTextures()
。该函数的第一个参数是您要删除的纹理数量,第二个是纹理名称数组(或指向单个纹理名称的指针)。您需要执行以下操作:
glDeleteTextures(1, &textureName);
其中textureName
是在创建时获得的纹理的名称。看起来该值存储在传递给texID
的Image结构的loadTexture()
组件中。
这并不能完全解释您看到的崩溃,这似乎是输入图像的内存管理问题(可能是在您访问其CGImage组件之前被丢弃的自动释放对象)。