VB.Net에서 OpenTK 사용.OpenGL : glDrawElements가 처리되지 않은 예외를 제공합니다. System.AccessViolationException
렌더링 내 방법 :
' clear the screen
GL.ClearColor(Color4.Purple)
GL.Clear(ClearBufferMask.ColorBufferBit Or ClearBufferMask.DepthBufferBit)
' activate shader program and set uniforms
shaderProgram.Use()
projectionMatrix.Set(shaderProgram)
' bind vertex buffer and array objects
vertexBuffer.Bind()
vertexArray.Bind()
' upload vertices to GPU and draw them
vertexBuffer.BufferData()
vertexArray.enableAll()
vertexBuffer.Draw()
' reset state for potential further draw calls (optional, but good practice)
vertexArray.DisableAll()
GL.BindVertexArray(0)
GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0)
GL.BindBuffer(BufferTarget.ArrayBuffer, 0)
GL.UseProgram(0)
' swap backbuffer
SwapBuffers()
이러한 모든 기능을 추상화하고 그들에게 명령 {어떤} 원래 GL이 (예, 뻔뻔 here에서 코드를 복사됩니다.)
내 VertexBuffer에의의.
,536,913,632이 나에게 오류를 제공Public Sub Bind()
' make this the active array buffer
GL.BindBuffer(BufferTarget.ArrayBuffer, Me.handle)
End Sub
Public Sub BufferData()
' copy contained vertices to GPU memory
GL.BufferData(BufferTarget.ArrayBuffer, New IntPtr(Me.vertexSize * Me.count), Me.vertices, BufferUsageHint.StreamDraw)
End Sub
Public Sub Draw()
' draw buffered vertices as triangles
'GL.DrawArrays(PrimitiveType.Triangles, 0, Me.count) <--commented
GL.DrawElements(PrimitiveType.Triangles, 6, DrawElementsType.UnsignedInt, 0) '<--line 44
End Sub
: 코드를 그릴 10
나는 각 그리기 후에 vertexarrays를 비활성화해야한다고 읽었으므로 그 역시 아무런 도움이되지 않았습니다. this question을 보았지만 나에게도 도움이되지 않았습니다 (초보자).
대신에, 정점 버퍼의 draw 메소드에서 glDrawArrays를 사용하면 완벽하게 렌더링됩니다.하지만 glDrawArrays를 사용하고 싶지는 않습니다.
Public Sub Draw()
' draw buffered vertices as triangles
GL.DrawArrays(PrimitiveType.Triangles, 0, count)
' commented line --> GL.DrawElements(PrimitiveType.Triangles, 5, DrawElementsType.UnsignedInt, 0)
End Sub