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

时间:2013-11-11 15:46:48

标签: android opengl-es-2.0 texture2d

我有一个旧设备有这个问题,我有一个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 ...

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

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

1 个答案:

答案 0 :(得分:1)

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

相关问题