OpenGL ES - 在屏幕上渲染150,000个纹理的最佳方式

时间:2014-04-07 15:56:55

标签: android opengl-es textures render

我有一个Android应用程序,它呈现2D地形。 地形由许多地面像素组成。尺寸为480 x 300(地形像素)。

像素呈现为纹理,480 * 300 =几乎150,000,需要5秒 一个新的强大的设备绘制。地形有时不是静态的 使用FBO和渲染到纹理方法只能部分帮助。

简而言之 - 什么是渲染大约150,000个极小纹理(纯色和无细节)的最佳方法?

以下是地形的一小部分: http://imageshack.com/a/img822/3775/8ayq.png

1 个答案:

答案 0 :(得分:0)

在没有代码的情况下很难分辨出真正的瓶颈是什么,但是因为你的问题是“在屏幕上渲染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来电。