Java 关于android上的opengles和纹理
正如我们所知,在OpenGL ES中,android上的类Java 关于android上的opengles和纹理,java,android,textures,opengl-es-2.0,Java,Android,Textures,Opengl Es 2.0,正如我们所知,在OpenGL ES中,android上的类渲染器有3个函数:onDrawFrame、onSurfaceChanged、onSurfaceCreated。 我们可以将纹理加载到创建的曲面上的和绘制框架上的中。 我想知道我可以在“渲染器”之前加载纹理吗?很可能,我有一个名为“Map”的类,我可以在创建“GLSurfaceView”之前在“Map”中加载图像纹理吗。或者我可以在函数“onSurfaceCreated”和“onDrawFrame”之前加载图像纹理 如果有人知道,请帮助我
渲染器有3个函数:onDrawFrame、onSurfaceChanged、onSurfaceCreated。
我们可以将纹理加载到创建的曲面上的和绘制框架上的中。
我想知道我可以在“渲染器”之前加载纹理吗?很可能,我有一个名为“Map”的类,我可以在创建“GLSurfaceView”之前在“Map”中加载图像纹理吗。或者我可以在函数“onSurfaceCreated”和“onDrawFrame”之前加载图像纹理
如果有人知道,请帮助我
谢谢 不容易。但是(几乎)任何事情都是可能的
这里要理解的关键概念是OpenGL调用在当前上下文上运行。在进行任何OpenGL调用之前,您需要创建一个上下文,并将其设置为当前。当前上下文适用于线程,因此不同的线程可以具有不同的当前上下文。我不认为如果在没有当前上下文的情况下尝试进行OpenGL调用会发生什么,这是一个明确的定义,但它肯定没有任何用处。最有可能的结果是什么都没有,或者崩溃
GLSurfaceView
处理为您设置上下文的所有复杂性。它创建一个独立于主(UI)线程运行的渲染线程,创建一个上下文,并使该上下文在渲染线程中成为当前上下文。一旦调用了GLSurfaceView.Renderer
实现中的方法,您就已经有了当前上下文,并且可以进行OpenGL调用了
现在,如果你想在所有这些GLSurfaceView
magic发生之前调用OpenGL,你必须自己做很多。您可以调用类的方法来创建自己的上下文,并使其成为当前上下文。这有点痛,但不是很难。我手头没有完整的代码,但您应该能够找到示例,或者从文档中找到它。您将使用类似于eglChooseConfig()
、eglCreateContext()
、eglMakeCurrent()
,以及其他一些方法
完成后,您可以调用OpenGL创建纹理等,但不幸的是,这还不是全部
一旦您的GLSurfaceView
生效,它将像往常一样创建自己的上下文。不同的OpenGL上下文可以共享资源(如纹理),但默认情况下不会这样做。由于GLSurfaceView
对您已经创建的上下文一无所知,因此它不会与您的上下文共享资源
要启用资源共享,您必须通过GLSurfaceView
干预上下文的创建。可以使用setEGLContextFactory
方法执行此操作。这允许您为GLSurfaceView
连接您自己的上下文创建,您现在可以在其中创建一个上下文,与您先前创建的上下文共享资源,并用于纹理加载。不容易。但是(几乎)任何事情都是可能的
这里要理解的关键概念是OpenGL调用在当前上下文上运行。在进行任何OpenGL调用之前,您需要创建一个上下文,并将其设置为当前。当前上下文适用于线程,因此不同的线程可以具有不同的当前上下文。我不认为如果在没有当前上下文的情况下尝试进行OpenGL调用会发生什么,这是一个明确的定义,但它肯定没有任何用处。最有可能的结果是什么都没有,或者崩溃
GLSurfaceView
处理为您设置上下文的所有复杂性。它创建一个独立于主(UI)线程运行的渲染线程,创建一个上下文,并使该上下文在渲染线程中成为当前上下文。一旦调用了GLSurfaceView.Renderer
实现中的方法,您就已经有了当前上下文,并且可以进行OpenGL调用了
现在,如果你想在所有这些GLSurfaceView
magic发生之前调用OpenGL,你必须自己做很多。您可以调用类的方法来创建自己的上下文,并使其成为当前上下文。这有点痛,但不是很难。我手头没有完整的代码,但您应该能够找到示例,或者从文档中找到它。您将使用类似于eglChooseConfig()
、eglCreateContext()
、eglMakeCurrent()
,以及其他一些方法
完成后,您可以调用OpenGL创建纹理等,但不幸的是,这还不是全部
一旦您的GLSurfaceView
生效,它将像往常一样创建自己的上下文。不同的OpenGL上下文可以共享资源(如纹理),但默认情况下不会这样做。由于GLSurfaceView
对您已经创建的上下文一无所知,因此它不会与您的上下文共享资源
要启用资源共享,您必须通过GLSurfaceView
干预上下文的创建。可以使用setEGLContextFactory
方法执行此操作。这允许您为GLSurfaceView
连接自己的上下文创建,现在您可以在其中创建一个上下文,该上下文与先前创建的上下文共享资源,并用于纹理加载