【问题标题】:OpenGL ES - best way to render 150,000 textures on the screenOpenGL ES - 在屏幕上渲染 150,000 个纹理的最佳方式
【发布时间】:2014-05-19 23:39:15
【问题描述】:
我有一个渲染 2D 地形的 android 应用程序。
地形由许多地面“像素”组成,尺寸为 480 x 300(地形像素)。
像素被渲染为纹理,480*300 = 几乎 150,000,需要 5 秒
用于绘制新的强大设备。地形有时不是静态的,所以
使用 FBO 和 render-to-texture 方法只能部分帮助。
简而言之 - 渲染大约 150,000 个极小纹理(纯色且没有细节)的最佳方法是什么?
这是地形的一小部分:
http://imageshack.com/a/img822/3775/8ayq.png
【问题讨论】:
标签:
android
opengl-es
textures
render
【解决方案1】:
如果没有代码,很难说出真正的瓶颈是什么,但由于您的问题是“在屏幕上渲染 150,000 个纯色纹理的最佳方式是什么,所以答案是“不使用纹理”。
在我看来,最好的方法是创建一个新的颜色向量顶点属性数组,
并像这样使用它
//vertex shader
attribute vec4 vertexCoords;
attribute vec4 vertexColor;
varying vec4 fragmentColor;
void main()
{
fragmentColor = vertexColor;
gl_Position = vertexCoords;
}
//fragment shader
varying lowp vec4 fragmentColor;
void main()
{
gl_FragColor = fragmentColor;
}
通过这种方式,您可以在一次绘制调用中绘制整个背景,并且只需调用glBufferSubData 即可更改背景的外观。