我尝试使用这个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有特殊的环境吗?我不认为问题与着色器本身有关,因为它在样本中是相同的。
感谢您的时间。
答案 0 :(得分:0)
好吧,
诀窍很简单:
不要忘记在CreateFrameBuffer中添加以下行:
ContextRenderingApi = GLVersion.ES2;
问题解决了。