GL: Delete frame buffers after use.

Before, we used to never call glDeleteFramebuffers, which could
in theory lead to leaks in the number of frame buffers
available and make releasing the GL context more expensive.

PiperOrigin-RevId: 514387847
This commit is contained in:
huangdarwin 2023-03-06 14:10:15 +00:00 committed by Rohit Singh
parent db6064288c
commit 67e359c867
3 changed files with 11 additions and 0 deletions

View File

@ -644,6 +644,14 @@ public final class GlUtil {
return fboId[0];
}
/** Deletes a framebuffer. */
public static void deleteFbo(int fboId) throws GlException {
int[] fboIdArray = new int[1];
fboIdArray[0] = fboId;
GLES20.glDeleteFramebuffers(/* n= */ 1, fboIdArray, /* offset= */ 0);
checkGlError();
}
/**
* Throws a {@link GlException} with the given message if {@code expression} evaluates to {@code
* false}.

View File

@ -205,6 +205,7 @@ import java.util.concurrent.Executor;
while (allTextures.hasNext()) {
TextureInfo textureInfo = allTextures.next();
GlUtil.deleteTexture(textureInfo.texId);
GlUtil.deleteFbo(textureInfo.fboId);
}
freeOutputTextures.clear();
inUseOutputTextures.clear();

View File

@ -154,6 +154,7 @@ public abstract class SingleFrameGlShaderProgram implements GlShaderProgram {
|| outputSize.getHeight() != outputTexture.height) {
if (outputTexture != null) {
GlUtil.deleteTexture(outputTexture.texId);
GlUtil.deleteFbo(outputTexture.fboId);
}
int outputTexId = GlUtil.createTexture(outputSize.getWidth(), outputSize.getHeight(), useHdr);
int outputFboId = GlUtil.createFboForTexture(outputTexId);
@ -187,6 +188,7 @@ public abstract class SingleFrameGlShaderProgram implements GlShaderProgram {
if (outputTexture != null) {
try {
GlUtil.deleteTexture(outputTexture.texId);
GlUtil.deleteFbo(outputTexture.fboId);
} catch (GlUtil.GlException e) {
throw new VideoFrameProcessingException(e);
}