Android OpenGL ES 2.0 纹理设置似乎不起作用

标签 android opengl-es-2.0 texture2d

我在旧设备上遇到了这个问题,该设备具有我仍然喜欢支持的 android 版本 (2.3.5),其中纹理有时可以正常工作。

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

我加载了 4 个 1024x1024 的纹理和 1 个 512x512 的纹理。不能正常工作的纹理是最后加载和绑定(bind)的纹理。所以这可能是内存问题,但我怎样才能找到呢? 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 所以如果需要某些部分来解决这个问题,我会发布它。

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

最佳答案

修复了这个(显然也是我发布的其他问题)问题,这是 GPU 驱动程序软件中的一个错误,纹理单元 ID 只占用了一次,更多信息:http://androidblog.reindustries.com/hack-bad-gpu-fix-not-using-correct-texture-opengl/

关于Android OpenGL ES 2.0 纹理设置似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19910349/

相关文章:

java - Java 文件中的安全 key ,如来自黑客的 API key 等

java - 如何在 PHP 和 Java 之间传递日期?

opengl-es - OpenGL 固定函数着色器实现

ios - Cocos2d : Invert a texture, 显示镜像?

c++ - 正确实现纹理图集

android - 在导航图 NavGraph 中找不到与请求 NavDeepLinkRequest 匹配的导航目的地

android - 在 android 中显示 HTML

IOS:OpenGL ES 2.0 与 3.0 中具有动态分支的着色器的性能

android - 在 Android 上使用 opengl es 2.0 进行简单翻译

c# - XNA 4.0 - Alpha 和多个纹理......搞砸了