我最近在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 //
您是否从GLES调用记录失败,特别是着色器/程序设置?你有没有看起来工作的设备上看到logcat输出?在某些设备上工作的着色器将无法在其他设备上进行编译 - 某些设备在接受的内容上不够宽松。 – fadden
你是一个天才,看起来好像我的着色器没有得到正确编译,因为我不能在常量的末尾有一个“f”。现在问题似乎已经解决了,所以非常感谢你!如果你将你的评论写入答案,我会接受它btw ... – Tritzium
完成。 Android真的需要GLSL的“皮棉”工具来消除供应商实施差异。 – fadden