2017-01-22 12 views
0

OpenGL에서 SharpGL로 FBO/VBO를 사용하려고합니다. 이 WPF 응용 프로그램에 사용. 문제 삼각형이 렌더링되지 않습니다.SharpGL 간단한 삼각형을 그리는 FBO/VBO가 작동하지 않습니다.

추가 요소는이 코드입니다 :

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 및 드로잉 시간의 통계가있는 검정색 창만 표시됩니다. Pls는 C++/C 툴박스를 이미 보았으므로 (많이) C#에서는 조금 다릅니다. 이 혀를 따라 가려고 : http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/

답변

0

SharpGL (적어도 내 설치 프로그램에서) GPU에서 VBO를 지원하지 않습니다. try {} catch {}에 문장을 포함 시키려고 할 것이므로이 효과에 대한 메시지가있는 예외를 얻어야합니다. SharpGL은 비 gpu 쪽 DrawArrays (VertexPointer())를 지원합니다.