Xamarin AndroidGameView:无法弄清楚为什么VertexShader / FragmentShader无法编译

时间:2016-10-04 09:55:18

标签: c# xamarin.android shader

我尝试使用这个Xamarin示例使用着色器(我已经使用SFML对着色器进行了一些工作): https://developer.xamarin.com/samples/monodroid/GLTriangle20/

我正在尝试创建一个新项目并重新创建一个AndroidGameView类(例如此示例中的PaintingView)。

但是我无法编译我的VertexShader和Fragment着色器。

到目前为止我做了什么:

  • 我的FrameBuffer已创建。

  • 已调用OnLoad基本函数。

  • 我在编译之前创建了一个存储着色器的字符串(样本中的着色器相同)

  • 使用GL.CreateShader =>创建着色器结果不是0

  • 使用GL.ShaderSource将我的sourceCode存储在顶点着色器句柄中

  • 尝试使用GL.CompileShader =>进行编译GL.GetShader表示它没有编译。

这里是顶点着色器字符串:

string vertexShaderSrc = "attribute vec4 vPosition;    \n" +
                              "void main()                  \n" +
                              "{                            \n" +
                              "   gl_Position = vPosition;  \n" +
                              "}                            \n";

这里是在声明字符串后调用的加载函数,其中" type = ShaderType.VertexShader"和" source = vertexShaderSrc" :

int LoadShader(ShaderType type, string source)
        {
            int shader = GL.CreateShader(ShaderType.VertexShader);


                if (shader == 0)
                    throw new InvalidOperationException("Unable to create shader");

                int[] length = { 0 };

                GL.ShaderSource(shader, 1, new string[] { source }, (int[])null);
                GL.CompileShader(shader);

                int[] compiled = { 0 } ;
                GL.GetShader(shader, ShaderParameter.CompileStatus, compiled);
                if (compiled[0] == 0)
                {
                    length[0] = 0;
                    GL.GetShader(shader, ShaderParameter.InfoLogLength, length);
                    if (length[0] > 0)
                    {
                        var log = new StringBuilder(length[0]);
                        GL.GetShaderInfoLog(shader, length[0], length, log);
                        Log.Debug("GL2", "Couldn't compile shader: " + log.ToString());
                    }

                    GL.DeleteShader(shader);
                    throw new InvalidOperationException("Unable to compile shader of type : " + type.ToString());
                }

            return shader;
        }

我会错过哪一步? Xamarin有特殊的环境吗?我不认为问题与着色器本身有关,因为它在样本中是相同的。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

好吧,

诀窍很简单:

不要忘记在CreateFrameBuffer中添加以下行:

ContextRenderingApi = GLVersion.ES2;

问题解决了。