Android上的GL10和GLES10之间的区别

前端之家收集整理的这篇文章主要介绍了Android上的GL10和GLES10之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Android SDK的GLSurfaceView.Renderer接口为我提供了一个GL接口作为参数,其类型为GL10.此接口由一些私有内部jni包装类实现.但是还有类GLES10,其中所有GL方法都可用作静态方法.它们之间有重要区别吗?那么,如果我忽略onDrawFrame的gl参数,而是在任何地方使用GLES10的静态方法呢?

这是一个例子.而不是这样做:

void onDrawFrame(GL10 gl)
{
    drawSomething(gl);
}

void drawSomething(GL10 gl)
{
    gl.glLoadIdentity();
    ...
}

我能做到这一点:

void onDrawFrame(GL10 gl)
{
    drawSomething();
}

void drawSomething()
{
    GLES10.glLoadIdentity();
    ...
}

优点是我不必将GL上下文传递给所有被调用方法.但即使它工作(它的工作,我尝试过)我想知道是否有任何缺点和理由不这样做.

解决方法

我一直在寻找回答这个问题的源代码.据我所知,调用OpenGL实现的两种方式都转到相同的本机函数调用.但是,我的理解是,通过静态方法而不是通过虚拟方法分派,Java端访问速度更快(参见 http://developer.android.com/guide/practices/design/performance.html#prefer_static).

权衡的是,在访问仅在更高版本的OpenGL中可用的调用时,您会牺牲一定数量的类型检查.当您通过对象访问调用时,必须先进行强制转换,如果您使用的GL版本不支持该界面,则该强制转换将失败.当通过静态方法访问调用时,我认为将会发生OpenGL错误状态,除非您在GLSurfaceView上设置调试模式,否则可能更难检测.

现在,我正在通过静态方法访问所有内容,并且我将在GLSurfaceView中保持调试模式,直到代码稳定,此时我将其关闭.

>克里斯

猜你在找的Android相关文章