【问题标题】: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 即可更改背景的外观。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      相关资源
      最近更新 更多