C# 如何使用GLFW.NET初始化OpenGL.NET?

C# 如何使用GLFW.NET初始化OpenGL.NET?,c#,opengl,openglcontext,C#,Opengl,Openglcontext,我正在尝试在C#中使用OpenGL和GLFW。我已经为GLFW.Net和OpenGL.Net安装了NuGet软件包。我一生都搞不懂的是,我如何用GLFW.Net设置OpenGL.Net的上下文??当我尝试运行非常基本的测试OpenGL代码时,没有出现错误消息。i、 e class Program { [STAThread] static void Main(string[] args) { Glfw.Init

我正在尝试在C#中使用OpenGL和GLFW。我已经为GLFW.Net和OpenGL.Net安装了NuGet软件包。我一生都搞不懂的是,我如何用GLFW.Net设置OpenGL.Net的上下文??当我尝试运行非常基本的测试OpenGL代码时,没有出现错误消息。i、 e

    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Glfw.Init();
            GLFWwindow window = Glfw.CreateWindow(1080, 720, "Yeet", null, null);
            Glfw.MakeContextCurrent(window);
            Gl.Initialize();

            uint vao = Gl.CreateVertexArray();
            Gl.BindVertexArray(vao);

            uint vbo = Gl.CreateBuffer();
            Gl.BindBuffer(BufferTarget.ArrayBuffer, vbo);
            Gl.BufferData(BufferTarget.ArrayBuffer, 6, new float[] { -0.5f, -0.5f, 0.5f, -0.5f, 0.0f, 0.5f }, BufferUsage.StaticDraw);
            Gl.VertexAttribPointer(0, 2, VertexAttribType.Float, false, 0, null);

            while (Glfw.WindowShouldClose(window) != 1)
            {
                Glfw.PollEvents();

                Gl.ClearColor(0.0f, 1.0f, 1.0f, 1.0f);
                Gl.Clear(ClearBufferMask.ColorBufferBit);
                Gl.BindVertexArray(vao);
                Gl.EnableVertexAttribArray(0);
                Gl.DrawArrays(PrimitiveType.Triangles, 0, 3);
                Gl.DisableVertexAttribArray(0);
                Gl.BindVertexArray(0);

                Glfw.SwapBuffers(window);
            }

            Glfw.DestroyWindow(window);
            Glfw.Terminate();
        }
    }

但什么也没有。这是不是意味着我的背景不存在,或者说我很愚蠢,留下了一些东西?

在第一块玻璃上,我看到了一个明显的问题。缓冲区数据的大小必须以字节为单位指定(请参阅)。因此,尺寸必须为6*4,而不是6:

var-vertices=newfloat[]{-0.5f、-0.5f、0.5f、-0.5f、0.0f、0.5f};
Gl.BufferData(BufferTarget.ArrayBuffer,(uint)(4*顶点.长度),
顶点,BufferUsage.StaticDraw);

结果表明,在创建当前库之前,必须对库进行初始化(无论出于何种原因):

Gl.Initialize();
Glfw.MakeContextCurrent(窗口);

在第一块玻璃上,我看到了一个明显的问题。缓冲区数据的大小必须以字节为单位指定(请参阅)。因此,尺寸必须为6*4,而不是6:

var-vertices=newfloat[]{-0.5f、-0.5f、0.5f、-0.5f、0.0f、0.5f};
Gl.BufferData(BufferTarget.ArrayBuffer,(uint)(4*顶点.长度),
顶点,BufferUsage.StaticDraw);

结果表明,在创建当前库之前,必须对库进行初始化(无论出于何种原因):

Gl.Initialize();
Glfw.MakeContextCurrent(窗口);

我所要做的就是将Gl.Initialize()移到Glfw.MakeContextCurrent(窗口)上方。我想您必须先创建OpenGL上下文,然后将上下文设置为当前上下文。这与LWJGL不同,LWJGL必须在调用GL.createCapabilities()之前调用GLFW.glfwMakeContextCurrent()希望这有帮助

我所要做的就是将Gl.Initialize()移到Glfw.MakeContextCurrent(窗口)上方。我想您必须先创建OpenGL上下文,然后将上下文设置为当前上下文。这与LWJGL不同,LWJGL必须在调用GL.createCapabilities()之前调用GLFW.glfwMakeContextCurrent()希望这有帮助

在你的情况下,颜色清除(变为蓝色)有效吗?不。可能是上下文创建吗?颜色清除(变为蓝色)在你的情况下有效吗?不。可能是上下文创建吗?我确认。我已经核实了,我确认。我已经证实了这一点。