SGS4 android 4.4.2 - OGL ES2崩溃

时间:2014-08-01 04:31:01

标签: android c++ android-ndk crash opengl-es-2.0

我在Google Play上发布了一个应用程序。自从400多个安装版本发布以来,没有ANR / Crashes。  但在本周我发现了3起新的撞车事故。所有3都在相同的设备上,相同的Android版本。所有3次碰撞完全相同。

设备是:三星Galaxy S4(jfltevzw)。这是崩溃报告。

Build fingerprint: 'Verizon/jfltevzw/jfltevzw:4.4.2/KOT49H/I545VRUFNC5:user/release-keys'
Revision: '11'
pid: 8444, tid: 8457, name: ###.game### >>> com.###.game### <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000006c
r0 76d47a96 r1 76d47a94 r2 0000006c r3 00000006
r4 00000006 r5 0000006c r6 79a14818 r7 0000006c
r8 79a14008 r9 00000001 sl 0000006c fp 00000000
ip 00000000 sp 76d47a38 lr 7608a95f pc 7608a282 cpsr 60070030
d0 0000000000000000 d1 0000000000000000
d2 0000000000000000 d3 0000000000000000
d4 000000000f000008 d5 00000000ffff0400
d6 0000000044220000 d7 0000000000000000
d8 3ea0000000000000 d9 3fe0000000000000
d10 0000000000000000 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 3f8000003f800000 d17 3a020ce03f800000
d18 3acccccd00000000 d19 0000000000000000
d20 0000000000000000 d21 000000003a032338
d22 3c5999c0bab60c00 d23 3f8000003e064324
d24 0000000000000000 d25 0000000000000000
d26 0000000000000000 d27 0000000000000000
d28 3fef8d75f3bcb1e2 d29 bfdffffffd0c5e81
d30 0000000000000000 d31 0000000000000000
scr 60000017

backtrace:
#00 pc 00046282 /system/vendor/lib/egl/libGLESv2_adreno.so (neon_pld_min_max_16+5)
#01 pc 0004695b /system/vendor/lib/egl/libGLESv2_adreno.so (cache_vertex_elements+80)
#02 pc 00049e61 /system/vendor/lib/egl/libGLESv2_adreno.so (core_glDrawElementsInstancedXXX+328)
#03 pc 00049fd7 /system/vendor/lib/egl/libGLESv2_adreno.so (core_glDrawElements+10)
#04 pc 00039767 /system/vendor/lib/egl/libGLESv2_adreno.so (glDrawElements+28)
#05 pc 000e72b1 ###
#06 pc 000d9567 ###
#07 pc 000bd857 ###

应用程序使用OpenGL ES2.0,VBO和IBO密集使用。

我知道问题出在绑定索引缓冲区和最后一个arg中带索引缓冲区偏移量(而不是指针)的glDrawElements之间。

fault addr 0000006c (和 r7 0000006c )是IBO内第一个索引的偏移量。 IBO对象包含超过2000个项目,并且这种崩溃不能由无效的IBO引起。

我无法理解为什么崩溃只出现在SGS4上。有人可以帮我理解这种情况吗?

UPD: 我使用自己的crossplatform c ++引擎,它在win / mac / nix / ios / android / bada设备上驱动游戏。 OGL IBO和Adreno GPU的问题仅出现在SGS4型号上。

2 个答案:

答案 0 :(得分:0)

请注意,如果有人想要达到统一,您也可以参考https://unity3d.zendesk.com/requests/14018

他们根据我们的项目缩小了这个问题,但还没有解决方案。我确信他们会欢迎更多源代码进行测试和回归。

答案 1 :(得分:0)

参考

http://issuetracker.unity3d.com/issues/application-crashes-on-android-adreno-based-graphics-drivers

通过添加

来走动
void OnGUI(){ 
GUI.Button(new Rect(0,0,1,1), ""); 
}

到每个场景。