2017-01-22 56 views
0

我試圖在OpenGL中使用SharpGL中的FBO/VBO。用於此WPF應用程序。 問題是,示例三角形不呈現。SharpGL FBO/VBO繪製簡單三角不工作

添加組件是與此代碼:

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

而對於代碼渲染和init:

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 becouse已經嘗試過(很多),它在C#中有點不同。 試圖按照下面的步驟:http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/

回答

0

SharpGL(至少在我的設置上)不支持GPU上的VBO。我會嘗試在try {} catch {}中包含這些語句,並且您應該得到一個異常並附帶一條消息來達到此效果。 SharpGL支持非GPU端DrawArrays(VertexPointer())。