OpenGL glCheckFramebufferStatus

常见结果

一般定义与glversion.h文件中,version为版本号,如gl2.h, gl3.h,gl31.h, gl32.h等。
常见定义如下:

#define GL_FRAMEBUFFER_COMPLETE           0x8CD5
#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9

/// gl 3 以后才有
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
OpenGL 中,可以使用帧缓冲对象(Framebuffer Object,FBO)和纹理对象(Texture Object)来实现直接复制屏幕显示。具体步骤如下: 1. 创建一个 FBO,并将其绑定到当前上下文中。 2. 创建一个纹理对象,并将其绑定到 FBO 上的颜色附件。 3. 设置视口,将其大小设置为屏幕的大小。 4. 渲染场景到 FBO 中的纹理对象上。 5. 解绑 FBO 和纹理对象。 6. 使用 glBlitFramebuffer 函数将 FBO 中的纹理对象复制到默认帧缓冲区中。 7. 最后,交换缓冲区显示图像。 以下是示例代码: ``` // 创建帧缓冲对象 GLuint fbo; glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); // 创建纹理对象 GLuint tex; glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, screenWidth, screenHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0); // 检查帧缓冲对象状态 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { printf("Error: Framebuffer is not complete.\n"); return; } // 渲染场景 glViewport(0, 0, screenWidth, screenHeight); // 在这里进行场景渲染 // 解绑帧缓冲对象和纹理对象 glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindTexture(GL_TEXTURE_2D, 0); // 复制纹理对象到默认帧缓冲区 glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBlitFramebuffer(0, 0, screenWidth, screenHeight, 0, 0, screenWidth, screenHeight, GL_COLOR_BUFFER_BIT, GL_NEAREST); // 交换缓冲区 glfwSwapBuffers(window); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值