首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Opengl-es绘制纹理

Opengl-es绘制纹理
EN

Stack Overflow用户
提问于 2014-09-19 15:21:29
回答 1查看 692关注 0票数 0

在opengl-es 2.0中,fbo能否呈现到一个纹理,使用一个比屏幕更大的纹理目标?如果是这样的话,是否可以画一个纹理四边形,填充fbo-纹理角到角?如果不可能,是否有可能在opengl-es中以另一种方式做到这一点?我有一些分层程序生成的图形在加载时,我想要组合成单一纹理,以节省性能在抽签时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-20 03:34:59

是的,完全正确。只要纹理有一种颜色可渲染的格式(在ES2.0中只有RGBA4RGB5_A1RGB565),它就可以用作渲染目标。取决于您的GPU的限制,这可以大大大于显示分辨率。

这意味着您主要受到最大纹理大小的限制。您可以使用glGetIntegerv(GL_MAX_TEXTURE_SIZE, ...)查询该值。

还有另一个限制在起作用。GL_MAX_VIEWPORT_DIMS定义了可以设置的最大视口大小。不能将其渲染到大于这些值的表面。

将这两者结合在一起,这将给出可以渲染到的纹理的最大大小:

代码语言:javascript
复制
GLint maxTexSize = 0;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize);

GLint maxViewportSize[2] = {0};
glGetIntegerv(GL_MAX_VIEWPORT_DIMS, maxViewportSize);

GLint maxRenderWidth = maxTexSize;
if (maxRenderWidth > maxViewportSize[0]) {
    maxRenderWidth = maxViewportSize[0];
}

GLint maxRenderHeight = maxTexSize;
if (maxRenderHeight > maxViewportSize[1]) {
    maxRenderHeight = maxViewportSize[1];
}

使用这些值,您可以创建大小为maxRenderWidth x maxRenderHeight的纹理,并将其用作FBO附件。请记住,在开始呈现之前,也要将视图设置为相同的大小。

我检查了两个不同的主要供应商的GPU的几个平板电脑的限制。两者的最大纹理大小和最大视口大小是相同的(其中一个是4096,另一个是8192 )。这并不让我感到惊讶,如果这是非常常见的,但它肯定不是由规范保证。

ES 2.0允许最大纹理大小为64。但是你会发现最近的任何事情的极限都要大得多。2048是你在任何合理的当前GPU上看到的低端,4096/8192是常见的。保证最大视口尺寸至少与显示器一样大。

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

https://stackoverflow.com/questions/25937282

复制
相关文章

相似问题

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