C# OpenTk“HelloTriangle”仅在 GL.UseProgram() 上呈现带有“InvalidOperation”错误的白色三角形;

问题描述 投票:0回答:0

使用 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      -------------------------

我似乎找不到我哪里出错了。创建着色器时不会抛出任何错误,链接时也不会抛出任何错误。但是,一旦我尝试使用着色器,它就会失败。我在这里错过了什么?

尝试对着色器进行各种更改,编写和加载它们的不同方式,断点和调试输出无处不在。找不到错误原因

c# shader opentk
© www.soinside.com 2019 - 2024. All rights reserved.