Android 正确删除纹理

Android 正确删除纹理,android,opengl-es,Android,Opengl Es,当我在运行opengl es 1.1的android上使用完纹理后,我尝试删除它 在Galaxy S(手机)和Droid X上,一切似乎都很正常。事实上,它工作得太好了,我甚至不需要删除纹理当我完成它,我似乎从来没有用完内存 在另一台设备上(目前不允许命名),glDeleteTextures似乎不起作用。在我加载了6个大纹理(以及其他一些小纹理)之后,没有新的纹理可以加载,它们只是显示为白色 在NexusOne上,我有一个报告,它变为白色并抛出以下错误日志 E/Adreno200 EGL(632

当我在运行opengl es 1.1的android上使用完纹理后,我尝试删除它

在Galaxy S(手机)和Droid X上,一切似乎都很正常。事实上,它工作得太好了,我甚至不需要删除纹理当我完成它,我似乎从来没有用完内存

在另一台设备上(目前不允许命名),glDeleteTextures似乎不起作用。在我加载了6个大纹理(以及其他一些小纹理)之后,没有新的纹理可以加载,它们只是显示为白色

在NexusOne上,我有一个报告,它变为白色并抛出以下错误日志

E/Adreno200 EGL(632):eglLockWindowSurface:未能映射fd=37 offs=4796416的内存 E/Adreno200 EGL(632):eglLockWindowSurface:未能映射fd=38 offs=1662976的内存 E/Adreno200 EGL(632):eglLockWindowSurface:未能映射fd=37 offs=4796416的内存 E/Adreno200 EGL(632):eglLockWindowSurface:未能映射fd=38 offs=1662976的内存 E/Adreno200 EGL(632):eglLockWindowSurface:未能映射fd=37 offs=4796416的内存 E/Adreno200 EGL(632):eglLockWindowSurface:未能映射fd=38 offs=1662976的内存 E/Adreno200 EGL(632):eglLockWindowSurface:未能映射fd=37 offs=4796416的内存 E/Adreno200 EGL(632):eglLockWindowSurface:未能映射fd=38 offs=1662976的内存

我远非OpenGL专家,但: a) 我找不到一个完整的例子来创建和删除纹理,以确保我的代码是正确的 b) 完全相同的方法在iPhone上也能完美地工作

我能想到的唯一一件事是,我正在使用大量线程,因此可能我的解绑正在脱离正确的线程,或者在某种程度上没有正确计时。我目前没有任何硬件有错误,所以我无法测试这个理论,直到我自己得到另一个设备

在删除纹理之前,您是否需要执行任何特殊操作,或者您是否应该在流中的任何位置插入一个glDeleteTextures(),并且它应该可以工作


抱歉没有发布任何示例代码,我目前对此有一些限制。

我似乎已经解决了这个问题。某些设备(不确定是图形芯片组还是其他设备)显然只能从图形上下文线程中删除纹理。我的纹理在对我的主纹理变量的清理调用中被删除,显然没有在正确的位置执行。现在,我的glDeleteTexuters()在GLSurface下的事件中被qued,因此它在正确的上下文中的正确线程中执行


不确定是否相关,但我的设备出现问题时会以线性顺序创建textureID(例如,1、2、3、4,然后我删除2,它将创建2、5、6等),因为没有问题的galaxy s似乎会创建随机的纹理ID。可能是芯片组如何处理纹理的指示?只是猜测。

我似乎已经解决了这个问题。某些设备(不确定是图形芯片组还是其他设备)显然只能从图形上下文线程中删除纹理。我的纹理在对我的主纹理变量的清理调用中被删除,显然没有在正确的位置执行。现在,我的glDeleteTexuters()在GLSurface下的事件中被qued,因此它在正确的上下文中的正确线程中执行


不确定是否相关,但我的设备出现问题时会以线性顺序创建textureID(例如,1、2、3、4,然后我删除2,它将创建2、5、6等),因为没有问题的galaxy s似乎会创建随机的纹理ID。可能是芯片组如何处理纹理的指示?只是一个猜测。

据我所知,在创建设备时,所有OpenGL函数必须在同一线程中调用。OpenGL和OpenGL ES都适用。

据我所知,在创建设备时,所有OpenGL函数必须在同一线程中调用。OpenGL和OpenGL ES都适用。

尝试隔离问题,例如,创建一个加载N个纹理的简单测试应用程序,并在多个设备上运行。如果你可以在一个简单的测试应用程序中重现这个问题,那么也许你可以发布这个问题的代码,但是我当时没有访问导致这个问题的设备,所以我无法对这个问题进行采样。现在解决问题,请参见下文。感谢您的回复!尝试隔离问题,例如创建一个加载N个纹理的简单测试应用程序,并在多个设备上运行。如果你可以在一个简单的测试应用程序中重现这个问题,那么也许你可以发布这个问题的代码,但是我当时没有访问导致这个问题的设备,所以我无法对这个问题进行采样。现在解决问题,请参见下文。感谢您的回复!我也有同样的问题。但这并非总是发生。我发现,当系统运行一段时间后,可能会发生这种情况。。。。(5分钟)。。...左右我会继续。看,我也有同样的问题。但这并非总是发生。我发现,当系统运行一段时间后,可能会发生这种情况。。。。(5分钟)。。...左右我会继续。看看