首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于android操作系统的操作系统和纹理

关于android操作系统的操作系统和纹理
EN

Stack Overflow用户
提问于 2014-07-25 10:37:20
回答 1查看 1.2K关注 0票数 1

我们知道,在OpenGL ES中,安卓上的类Renderer有3 function:onDrawFrame, onSurfaceChanged, onSurfaceCreated.,我们可以在和onDrawFrame中加载纹理。我想知道我能在"Renderer".Likely,之前加载纹理吗?我有一个名为"Map“的类,我能在创建"GLSurfaceView”之前在"Map"中加载图像纹理吗?或者可以在函数"onSurfaceCreated"和"onDrawFrame".之前加载图像纹理。

如果有人知道,请帮帮我。

谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2014-07-26 02:50:25

不容易。但是(几乎)任何事情都是可能的。

这里需要理解的关键概念是,OpenGL调用在当前上下文上操作。在您进行任何OpenGL调用之前,您需要创建一个上下文,并使其成为当前的。当前的上下文适用于线程,因此不同的线程可以具有不同的当前上下文。我认为如果您尝试在没有当前上下文的情况下进行OpenGL调用,它并没有明确定义,但是它肯定没有任何有用的东西。最有可能的结果是什么都没有,或者是一场崩盘。

GLSurfaceView处理为您设置上下文的所有复杂性。它创建一个独立于主(UI)线程运行的呈现线程,创建上下文,并使该上下文在呈现线程中保持当前状态。一旦调用了GLSurfaceView.Renderer实现上的方法,您就已经有了当前的上下文,并且已经准备好进行OpenGL调用了。

现在,如果您想在所有的OpenGL魔术发生之前进行GLSurfaceView调用,那么您必须自己做很多事情。您可以调用EGL14类的方法来创建自己的上下文,并使其成为当前的。虽然有点痛苦,但并不是很难。我手头上没有完整的代码,但是您应该能够找到示例,或者从文档中找到它。您将使用诸如eglChooseConfig()eglCreateContext()eglMakeCurrent()等方法,并且可能会在路上使用更多的方法。

一旦你完成了这个任务,你就可以通过OpenGL调用创建纹理等等,但不幸的是,这还不是全部的故事。

一旦您的GLSurfaceView出现,它将像往常一样创建自己的上下文。不同的OpenGL上下文可以共享资源(比如纹理),但默认情况下不会这样做。由于GLSurfaceView不了解您已经创建的上下文,所以它不会与您的上下文共享资源。

要启用资源共享,您必须干预GLSurfaceView创建上下文。您可以使用setEGLContextFactory方法来完成这一任务。这允许您为GLSurfaceView连接您自己的上下文创建,在这里您现在可以创建一个上下文,该上下文与您先前创建的上下文共享资源,并用于您的纹理加载。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24953805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档