【问题标题】:Android opengles 20 rendering issuesAndroid opengles 20 渲染问题
【发布时间】:2015-09-21 16:26:41
【问题描述】:

我最近在 android Google Play 商店上创建了一个游戏。当我发布它时,结果发现它在大部分下载设备上都没有呈现任何内容。我问了几个朋友是否可以测试它,其中一个无法播放。
他有一台运行 Android 4.4.2 的三星 Galaxy S5 mini,我今天遇到他,连接我的电脑并试图找到漏洞。但一切似乎都正常工作。游戏进入更新循环,所有渲染值都正确。它正在分配内存(尽管我不确定它是否在 OpenGL 线程上分配了所有必需的内存)。
我的手机运行的是 Android 4.4,是三星 Galaxy S4 mini,一切正常。
我现在完全迷路了,迫切需要指导。 我所有的 GL 调用都是对 GLES 20 API 的调用,是否与此有关。
我有一个自定义配置选择器。

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];
    }
}

}

我想添加这个配置选择器几乎完全来自互联网,除了启用 MSAA 之外,我对它的实际作用一无所知。

在这些设备上进行渲染的方式是否有任何差异,可能会导致这种情况?

最好的问候 //

【问题讨论】:

  • 您是否记录了 GLES 调用的失败,尤其是着色器/程序设置?您是否查看过似乎没有任何效果的设备上的 logcat 输出?在某些设备上工作的着色器将无法在其他设备上编译——某些设备对其接受的内容过于宽松。
  • 你真是个天才,我的着色器似乎没有正确编译,因为我不能在常量末尾加上“f”。现在问题似乎已经解决了,非常感谢您!如果您将评论变成答案,我会接受它...
  • 完成。 Android 确实需要 GLSL 的“lint”工具来消除供应商实现的差异。
  • 是的,浮点常量的 f 在 ES 2.0 中不是标准的。我已经看到它在配备 Qualcomm GPU 的设备上被默默忽略,并导致 Imagination GPU 设计出现错误。

标签: java android opengl-es rendering opengl-es-2.0


【解决方案1】:

检查着色器编译失败。

在某些设备上工作的着色器将无法在其他设备上编译 - 某些设备对其接受的内容过于宽松。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2013-08-14
    • 2016-03-31
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多