OpenGL绘图调用的速度

OpenGL绘图调用的速度,opengl,Opengl,我想在OpenGL中创建一个带有纹理的lightning。为此,我必须画一些三角形,这些三角形连接在一个X | Y点上,因此三角形从最后一个端点开始。这就是为什么我想连续绘制矩形,现在我的问题是: 哪个抽签电话更长?第一个有6分要打。在第二次调用中,我调用了函数两次,每次调用3个点 gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 6); // Both recatangles /or this here gl.glDrawArrays(GL10.GL_LINE_

我想在OpenGL中创建一个带有纹理的lightning。为此,我必须画一些三角形,这些三角形连接在一个X | Y点上,因此三角形从最后一个端点开始。这就是为什么我想连续绘制矩形,现在我的问题是:

哪个抽签电话更长?第一个有6分要打。在第二次调用中,我调用了函数两次,每次调用3个点

gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 6);  // Both recatangles

/or this here
gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 3);  // One rectangle
gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 3);  // One rectangle
打第一个电话快多了还是没关系

编辑:生成随机点的函数,称为每帧:

public void update()
{
    for(int i = 0; i < STEPS; i += 3)
    {
        float rnd = random(); // creates random number

        if(points[i] + rnd < startX + 5 && points[i] + rnd > startX - 5)
        {
            points[i] += rnd;
        }
    }

    vertexBuffer.clear();   
    vertexBuffer.put(points);
    vertexBuffer.position(0);
}
public void update()
{
对于(int i=0;istartX-5)
{
点[i]+=rnd;
}
}
vertexBuffer.clear();
vertexBuffer.put(点);
顶点缓冲区位置(0);
}

这对性能有影响吗?或者我如何才能做得更好?

一个电话会更便宜。这对两个来说并不重要,但如果你开始画很多原语,它会有回报的。这在它目前的形式中不是一个真正的问题。为什么不直接分析它呢?API调用越少越好。单独绘制这些东西并没有什么真正的好处,它只会增加额外的开销。太多的API调用几乎不起作用,实际上会导致限制因素从CPU/GPU的能力转移到像API开销这样愚蠢的事情上。在过去,API调用和顶点/多边形之间的映射是1:1,但现在API已经发展到允许您在一个调用中执行多个操作的地步-您需要利用现代设计来获得良好的性能。好的,谢谢。那么如何操纵顶点呢?我在问题中添加了一个
更新函数
,每帧调用该函数生成一个随机闪电。我改变顶点,用上面的函数画出新生成的点。这对性能有影响吗?或者如何做得更好?更好的方法是使用着色器。您可能可以对某些可变属性(例如时间)使用噪波函数来生成足够“随机”的顶点属性。但是如果你还没有达到这个水平,那么你可以继续用你现在的方式去做。。。请记住,尝试这样做,只需调用
glBufferData(…)
glBufferSubData(…)
一次,正如我在前面的评论中所讨论的那样-用更少的资源做更多的事。