[英]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.