首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用OpenGL渲染到帧缓冲区而不显示在屏幕上?

如何使用OpenGL渲染到帧缓冲区而不显示在屏幕上?
EN

Stack Overflow用户
提问于 2011-10-20 23:59:47
回答 2查看 3.1K关注 0票数 2

我知道可以离线渲染而不在屏幕上显示它。

也许该怎么做?

创建一个不可见的窗口,然后绘制。

渲染时可以使用特定的fbo吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-21 00:04:38

可以使用以下内容创建帧缓冲区对象:

代码语言:javascript
运行
复制
GLint fbo, tex; // "handles" for framebuffer and it's texture
glGenFramebuffersEXT(1, &fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);

// setup texture for colour attachment
glGenTextures(1, &tex);
glEnable(GL_TEXTURE_2D);
glDisable(GL_COLOR_MATERIAL);
glBindTexture(GL_TEXTURE_2D, tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// set a size fotr the texture, but not any initial data
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, fbo_resX, fbo_resY, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
// You might want a depth attachment here too perhaps?
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tex, 0);

const GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
assert(status == GL_FRAMEBUFFER_COMPLETE_EXT);

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

然后您可以像这样使用它:

代码语言:javascript
运行
复制
// specify which FBO to use
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
// glDraw...

// return to the default
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

您可以根据需要创建多个帧缓冲区,并根据需要绑定到这些帧缓冲区。(给予或接受)。您需要一个有效的OpenGL上下文才能使用它,这通常相当于在大多数平台上创建一个窗口,但您不需要在该窗口中绘制任何内容。

票数 6
EN

Stack Overflow用户

发布于 2014-09-11 17:24:31

您可以使用Simple DirectMedia Layer (SDL)来实现这一点。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7838752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档