2015-09-21 135 views
0

我最近在android Google Play商店中创建了一款游戏。我们发布了它,结果证明它不会在大部分下载设备上提供任何内容。我问几个朋友是否可以测试它们,其中一个不能玩。
他有一台运行Android 4.4.2的三星Galaxy S5 mini,今天我和他见面,连接了我的电脑并试图找到这个bug。但是一切似乎都在正常工作。游戏进入它的更新循环,具有所有正确的渲染值。它正在分配内存(虽然我不确定它是否分配了OpenGL线程上的所有内存)。
我的手机运行的是Android 4.4,并且是三星Galaxy S4 mini,一切正常。
我现在完全迷失了,急需指导。 我所有的GL调用都是针对GLES 20 API的,可能与此有关。
我有一个自定义的配置选择器。Android opengles 20呈现问题

package com.honeycomb.touchtycube.testapp.OEngine; 

import android.opengl.GLSurfaceView; 


import javax.microedition.khronos.egl.EGL10; 
import javax.microedition.khronos.egl.EGLConfig; 
import javax.microedition.khronos.egl.EGLDisplay; 



class OEConfigChooser implements GLSurfaceView.EGLConfigChooser { 

@Override 
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) { 
    int attribs[] = { 
      EGL10.EGL_LEVEL, 0, 
      EGL10.EGL_RENDERABLE_TYPE, 4, // EGL_OPENGL_ES2_BIT 
      EGL10.EGL_COLOR_BUFFER_TYPE, EGL10.EGL_RGB_BUFFER, 
      EGL10.EGL_RED_SIZE, 8, 
      EGL10.EGL_GREEN_SIZE, 8, 
      EGL10.EGL_BLUE_SIZE, 8, 
      EGL10.EGL_DEPTH_SIZE, 16, 
      EGL10.EGL_SAMPLE_BUFFERS, 1, 
      EGL10.EGL_SAMPLES, 4, // This is for 4x MSAA. 
      EGL10.EGL_NONE 
    }; 
    EGLConfig[] configs = new EGLConfig[1]; 
    int[] configCounts = new int[1]; 
    egl.eglChooseConfig(display, attribs, configs, 1, configCounts); 

    if (configCounts[0] == 0) { 
     // Failed! Error handling. 
     return null; 
    } else { 
     return configs[0]; 
    } 
} 

}

我想添加这个配置choser几乎完全从互联网上和我有什么它实际上从使MSAA做一边零点的想法。

这些设备上的渲染方式是否存在差异?

Best Regards //

+0

您是否从GLES调用记录失败,特别是着色器/程序设置?你有没有看起来工作的设备上看到logcat输出?在某些设备上工作的着色器将无法在其他设备上进行编译 - 某些设备在接受的内容上不够宽松。 – fadden

+0

你是一个天才,看起来好像我的着色器没有得到正确编译,因为我不能在常量的末尾有一个“f”。现在问题似乎已经解决了,所以非常感谢你!如果你将你的评论写入答案,我会接受它btw ... – Tritzium

+0

完成。 Android真的需要GLSL的“皮棉”工具来消除供应商实施差异。 – fadden

回答

1

检查着色器编译中的失败。

在某些设备上工作的着色器将无法在其他设备上编译 - 某些设备在他们接受的内容上不适当地宽松。