首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity Android Shader在某些设备上不受支持

Unity Android Shader在某些设备上不受支持
EN

Stack Overflow用户
提问于 2015-07-17 23:51:04
回答 1查看 3K关注 0票数 0

我有一个Unity应用程序,它使用自定义着色器来播放视频。在某些设备上,视频没有显示,并且我在LogCat中打印出以下错误消息:

代码语言:javascript
复制
E/Unity   (11415): -------- Custom/AndroidVideoShader
E/Unity   (11415): 
E/Unity   (11415):  
E/Unity   (11415): (Filename: Runtime/GfxDevice/opengles/GlslGpuProgramGLES.cpp Line: 141)
E/Unity   (11415): 
E/Unity   (11415): -------- failed compiling fragment shader:
E/Unity   (11415): 
E/Unity   (11415):  
E/Unity   (11415): (Filename: Runtime/GfxDevice/opengles/GlslGpuProgramGLES.cpp Line: 142)
E/Unity   (11415): 
D/Unity   (11415): #ifndef SHADER_API_GLES
D/Unity   (11415):     #define SHADER_API_GLES 1
D/Unity   (11415): #endif
D/Unity   (11415): #ifndef SHADER_API_MOBILE
D/Unity   (11415):     #define SHADER_API_MOBILE 1
D/Unity   (11415): #endif
D/Unity   (11415): #line 7
D/Unity   (11415): #ifdef DUMMY_PREPROCESSOR_TO_WORK_AROUND_HLSL_COMPILER_LINE_HANDLING
D/Unity   (11415): #endif
D/Unity   (11415): #line 7
D/Unity   (11415): #ifdef DUMMY_PREPROCESSOR_TO_WORK_AROUND_HLSL_COMPILER_LINE_HANDLING
D/Unity   (11415): #endif
D/Unity   (11415):      precision mediump float;
D/Unity   (11415): varying vec2 textureCoordinates;
D/Unity   (11415):      
D/Unity   (11415):      
D/Unity   (11415):      
D/Unity   (11415):      
D/Unity   (11415):   // require GL_OES_EGL_image_external so we can access the external texture data on android's GPU
D/Unity   (11415):   #extension GL_OES_EGL_image_external : require
D/Unity   (11415):   uniform samplerExternalOES _MainTex;
D/Unity   (11415):   void main()
D/Unity   (11415):   {
D/Unity   (11415):    gl_FragColor = texture2D(_MainTex, textureCoordinates);
D/Unity   (11415):   }
D/Unity   (11415):   
D/Unity   (11415):   
E/Unity   (11415): -------- GLSL error: 0:23: P0007: Extension directive must occur before any non-preprocessor tokens
E/Unity   (11415): 0:25: L0001: Typename expected, found 'samplerExternalOES'
E/Unity   (11415): 
E/Unity   (11415): 
E/Unity   (11415): 
E/Unity   (11415):  
E/Unity   (11415): (Filename: Runtime/GfxDevice/opengles/GlslGpuProgramGLES.cpp Line: 145)
E/Unity   (11415): 
D/Unity   (11415): Warning: Creation of shader 'Custom/AndroidVideoShader' failed.
D/Unity   (11415): WARNING: Shader 
D/Unity   (11415): Unsupported: 'Custom/AndroidVideoShader' - Pass '' shader state not supported

着色器代码如下:

代码语言:javascript
复制
Shader "Custom/AndroidVideoShader" {
Properties {
    _MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
    Pass{


    GLSLPROGRAM

    varying vec2 textureCoordinates;

    #ifdef VERTEX

    // get the texture offset ftom our material
    uniform mediump vec4 _MainTex_ST;

    void main()
    {
        // multiply the UV by texture scale and add the offset
        textureCoordinates.xy = (gl_MultiTexCoord0.xy * _MainTex_ST.xy) + _MainTex_ST.zw;

        //textureCoordinates = gl_MultiTexCoord0;

        gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    }

    #endif


    #ifdef FRAGMENT

    // require GL_OES_EGL_image_external so we can access the external texture data on android's GPU
    #extension GL_OES_EGL_image_external : require

    uniform samplerExternalOES _MainTex;

    void main()
    {
        gl_FragColor = texture2D(_MainTex, textureCoordinates);
    }

    #endif

    ENDGLSL
    }
} 
FallBack "Diffuse"
}

这似乎不是安卓版本的问题,因为我收到错误的设备(客户的Note2和华为Ascend Y330)运行的是不同版本的安卓(分别为4.4.2和4.2.2 )。我有一台Nexus7 (4.2.2),Xperia M2 (4.4.4)和Galaxy Tab8.4 (5.1.1),都可以正常工作。

我没有使用着色器的经验--有什么明显的问题吗?在Unity中,我尝试将图形级别设置为OpenGLES2.0和OpenGLES3.0,但没有任何区别。

EN

回答 1

Stack Overflow用户

发布于 2016-07-26 16:41:29

这是着色器中的语法错误,

代码语言:javascript
复制
GLSL error: 0:23: P0007: Extension directive must occur before any non-preprocessor tokens

它在ESSL规范中是不合法的:

代码语言:javascript
复制
#extension GL_OES_EGL_image_external : require

..。定义如下:

代码语言:javascript
复制
varying vec2 textureCoordinates;

它在某些设备上工作的原因只是运气-一些着色器编译器没有其他编译器那么挑剔。更改着色器,以便#extension定义是源代码中的第一件事,然后它应该可以正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31479791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档