【问题标题】:SharpGL FBO / VBO drawing simple triangle not workingSharpGL FBO / VBO 绘制简单三角形不起作用
【发布时间】:2017-01-22 11:07:56
【问题描述】:

我试图在 OpenGL 中使用 FBO/VBO 和 SharpGL。用于此 WPF 应用程序。 问题是,示例三角形不渲染。

使用此代码添加组件:

glControl = new OpenGLControl();
glControl.RenderContextType = RenderContextType.FBO;
glControl.DrawFPS = true;
glControl.OpenGLDraw += OpenGLControl_OnOpenGLDrawNew;

以及渲染和初始化的代码:

private void OpenGLControl_OnOpenGLDrawNew(object sender, OpenGLEventArgs args)
{
OpenGL gl = args.OpenGL;
ShaderProgram shaderProgram = new ShaderProgram();

uint[] id = new uint[1];

gl.GenVertexArrays(1, id);
gl.BindVertexArray(id[0]);

gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
gl.LoadIdentity();

float[] vertex_data = new[]
{
    -1.0f, -1.0f, 0.0f,
    1.0f, -1.0f, 0.0f,
    0.0f, 1.0f, 0.0f,
};

uint[] vertexBuffer = new uint[1];
gl.GenBuffers(1, vertexBuffer);
gl.BindBuffer(OpenGL.GL_ARRAY_BUFFER, vertexBuffer[0]);
IntPtr ptr1 = GCHandle.Alloc(vertex_data, GCHandleType.Pinned).AddrOfPinnedObject();
gl.BufferData(OpenGL.GL_ARRAY_BUFFER, vertex_data.Length * sizeof(float), ptr1, OpenGL.GL_STATIC_DRAW);


// loop? when its in do{} while(true) loop, program stop respond
gl.EnableVertexAttribArray(0);
gl.BindBuffer(OpenGL.GL_ARRAY_BUFFER, vertexBuffer[0]);
gl.VertexAttribPointer(0, 3, OpenGL.GL_FLOAT, false, 0, new IntPtr());
gl.DrawArrays(OpenGL.GL_TRIANGLES, 0, 3);
gl.DisableVertexAttribArray(0);
}

我不确定我做错了什么? 仅显示带有 FPS 和绘制时间统计信息的黑色窗口。 请不要发送 C++/C tuts,因为已经尝试过(很多),并且在 C# 中有点不同。 正在尝试遵循这个 tut:http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/

【问题讨论】:

    标签: c# opengl vbo sharpgl


    【解决方案1】:

    SharpGL(至少在我的设置中)不支持 GPU 上的 VBO。我会尝试将语句包含在 try{} catch{} 中,您应该会收到一个带有此效果的消息的异常。 SharpGL 确实支持非 gpu 端的 DrawArrays (VertexPointer())。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2013-04-05
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      相关资源
      最近更新 更多