Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法编译着色器并获取错误Android Xamarin OpenGL ES 2.0_C#_Android_Xamarin_Opengl Es_Shader - Fatal编程技术网

C# 无法编译着色器并获取错误Android Xamarin OpenGL ES 2.0

C# 无法编译着色器并获取错误Android Xamarin OpenGL ES 2.0,c#,android,xamarin,opengl-es,shader,C#,Android,Xamarin,Opengl Es,Shader,我正在使用Android Xamarin和OpenGL,我正在尝试制作一个简单的程序来在屏幕上渲染三角形,遵循以下教程:。但我的着色器似乎无法编译,当我尝试获取错误时,应用程序在OpenGL线程上出现SIGBART信号6崩溃。我的着色器存储在assets文件夹中,源代码加载良好(我可以通过Toast显示它) 这是我的顶点着色器代码: attribute vec4 vPosition; void main(){ gl_Position = vPosition; } using GL =

我正在使用Android Xamarin和OpenGL,我正在尝试制作一个简单的程序来在屏幕上渲染三角形,遵循以下教程:。但我的着色器似乎无法编译,当我尝试获取错误时,应用程序在OpenGL线程上出现SIGBART信号6崩溃。我的着色器存储在assets文件夹中,源代码加载良好(我可以通过Toast显示它)

这是我的顶点着色器代码:

attribute vec4 vPosition;

void main(){
    gl_Position = vPosition;
}
using GL = Android.Opengl.GLES20;
....

public enum ShaderType : int {
    Vertex= GL.GlVertexShader, Fragment = GL.GlFragmentShader
}
....

public Shader(string name, ShaderType type)
{
    string code = AssetsPipeline.ReadAsText(string.Format("Shaders/{0}", name));
    GL.GlReleaseShaderCompiler();
    GlId = GL.GlCreateShader((int)type);
    Type = type;
    GL.GlShaderSource(GlId, code);
    GL.GlCompileShader(GlId);

    int[] p = new int[1];
    GL.GlGetShaderiv(GlId, GL.GlCompileStatus, p, 0);
    if(p[0] == GL.GlFalse)
    {
        string error = GL.GlGetShaderInfoLog(GlId);
        GL.GlDeleteShader(GlId);
        GlId = 0;
    }
}
这是我的着色器加载程序代码:

attribute vec4 vPosition;

void main(){
    gl_Position = vPosition;
}
using GL = Android.Opengl.GLES20;
....

public enum ShaderType : int {
    Vertex= GL.GlVertexShader, Fragment = GL.GlFragmentShader
}
....

public Shader(string name, ShaderType type)
{
    string code = AssetsPipeline.ReadAsText(string.Format("Shaders/{0}", name));
    GL.GlReleaseShaderCompiler();
    GlId = GL.GlCreateShader((int)type);
    Type = type;
    GL.GlShaderSource(GlId, code);
    GL.GlCompileShader(GlId);

    int[] p = new int[1];
    GL.GlGetShaderiv(GlId, GL.GlCompileStatus, p, 0);
    if(p[0] == GL.GlFalse)
    {
        string error = GL.GlGetShaderInfoLog(GlId);
        GL.GlDeleteShader(GlId);
        GlId = 0;
    }
}
着色器无法编译,当我调用
GL.GlGetShaderInfoLog(GlId)
时,程序完全崩溃(我知道程序没有使用错误,但它甚至从未分配过错误)。如前所述,输出为SIGBART错误:

10-16 05:50:00.856 F/libc(11734):致命信号6(SIGABRT),tid 11764中的代码-6(GLThread 474)

表面看起来很好,当我删除
GL.GlGetShaderInfoLog(GlId)
线时,背景画得很好。如果有人知道这是怎么发生的,或者我能解决谁的问题,我将非常感激。我没有在网上找到任何关于它的信息

谢谢,罗恩