私はAppleのGLImageProcessingの例で働いています - 画像にさまざまなフィルタを適用します。私はGLImageProcessing Multiple Filters?の後ろに2つのフィルターで動作させるようにしました。OpenGL ES:FBO/Texture Leaksメモリ
アップルのオリジナルの例は素晴らしい作品で、メモリがリークしません。
上記の質問のコードを使用すると、10〜20秒でiPhoneのメモリがすべて消費され、メモリ警告が表示され、最終的にアプリがクラッシュします。
は、私はそれが(FBOさんを)バッファオブジェクトをaditionalテクスチャを作成し、フレームに関連しています知っているが、私は正しく(およびそのメモリ)を管理するかどうかはわかりません
コード:
void drawGL(int wide, int high, float contrastVal,float brightnessVal)
{
//INIT
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0, wide, 0, high, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef(wide, high, 1);
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, (GLint *)&SystemFBO);
// Create the texture and the FBO the will hold the result of applying the first filter
glGenTextures(1, &ResultTexture);
glBindTexture(GL_TEXTURE_2D, ResultTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, wide, high, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glGenFramebuffersOES(1, &ResultTextureFBO);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, ResultTextureFBO);
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, ResultTexture, 0);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, ResultTextureFBO);
glBindTexture(GL_TEXTURE_2D, Input.texID);
glViewport(0, 0, wide, high);
brightness(flipquad, contrastVal);
glCheckError();;
glBindFramebufferOES(GL_FRAMEBUFFER_OES, SystemFBO);
glBindTexture(GL_TEXTURE_2D, ResultTexture);
glViewport(0, 0, wide, high);
contrast(fullquad,brightnessVal);
glCheckError();
}
これを行うより良い方法はありますか?