乐清网站优化推广,互联网代理,上传电影网站源码,彩票网站开发需要多少钱因为项目中的一个自定义绘图控件性能不行#xff0c;改用OpenGL实现#xff0c;也是第一次使用OpenGL#xff0c;由于只是绘制2D图形#xff0c;参考官方以及网上的教程#xff0c;实现起来还是比较顺畅的#xff0c;开发时只用了两个手机测试#xff0c;运行良好#…因为项目中的一个自定义绘图控件性能不行改用OpenGL实现也是第一次使用OpenGL由于只是绘制2D图形参考官方以及网上的教程实现起来还是比较顺畅的开发时只用了两个手机测试运行良好性能达标结果换其他手机测试闪退各种搜索也没有搜到有相关经验的文章懵了后面修复这个闪退花费了10天看闪退日志像是骁龙处理器驱动问题APP调用 glDrawArrays 就闪退 2023-11-07 17:45:20.469 17944-17944 DEBUG A signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 2023-11-07 17:45:20.469 17944-17944 DEBUG A Cause: null pointer dereference 2023-11-07 17:45:20.469 17944-17944 DEBUG A x0 00000071d37180e0 x1 0000000000000000 x2 0000000000000040 x3 00000071e2d8a790 2023-11-07 17:45:20.469 17944-17944 DEBUG A x4 0000000000000040 x5 00000071d3718120 x6 0000000000000010 x7 0000000000000000 2023-11-07 17:45:20.469 17944-17944 DEBUG A x8 0000000000000000 x9 000000000000003f x10 0000000000000040 x11 0000000000000004 2023-11-07 17:45:20.469 17944-17944 DEBUG A x12 0000000000000010 x13 b400007352c12fb8 x14 0000000000000040 x15 b400007432b52050 2023-11-07 17:45:20.469 17944-17944 DEBUG A x16 000000723c16caf0 x17 000000752c86a820 x18 00000071daa72000 x19 b40000728eb73290 2023-11-07 17:45:20.469 17944-17944 DEBUG A x20 0000000000000004 x21 000000000000002c x22 0000000000000001 x23 00000071d37180c0 2023-11-07 17:45:20.469 17944-17944 DEBUG A x24 b4000072d4b4d640 x25 0000000000000020 x26 b40000728eb732ac x27 b400007360b3d370 2023-11-07 17:45:20.469 17944-17944 DEBUG A x28 b400007352c12fd8 x29 00000071e2d8a9b0 2023-11-07 17:45:20.469 17944-17944 DEBUG A lr 000000723c1250b4 sp 00000071e2d8a6c0 pc 000000752c86a6d0 pst 0000000080001000 2023-11-07 17:45:20.469 17944-17944 DEBUG A backtrace: 2023-11-07 17:45:20.469 17944-17944 DEBUG A #00 pc 000000000004d6d0 /apex/com.android.runtime/lib64/bionic/libc.so (__memcpy32) (BuildId: 0ae8741b5e25fc676164a0da53a77631) 2023-11-07 17:45:20.469 17944-17944 DEBUG A #01 pc 00000000003d60b0 /vendor/lib64/egl/libGLESv2_adreno.so (!!!0000!f56be09eb88f86833124f1df42e945!8699000cd8!11640) (BuildId: e877ac50f8aa780773379056a8a6fc9e) 2023-11-07 17:45:20.469 17944-17944 DEBUG A #02 pc 00000000001bb454 /vendor/lib64/egl/libGLESv2_adreno.so (!!!0000!6b200851123c7898055fe62ff9f71f!8699000cd8!2388) (BuildId: e877ac50f8aa780773379056a8a6fc9e) 2023-11-07 17:45:20.469 17944-17944 DEBUG A #03 pc 00000000001a0c14 /vendor/lib64/egl/libGLESv2_adreno.so (!!!0000!28254c066fd778faffa7894b1bd8b1!8699000cd8!196) (BuildId: e877ac50f8aa780773379056a8a6fc9e) 看到这些log差点以为无解了后面改用VAO VBO去加载顶点数据哎呀好了
具体实施方式就是把
GLES30.glVertexAttribPointer(positionHandle, 2, GLES30.GL_FLOAT, false, 0, vertexBuffer)
替换成
GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, buffer)
GLES30.glBufferData(GLES30.GL_ARRAY_BUFFER, vertexBuffer.capacity() * 4, vertexBuffer, GLES30.GL_STATIC_DRAW)
GLES30.glVertexAttribPointer(positionHandle, 2, GLES30.GL_FLOAT, false, 0, 0)
还有个小插曲就是画点的时候有些手机设置 glLineWidth 可以调整点的大小有些手机不行以至于本人以为这些手机画不出点来这种情况得在着色器代码中使用专用的 gl_PointSize 来调整点的大小。