1

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

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)

和调用返回 1282 (GL_INVALID_OPERATION) glRenderbufferStorageglFramebufferRenderbuffer有什么想法我可能会错过吗?

4

1 回答 1

1

发生错误是因为未创建渲染缓冲区对象。

glGenRenderbuffers生成一个未使用的名称分别保留一个名称,该名称可用于渲染缓冲区,但它不会创建或绑定渲染缓冲区对象。为此,您必须致电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第一次调用时创建的,除了对象绑定到指定的目标。
glRenderbufferStorage建立数据存储的格式和大小。

于 2019-08-05T19:27:37.400 回答