【问题标题】:App fails when compiles shader on Nexus 7在 Nexus 7 上编译着色器时应用程序失败
【发布时间】:2014-08-20 10:47:29
【问题描述】:

应用在 Nexus 7 和 Nexus 5 上编译着色器失败,但在 Galaxy s3 上一切正常。 这是未编译的着色器。

#define FRAGMENT_SHADER
#ifdef VERTEX_SHADER
void main()
{
    gl_Position = vec4( atbCoord.x, atbCoord.y, 0.0, 1.0 );
}
#endif
#ifdef FRAGMENT_SHADER
void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
#endif

我正在使用 GLSurfaceView 和 OpenGL ES 2。

这个着色器有什么问题?

【问题讨论】:

  • 你确定这是完整的代码吗? atbCoord 在哪里声明?你得到什么错误?此外,根据 ES 2.0 GLSL 规范的4.5.3 Default Precision Qualifiers 段,您必须为片段着色器指定默认的float 精度。一些 OpenGL ES 驱动程序经常忽略此要求 - 有些可能会编译此类无效着色器,有些可能会失败。规范链接:khronos.org/files/opengles_shading_language.pdf
  • 在一台设备上编译代码但在另一台设备上编译的情况并不少见。正如@keaukraine 所指出的,这通常是因为一个设备过于宽松,接受了不应允许的代码。
  • 这是我在运行时从代码生成的没有声明和定义精度的代码的一部分。我已经找到了问题所在。 Nexus 7 和 Nexus 5 GPU 着色器编译器失败,如果在源代码的最后一行你有 #endif 后面没有任何换行符('\n')。

标签: android android-ndk glsl opengl-es-2.0


【解决方案1】:

如果有人用谷歌搜索这个。

如果着色器编译在 Nexus 5 和 Nexus 7 上运行时应用程序失败,请检查您是否在末尾着色器源处有新行符号,即 '\n',因为这可能是问题所在。着色器源代码的末尾应该有行尾。

【讨论】:

    猜你喜欢
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多