使用 OpenTk,尝试让基本的“HelloTriangle”工作。这是着色器设置:
public ShaderLibrary() {
var glsl = "";
var vertexShader = GL.CreateShader(ShaderType.VertexShader);
glsl = File.ReadAllText(@".\Shaders\VertexShader.glsl");
GL.ShaderSource(vertexShader, glsl);
GL.CompileShader(vertexShader);
var pixelShader = GL.CreateShader(ShaderType.FragmentShader);
glsl = File.ReadAllText(@".\Shaders\PixelShader.glsl");
GL.ShaderSource(pixelShader, glsl);
GL.CompileShader(pixelShader);
var err1 = GL.GetError();
Dbg.WriteLine(err1);
DEFAULT_SHADER = GL.CreateProgram();
GL.AttachShader(DEFAULT_SHADER, vertexShader);
GL.AttachShader(DEFAULT_SHADER, pixelShader);
GL.LinkProgram(DEFAULT_SHADER);
var err2 = GL.GetError();
Dbg.WriteLine(err2);
GL.DetachShader(DEFAULT_SHADER, vertexShader);
GL.DetachShader(DEFAULT_SHADER, pixelShader);
GL.DeleteShader(vertexShader);
GL.DeleteShader(pixelShader);
var err3 = GL.GetError();
Dbg.WriteLine(err3);
}
着色器本身:
顶点:
#version 330 core
layout (location=0) in vec3 aPosition;
void main()
{
gl_Position = vec4(aPosition, 1f);
}
像素:
#version 330 core
out vec4 pixelColor;
void main()
{
pixelColor = vec4(0f, 1f, 0f, 1f);
}
渲染方法:
public void Render() {
var err1 = GL.GetError();
GL.UseProgram(Global.Shaders.DEFAULT_SHADER);
var err2 = GL.GetError();
Dbg.WriteLine("-------------------------");
Dbg.WriteLine(err1);
Dbg.WriteLine(err2);
Dbg.WriteLine("-------------------------");
GL.BindVertexArray(_vertexArrayHandle);
GL.DrawArrays(PrimitiveType.Triangles, 0, 3);
}
最后,输出:
210216.454 NoError
210216.455 NoError
210216.455 NoError
210216.457 -------------------------
210216.457 NoError
210216.457 InvalidOperation
210216.457 -------------------------
我似乎找不到我哪里出错了。创建着色器时不会抛出任何错误,链接时也不会抛出任何错误。但是,一旦我尝试使用着色器,它就会失败。我在这里错过了什么?
尝试对着色器进行各种更改,编写和加载它们的不同方式,断点和调试输出无处不在。找不到错误原因