繁体   English   中英

正确删除纹理

[英]properly delete texture

我在运行opengl es 1.1的android上完成纹理后试图删除它

在Galaxy S(手机)和Droid X上,一切似乎都可以正常工作。 实际上,它工作得很好,完成处理后,我似乎甚至不需要删除纹理,我似乎永远不会用完内存...

在另一台设备(目前不允许命名)上,glDeleteTextures似乎无法正常工作。 加载6个大纹理(以及许多其他小纹理)后,无法加载新纹理,它们只会变成白色。

在一个联系上,我有一个报告,报告变成白色并抛出以下错误日志

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):emlLockWindowSurface:失败映射内存为fd = 37 offs = 4796416 E / Adreno200-EGL(632)映射内存:eglLockWindowSurface:无法为fd = 38 offs = 1662976映射内存

我距离OpenGL专家还很远,但是:a)我找不到完整的示例来创建和删除纹理以确保我的代码正确b)完全相同的方法可以完美地在iPhone上运行

我唯一能想到的是我正在使用大量线程,因此我的绑定可能逃避了正确的线程,或者以某种方式未正确计时。 我目前没有任何硬件有此错误,因此在我自己购买另一台设备之前,我无法测试该理论。

您是否需要在删除纹理之前做任何特殊的事情,还是应该仅将glDeleteTextures()滑入流程中的任何位置,并且它应该可以工作?

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

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

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

不知道它是否相关,但是我遇到问题的设备以线性顺序创建TextureID(例如1、2、3、4,然后我删除2,它将创建2、5、6等),其中没有问题的S似乎可以创建随机的纹理ID。 可能表明芯片组如何处理纹理? 只是一个猜测。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM