gpt4 book ai didi

android - 在 Android OpenGL ES 3.1 上设置帧缓冲区的深度/模板缓冲区

转载 作者:行者123 更新时间:2023-11-29 22:56:46 24 4
gpt4 key购买 nike

我正在尝试将深度和模板缓冲区附加到帧缓冲区。我这样做如下:

int[] bufferHandle = new int[1];
GLES31.glGenRenderbuffers(1, bufferHandle, 0); // glError = 0 (GL_NO_ERROR)
GLES31.glRenderbufferStorage(GLES31.GL_RENDERBUFFER, GLES31.GL_DEPTH24_STENCIL8, width, height); // glError = 1282 (GL_INVALID_OPERATION)
GLES31.glBindRenderbuffer(GLES31.GL_RENDERBUFFER, 0); // // glError = 0 (GL_NO_ERROR)
GLES31.glFramebufferRenderbuffer(GLES31.GL_FRAMEBUFFER, GLES31.GL_DEPTH_STENCIL_ATTACHMENT, GLES31.GL_RENDERBUFFER, bufferHandle); // glError = 1282 (GL_INVALID_OPERATION)

glRenderbufferStorageglFramebufferRenderbuffer 调用返回 1282 (GL_INVALID_OPERATION)。有什么我可能遗漏的想法吗?

最佳答案

错误发生,因为没有创建渲染缓冲区对象。

glGenRenderbuffers生成一个未使用的名称分别保留一个名称,可用于渲染缓冲区,但它不会创建或绑定(bind)渲染缓冲区对象。为此,您必须调用 glBindRenderbuffer :

int[] bufferHandle = new int[1];
GLES31.glGenRenderbuffers(1, bufferHandle, 0);
GLES31.glBindRenderbuffer(GLES31.GL_RENDERBUFFER, bufferHandle[0]);
GLES31.glRenderbufferStorage(GLES31.GL_RENDERBUFFER, GLES31.GL_DEPTH24_STENCIL8, width, height);

请注意,渲染缓冲区对象是在第一次调用glBindRenderbuffer时创建的,同时该对象绑定(bind)到指定的目标。
glRenderbufferStorage确定数据存储的格式和大小。

关于android - 在 Android OpenGL ES 3.1 上设置帧缓冲区的深度/模板缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57364917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com