Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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:OpenGL:glGenTextures在构造函数中不工作?_Java_Android_Opengl Es_Sdk - Fatal编程技术网

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
    时调用此函数,则没有问题
  • 但是,如果我在构造函数中调用它,除了
    glGenTextures()
    ,其他一切都可以工作-它会创建一个零值,而不是1..2..3等等
  • 在这两种情况下,都使用了全局
    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之外加载纹理!?我没有重初始化,除了纹理。。