Java Android:OpenGL:glGenTextures在构造函数中不工作?
有人能告诉我为什么Java Android:OpenGL:glGenTextures在构造函数中不工作?,java,android,opengl-es,sdk,Java,Android,Opengl Es,Sdk,有人能告诉我为什么glGenTextures()在我的构造函数中不起作用吗 以下是如何设置我的项目: 使用自定义渲染器,在当前活动阶段上调用.draw 创建阶段时,它将自身(其构造函数的结束行)分配给staticGlobal.activeStage 现在,渲染器在当前活动的阶段上调用.draw,该阶段的引用保存在Global.activeStage中 在stage中,我有一个函数,可以加载stage中需要的所有纹理 如果我在第一次调用.draw时调用此函数,则没有问题 但是,如果我在构造函数中
glGenTextures()
在我的构造函数中不起作用吗
以下是如何设置我的项目:
- 使用自定义渲染器,在当前活动阶段上调用
.draw
- 创建阶段时,它将自身(其构造函数的结束行)分配给static
Global.activeStage
- 现在,渲染器在当前活动的阶段上调用
,该阶段的引用保存在.draw
中Global.activeStage
- 在stage中,我有一个函数,可以加载stage中需要的所有纹理
- 如果我在第一次调用
时调用此函数,则没有问题.draw
- 但是,如果我在构造函数中调用它,除了
,其他一切都可以工作-它会创建一个零值,而不是1..2..3等等glGenTextures()
- 在这两种情况下,都使用了全局
引用,而不是GL10
获取的引用,因此这不是问题所在.draw
onCreateSurface
结束后在线程中创建的
如果你说哪些部分是相关的,我可以发布一些代码。我很确定你必须在与
openGL
相关的线程上运行所有openGL
操作。这就是为什么从渲染器(在GL线程上运行)调用的draw()
方法而不是从构造函数(如您所说在另一个线程上运行)调用时,它可以工作的原因。我确信您必须在与openGL
相关的线程上运行所有openGL
操作。这就是为什么从渲染器(在GL线程上运行)调用的draw()
方法,而不是从构造函数(如您所说在另一个线程上运行)调用时,它可以工作的原因。有道理,但打破了我的整个想法。。有没有一种方法可以将GL线程上下文传递给Stage线程内部调用的函数,比如在调用构造函数之后?我真的需要在一个线程内完成所有的纹理工作,而不依赖于渲染器对.draw()
的调用。最后的目标是在加载新阶段的所有纹理和内容的同时,draw()
a“加载”图像。这就是为什么我需要它在一个线程中,否则它会一直冻结,直到所有的工作都完成。最简单的方法是,如果你有一个GLSurfaceView
,你可以用Runnable
调用它的queueEvent()
-方法:实际上它不起作用,将它添加到GL线程中只会使它在工作时挂起。这相当于在没有任何线程的情况下直接添加代码,在下一个.draw()
之前等待完成执行。你应该在不同的线程上运行尽可能多的加载,然后在你的ui/gl线程上做最后的工作(比如生成纹理)。这就是重点,我的加载实际上是加载纹理并在gl中绑定它们,我如何在gl之外加载纹理!?我没有重初始化,除了纹理..有意义,但打破了我的整个想法。。有没有一种方法可以将GL线程上下文传递给Stage线程内部调用的函数,比如在调用构造函数之后?我真的需要在一个线程内完成所有的纹理工作,而不依赖于渲染器对.draw()
的调用。最后的目标是在加载新阶段的所有纹理和内容的同时,draw()
a“加载”图像。这就是为什么我需要它在一个线程中,否则它会一直冻结,直到所有的工作都完成。最简单的方法是,如果你有一个GLSurfaceView
,你可以用Runnable
调用它的queueEvent()
-方法:实际上它不起作用,将它添加到GL线程中只会使它在工作时挂起。这相当于在没有任何线程的情况下直接添加代码,在下一个.draw()
之前等待完成执行。你应该在不同的线程上运行尽可能多的加载,然后在你的ui/gl线程上做最后的工作(比如生成纹理)。这就是重点,我的加载实际上是加载纹理并在gl中绑定它们,我如何在gl之外加载纹理!?我没有重初始化,除了纹理。。