1

我有一个旧设备的这个问题,它有一个我仍然喜欢支持的 android 版本(2.3.5),纹理有时可以工作。

我从游戏开始就在内存中加载了 5 个纹理(不会更改也不会重新加载)。教程中的一切都很好,但在游戏中却没有。渲染过程和对象加载完全相同,它们在我的新设备(Nexus 4)上完美运行,适用于所有游戏模式和教程。

我加载了 4 个 1024x1024 的纹理和 1 个 512x512 的纹理。不能正常工作的纹理是最后加载和绑定的纹理。所以这可能是一个内存问题,但我怎么能找到这个呢?OpenGL 错误函数在游戏过程中不会显示任何错误,即使纹理未正确显示。

  • 两种设备都支持 OpenGL ES 2.0。
  • 第三个和第四个纹理在游戏的教程部分确实有效,因此设备至少能够加载前四个纹理,这应该表明问题不是纹理数量。
  • 根据规格,旧设备支持 1024x1024 纹理。
  • 将所有纹理更改为 512x512 显示相同的问题,如果内存是一个问题,这应该可以工作,因为您可以在 1 个 1024x1024 纹理中保存其中的 4 个纹理,这已经在所有设备上完美运行。(1x512 和 1x1024 内存空间等于 5x512 空间)
  • 它在 Nexus 4 上完美运行,因此不太可能出现编码错误。
  • OpenGL 不会在加载/设置/渲染调用中使用 openglerror 函数调用为我提供某种错误,因此这应该意味着所有 OpenGL 的东西都很好。
  • 我的纹理池的加载、对象(池)的创建和加载、渲染功能(包括着色器)在所有模式下都是完全相同的代码,因此不会影响差异。我已经调试了使用 OpenGL 渲染的所有对象,以查看某些数据是否损坏或不正确,但是当我将其传递给渲染管道时,一切都是正确的。此代码将整数“3”作为纹理 ID 传递给渲染代码中的着色器。在“3”加载的纹理应该是我需要的纹理,但是在 OpenGL 的某个地方它决定使用纹理“1”而不是在那些时刻更高,但是在教程中它将相同的数据放入 OpenGL,但随后 OpenGL 决定使用传递和预期的“3”纹理 ID...

由于处理游戏图形部分的所有加载/渲染等的引擎的复杂性,发布代码是一个问题。发布我的游戏/引擎的所有代码似乎有点矫枉过正:s 所以如果需要某些部分来解决这个问题,我会发布它。

我基本上没有想法尝试解决这个问题:( 有没有人对我可以尝试的方法或解决方案有任何想法或建议?

4

1 回答 1

1

修复了这个(似乎也是我的其他帖子)问题,这是 GPU 驱动程序软件中的一个错误,textureunit id 只占用一次,更多信息:http ://androidblog.reindustries.com/hack-bad-gpu -修复不使用正确纹理opengl/

于 2013-12-26T19:15:30.670 回答