Hallo Leute,
aktuell versuche ich mich, nachdem ich nun lange mit gdi+ gezeichnet habe, mit OpenGL und SharpGL zu beschäftigen.
Ich habe angefangen auf der Website "LearnOpenGL" die tutorials für c++ abzuarbeiten und habe den ersten schritt geschafft ein Fenster mit dem Quadrat zu zeichnen.
Nun wollte ich mich ebenso in C# daran versuchen doch leider läuft es nicht wie gewünscht.
Ich habe alles genau so gemacht wie in den Tutorials beschrieben. Das Verhalten momentan ist, dass das Programm zwar den Hintergrund "cleared" jedoch die Elemente nicht zeichnet.
Meine Vermutung ist das ich etwas mit den Pointern falsch mache.
"Mein Code - Komplett"
Kann mir bitte jemand helfen den fehler zu finden und verstehen zu helfen.
Mit freundlichen Grüßen
Mausekeks
aktuell versuche ich mich, nachdem ich nun lange mit gdi+ gezeichnet habe, mit OpenGL und SharpGL zu beschäftigen.
Ich habe angefangen auf der Website "LearnOpenGL" die tutorials für c++ abzuarbeiten und habe den ersten schritt geschafft ein Fenster mit dem Quadrat zu zeichnen.
Nun wollte ich mich ebenso in C# daran versuchen doch leider läuft es nicht wie gewünscht.
Ich habe alles genau so gemacht wie in den Tutorials beschrieben. Das Verhalten momentan ist, dass das Programm zwar den Hintergrund "cleared" jedoch die Elemente nicht zeichnet.
Meine Vermutung ist das ich etwas mit den Pointern falsch mache.
C#-Quellcode
- public partial class SharpControl : OpenGLControl
- {
- private const string vShader = "#version 330 core \n layout (location = 0) in vec3 aPos; \n void main()\n {gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);}";
- private const string fShader = "#version 330 core \n out vec4 FragColor; \n void main(){FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);}";
- private OpenGL gl;
- private ShaderProgram sProgram;
- private uint[] VAO = new uint[1];
- private uint[] VBO = new uint[1];
- private uint[] EBO = new uint[1];
- float[] indices;
- float[] vertices;
- public SharpControl()
- {
- InitializeComponent();
- gl = this.OpenGL;
- gl.RenderContextProvider.MakeCurrent();
- var tmp = this.OpenGLVersion;
- gl.Viewport(0, 0, Width, Height);
- this.Load += SharpControl_Load;
- }
- private void Prepair()
- {
- //The Vertex Shader
- VertexShader vertexShader = new VertexShader();
- vertexShader.Name = "VertexShader";
- vertexShader.CreateInContext(gl);
- vertexShader.SetSource(vShader);
- vertexShader.Compile();
- CheckShaderCompilation(vertexShader);
- //The Fragment Shader
- FragmentShader fragmentShader = new FragmentShader();
- fragmentShader.Name = "FragmentShader";
- fragmentShader.CreateInContext(gl);
- fragmentShader.SetSource(fShader);
- fragmentShader.Compile();
- CheckShaderCompilation(fragmentShader);
- //The Shader Program
- sProgram = new ShaderProgram();
- sProgram.Name = "ShaderProgram";
- sProgram.CreateInContext(gl);
- sProgram.AttachShader(vertexShader);
- sProgram.AttachShader(fragmentShader);
- sProgram.Link();
- CheckShaderProgramCompilation(sProgram);
- vertices = new float[]
- {
- 0.5f, 0.5f, 0.0f, // top right
- 0.5f, -0.5f, 0.0f, // bottom right
- -0.5f, -0.5f, 0.0f, // bottom left
- -0.5f, 0.5f, 0.0f // top left
- };
- indices = new float[]
- { // note that we start from 0!
- 0, 1, 3, // first triangle
- 1, 2, 3 // second triangle
- };
- gl.GenVertexArrays(1, VAO);
- gl.GenBuffers(1, VBO);
- gl.GenBuffers(1, EBO);
- gl.BindVertexArray(VAO[0]);
- gl.BindBuffer(OpenGL.GL_ARRAY_BUFFER, VBO[0]);
- gl.BufferData(OpenGL.GL_ARRAY_BUFFER, vertices, OpenGL.GL_STATIC_DRAW);
- gl.VertexAttribPointer(0, 3, OpenGL.GL_FLOAT, false, 3 * sizeof(float), IntPtr.Zero);
- gl.EnableVertexAttribArray(0);
- gl.BindBuffer(OpenGL.GL_ELEMENT_ARRAY_BUFFER, EBO[0]);
- gl.BufferData(OpenGL.GL_ELEMENT_ARRAY_BUFFER, indices, OpenGL.GL_STATIC_DRAW); ;
- gl.BindBuffer(OpenGL.GL_ELEMENT_ARRAY_BUFFER, EBO[0]);
- gl.BindVertexArray(0);
- }
- private void SharpControl_Load(object sender, EventArgs e)
- {
- gl.ClearColor(255, 255, 255, 255);
- PrepairData();
- }
- protected override void DoOpenGLDraw(RenderEventArgs e)
- {
- //RenderLoop
- gl.ClearColor(0.2f, 0.3f, 0.3f, 1.0f);
- gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT);
- gl.UseProgramObjectARB(sProgram.ProgramObject);
- gl.BindVertexArray(VAO[0]);
- gl.DrawElements(OpenGL.GL_TRIANGLES, 6, OpenGL.GL_UNSIGNED_INT,IntPtr.Zero);
- gl.Flush();
- }
- }
-
Kann mir bitte jemand helfen den fehler zu finden und verstehen zu helfen.
Mit freundlichen Grüßen
Mausekeks
Brain is Loading: 35%