Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于android上的opengles和纹理_Java_Android_Textures_Opengl Es 2.0 - Fatal编程技术网

Java 关于android上的opengles和纹理

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”之前加载图像纹理 如果有人知道,请帮助我

正如我们所知,在OpenGL ES中,android上的类
渲染器有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
连接自己的上下文创建,现在您可以在其中创建一个上下文,该上下文与先前创建的上下文共享资源,并用于纹理加载