在opengl-es 2.0中,fbo可以渲染为纹理,使用比屏幕大的纹理目标?如果是这样,是否有可能绘制纹理四边形,填补fbo纹理角落?如果不可能的话,是否有可能以另一种方式在opengl-es中做到这一点?我在加载时有一些分层的程序生成的图形,我想将它们组合成单个纹理,以便在绘制时节省性能。Opengl-es绘制纹理
0
A
回答
2
是的,绝对。只要纹理具有可呈现颜色的格式(在ES 2.0中只有RGBA4
,RGB5_A1
和RGB565
),它可以用作渲染目标。根据GPU的限制,这可能会大大超出显示分辨率。
这意味着您主要受最大纹理大小的限制。您可以使用glGetIntegerv(GL_MAX_TEXTURE_SIZE, ...)
查询该值。
还有另外一个限制。 GL_MAX_VIEWPORT_DIMS
定义您可以设置的最大视口大小。您无法渲染到大于这些值的表面。
把他们俩撮合在一起,这将给你可以渲染到纹理的最大尺寸:
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很常见。最大视口尺寸保证至少与显示屏一样大。
相关问题
- 1. Android OpenGLES渲染到纹理
- 2. iphone OpenGLES视频纹理
- 3. GLKView和OpenGLES 1.1纹理?
- 4. opengles纹理单元行为
- 5. OpenGLES 2.0纹理渲染
- 6. 在opengles中重构纹理
- 7. Threejs绘制纹理
- 8. 纹理不绘制
- 9. DirectX 10将纹理绘制到纹理
- 10. Android绘制纹理扩展绘制白色纹理
- 11. 如何使用Mono for Android在OpenGLES中正确加载和绘制纹理
- 12. Java openGL绘制纹理
- 13. OpenGL纹理没有绘制?
- 14. TRIANGLE_FAN圆不绘制纹理
- 15. LibGDX纹理可绘制?
- 16. AndEngine纹理可绘制
- 17. Open GLES 2.0绘制纹理
- 18. LibGDX纹理不会绘制
- 19. OpenGL绘制多个纹理
- 20. 绘制纹理三角形
- 21. 使用D3D9绘制纹理
- 22. 从Opengles 1.0到Opengles 2.0的Android移植,纹理?
- 23. OpenglES 2.0 PNG阿尔法纹理重叠
- 24. 关于OpenGLES中的纹理开关
- 25. 在android中使用opengles切换纹理
- 26. OpenglES阿尔法纹理深度
- 27. OpenGLES:如何找到纹理大小
- 28. OpenGL:绘制FBO时的纹理处理
- 29. 确定Android OpenGLES中的最大/最小纹理大小限制
- 30. FBO:在绘制渲染纹理时渲染纹理,错误的纹理映射