Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Include standard headers
- #include <stdio.h>
- #include <stdlib.h>
- // Include GLEW
- #include <GL/glew.h>
- // Include GLFW
- #include <glfw3.h>
- GLFWwindow* window;
- // Include GLM
- #include <glm/glm.hpp>
- #include <glm/gtc/matrix_transform.hpp>
- using namespace glm;
- #include <common/shader.hpp>
- int main( void )
- {
- // Initialise GLFW
- if( !glfwInit() )
- {
- fprintf( stderr, "Failed to initialize GLFWn" );
- return -1;
- }
- glfwWindowHint(GLFW_SAMPLES, 4);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
- glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
- // Open a window and create its OpenGL context
- window = glfwCreateWindow( 1024, 768, "Tutorial 04 - Colored Cube", NULL, NULL);
- if( window == NULL ){
- fprintf( stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.n" );
- glfwTerminate();
- return -1;
- }
- glfwMakeContextCurrent(window);
- // Initialize GLEW
- glewExperimental = true; // Needed for core profile
- if (glewInit() != GLEW_OK) {
- fprintf(stderr, "Failed to initialize GLEWn");
- return -1;
- }
- // Ensure we can capture the escape key being pressed below
- glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
- // Dark blue background
- glClearColor(0.0f, 0.0f, 0.4f, 0.0f);
- // Enable depth test
- glEnable(GL_DEPTH_TEST);
- // Accept fragment if it closer to the camera than the former one
- glDepthFunc(GL_LESS);
- GLuint VertexArrayID;
- glGenVertexArrays(1, &VertexArrayID);
- glBindVertexArray(VertexArrayID);
- // Create and compile our GLSL program from the shaders
- GLuint programID = LoadShaders( "TransformVertexShader.vertexshader", "ColorFragmentShader.fragmentshader" );
- // Get a handle for our "MVP" uniform
- GLuint MatrixID = glGetUniformLocation(programID, "MVP");
- // Projection matrix : 45° Field of View, 4:3 ratio, display range : 0.1 unit <-> 100 units
- glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
- // Camera matrix
- glm::mat4 View = glm::lookAt(
- glm::vec3(4,3,-3), // Camera is at (4,3,-3), in World Space
- glm::vec3(0,0,0), // and looks at the origin
- glm::vec3(0,1,0) // Head is up (set to 0,-1,0 to look upside-down)
- );
- // Model matrix : an identity matrix (model will be at the origin)
- glm::mat4 Model = glm::mat4(1.0f);
- // Our ModelViewProjection : multiplication of our 3 matrices
- glm::mat4 MVP = Projection * View * Model; // Remember, matrix multiplication is the other way around
- // Our vertices. Tree consecutive floats give a 3D vertex; Three consecutive vertices give a triangle.
- // A cube has 6 faces with 2 triangles each, so this makes 6*2=12 triangles, and 12*3 vertices
- static const GLfloat g_vertex_buffer_data[] = {
- -1.0f,-1.0f,-1.0f,
- -1.0f,-1.0f, 1.0f,
- -1.0f, 1.0f, 1.0f,
- 1.0f, 1.0f,-1.0f,
- -1.0f,-1.0f,-1.0f,
- -1.0f, 1.0f,-1.0f,
- 1.0f,-1.0f, 1.0f,
- -1.0f,-1.0f,-1.0f,
- 1.0f,-1.0f,-1.0f,
- 1.0f, 1.0f,-1.0f,
- 1.0f,-1.0f,-1.0f,
- -1.0f,-1.0f,-1.0f,
- -1.0f,-1.0f,-1.0f,
- -1.0f, 1.0f, 1.0f,
- -1.0f, 1.0f,-1.0f,
- 1.0f,-1.0f, 1.0f,
- -1.0f,-1.0f, 1.0f,
- -1.0f,-1.0f,-1.0f,
- -1.0f, 1.0f, 1.0f,
- -1.0f,-1.0f, 1.0f,
- 1.0f,-1.0f, 1.0f,
- 1.0f, 1.0f, 1.0f,
- 1.0f,-1.0f,-1.0f,
- 1.0f, 1.0f,-1.0f,
- 1.0f,-1.0f,-1.0f,
- 1.0f, 1.0f, 1.0f,
- 1.0f,-1.0f, 1.0f,
- 1.0f, 1.0f, 1.0f,
- 1.0f, 1.0f,-1.0f,
- -1.0f, 1.0f,-1.0f,
- 1.0f, 1.0f, 1.0f,
- -1.0f, 1.0f,-1.0f,
- -1.0f, 1.0f, 1.0f,
- 1.0f, 1.0f, 1.0f,
- -1.0f, 1.0f, 1.0f,
- 1.0f,-1.0f, 1.0f
- };
- // One color for each vertex. They were generated randomly.
- static const GLfloat g_color_buffer_data[] = {
- 0.583f, 0.771f, 0.014f,
- 0.609f, 0.115f, 0.436f,
- 0.327f, 0.483f, 0.844f,
- 0.822f, 0.569f, 0.201f,
- 0.435f, 0.602f, 0.223f,
- 0.310f, 0.747f, 0.185f,
- 0.597f, 0.770f, 0.761f,
- 0.559f, 0.436f, 0.730f,
- 0.359f, 0.583f, 0.152f,
- 0.483f, 0.596f, 0.789f,
- 0.559f, 0.861f, 0.639f,
- 0.195f, 0.548f, 0.859f,
- 0.014f, 0.184f, 0.576f,
- 0.771f, 0.328f, 0.970f,
- 0.406f, 0.615f, 0.116f,
- 0.676f, 0.977f, 0.133f,
- 0.971f, 0.572f, 0.833f,
- 0.140f, 0.616f, 0.489f,
- 0.997f, 0.513f, 0.064f,
- 0.945f, 0.719f, 0.592f,
- 0.543f, 0.021f, 0.978f,
- 0.279f, 0.317f, 0.505f,
- 0.167f, 0.620f, 0.077f,
- 0.347f, 0.857f, 0.137f,
- 0.055f, 0.953f, 0.042f,
- 0.714f, 0.505f, 0.345f,
- 0.783f, 0.290f, 0.734f,
- 0.722f, 0.645f, 0.174f,
- 0.302f, 0.455f, 0.848f,
- 0.225f, 0.587f, 0.040f,
- 0.517f, 0.713f, 0.338f,
- 0.053f, 0.959f, 0.120f,
- 0.393f, 0.621f, 0.362f,
- 0.673f, 0.211f, 0.457f,
- 0.820f, 0.883f, 0.371f,
- 0.982f, 0.099f, 0.879f
- };
- GLuint vertexbuffer;
- glGenBuffers(1, &vertexbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
- glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
- GLuint colorbuffer;
- glGenBuffers(1, &colorbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);
- glBufferData(GL_ARRAY_BUFFER, sizeof(g_color_buffer_data), g_color_buffer_data, GL_STATIC_DRAW);
- do{
- // Clear the screen
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- // Use our shader
- glUseProgram(programID);
- // Send our transformation to the currently bound shader,
- // in the "MVP" uniform
- glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);
- // 1rst attribute buffer : vertices
- glEnableVertexAttribArray(0);
- glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
- glVertexAttribPointer(
- 0, // attribute. No particular reason for 0, but must match the layout in the shader.
- 3, // size
- GL_FLOAT, // type
- GL_FALSE, // normalized?
- 0, // stride
- (void*)0 // array buffer offset
- );
- // 2nd attribute buffer : colors
- glEnableVertexAttribArray(1);
- glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);
- glVertexAttribPointer(
- 1, // attribute. No particular reason for 1, but must match the layout in the shader.
- 3, // size
- GL_FLOAT, // type
- GL_FALSE, // normalized?
- 0, // stride
- (void*)0 // array buffer offset
- );
- // Draw the triangle !
- glDrawArrays(GL_TRIANGLES, 0, 12*3); // 12*3 indices starting at 0 -> 12 triangles
- glDisableVertexAttribArray(0);
- glDisableVertexAttribArray(1);
- // Swap buffers
- glfwSwapBuffers(window);
- glfwPollEvents();
- } // Check if the ESC key was pressed or the window was closed
- while( glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS &&
- glfwWindowShouldClose(window) == 0 );
- // Cleanup VBO and shader
- glDeleteBuffers(1, &vertexbuffer);
- glDeleteBuffers(1, &colorbuffer);
- glDeleteProgram(programID);
- glDeleteVertexArrays(1, &VertexArrayID);
- // Close OpenGL window and terminate GLFW
- glfwTerminate();
- return 0;
- }
- #include <stdio.h>
- #include <string>
- #include <vector>
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- using namespace std;
- #include <stdlib.h>
- #include <string.h>
- #include <GL/glew.h>
- #include "shader.hpp"
- GLuint LoadShaders(const char * vertex_file_path,const char * fragment_file_path){
- // Create the shaders
- GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER);
- GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
- // Read the Vertex Shader code from the file
- std::string VertexShaderCode;
- std::ifstream VertexShaderStream(vertex_file_path, std::ios::in);
- if(VertexShaderStream.is_open()){
- std::string Line = "";
- while(getline(VertexShaderStream, Line))
- VertexShaderCode += "n" + Line;
- VertexShaderStream.close();
- }else{
- printf("Impossible to open %s. Are you in the right directory ? Don't forget to read the FAQ !n", vertex_file_path);
- getchar();
- return 0;
- }
- // Read the Fragment Shader code from the file
- std::string FragmentShaderCode;
- std::ifstream FragmentShaderStream(fragment_file_path, std::ios::in);
- if(FragmentShaderStream.is_open()){
- std::string Line = "";
- while(getline(FragmentShaderStream, Line))
- FragmentShaderCode += "n" + Line;
- FragmentShaderStream.close();
- }
- GLint Result = GL_FALSE;
- int InfoLogLength;
- // Compile Vertex Shader
- printf("Compiling shader : %sn", vertex_file_path);
- char const * VertexSourcePointer = VertexShaderCode.c_str();
- glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL);
- glCompileShader(VertexShaderID);
- // Check Vertex Shader
- glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result);
- glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
- if ( InfoLogLength > 0 ){
- std::vector<char> VertexShaderErrorMessage(InfoLogLength+1);
- glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
- printf("%sn", &VertexShaderErrorMessage[0]);
- }
- // Compile Fragment Shader
- printf("Compiling shader : %sn", fragment_file_path);
- char const * FragmentSourcePointer = FragmentShaderCode.c_str();
- glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer , NULL);
- glCompileShader(FragmentShaderID);
- // Check Fragment Shader
- glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result);
- glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
- if ( InfoLogLength > 0 ){
- std::vector<char> FragmentShaderErrorMessage(InfoLogLength+1);
- glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
- printf("%sn", &FragmentShaderErrorMessage[0]);
- }
- // Link the program
- printf("Linking programn");
- GLuint ProgramID = glCreateProgram();
- glAttachShader(ProgramID, VertexShaderID);
- glAttachShader(ProgramID, FragmentShaderID);
- glLinkProgram(ProgramID);
- // Check the program
- glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result);
- glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
- if ( InfoLogLength > 0 ){
- std::vector<char> ProgramErrorMessage(InfoLogLength+1);
- glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
- printf("%sn", &ProgramErrorMessage[0]);
- }
- glDeleteShader(VertexShaderID);
- glDeleteShader(FragmentShaderID);
- return ProgramID;
- }
- using System;
- using OpenTK;
- using OpenTK.Graphics;
- using OpenTK.Input;
- using System.Windows.Forms;
- using System.IO;
- #if DEBUG
- using OpenTK.Graphics.OpenGL4;
- #else
- using OpenTK.Graphics.OpenGL;
- #endif
- namespace OpenTK_Test
- {
- class Game : GameWindow
- {
- /* Deklaration + Initialisierung */
- private Int32 vao; //aka VertexArrayID
- private Int32 vbo; //aka vertexbuffer
- private Int32 cbo; //aka colorbuffer
- private Int32 shaderProgram;//aka programID
- private Int32 MatrixID;
- private Matrix4 Projection;
- private Matrix4 View;
- private Matrix4 MVP;
- public Game()
- : base(1280, 720, GraphicsMode.Default, "OpenGL Test", GameWindowFlags.Default, DisplayDevice.Default, 4, 4, GraphicsContextFlags.ForwardCompatible)
- {
- VSync = VSyncMode.On;
- }
- /// <summary>
- /// Initialisierung
- /// </summary>
- /// <param name="e"></param>
- protected override void OnLoad(EventArgs e)
- {
- base.OnLoad(e);
- WindowBorder = WindowBorder.Hidden;
- //GL.Viewport(0, 0, Width, Height);
- Console.WriteLine("Spiel gestartetn");
- Console.WriteLine("Systeminfos:");
- Console.WriteLine("Renderer: " + GL.GetString(StringName.Renderer));
- Console.WriteLine("Unterstützte OpenGL Version: " + GL.GetString(StringName.Version));
- Console.WriteLine("Unterstützte GLSL Version: " + GL.GetString(StringName.ShadingLanguageVersion) + "n");
- Console.WriteLine("Spiel wird geladenn");
- /* Hintergrundfarbe */
- GL.ClearColor(0.0f, 0.0f, 0.4f, 0.0f);
- /* Fragments weiter hinten werden automatisch zuerst gerendert */
- GL.Enable(EnableCap.DepthTest);
- GL.DepthFunc(DepthFunction.Less);
- /* Vertex Array Object */
- GL.GenVertexArrays(1, out vao);
- GL.BindVertexArray(vao);
- /* GLSL Shader laden */
- shaderProgram = LoadShaders("vs.glsl", "fs.glsl");
- /* Matrizen */
- MatrixID = GL.GetUniformLocation(shaderProgram, "MVP");
- Projection = Matrix4.Perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
- View = Matrix4.LookAt(new Vector3(4, 3, -3), new Vector3(0, 0, 0), new Vector3(0, 1, 0));
- //Matrix4 Model = new Matrix4(1.0f);
- MVP = Projection * View;
- /* Vertices */
- var vertices = new Single[]
- {
- -1.0f,-1.0f,-1.0f,
- -1.0f,-1.0f, 1.0f,
- -1.0f, 1.0f, 1.0f,
- 1.0f, 1.0f,-1.0f,
- -1.0f,-1.0f,-1.0f,
- -1.0f, 1.0f,-1.0f,
- 1.0f,-1.0f, 1.0f,
- -1.0f,-1.0f,-1.0f,
- 1.0f,-1.0f,-1.0f,
- 1.0f, 1.0f,-1.0f,
- 1.0f,-1.0f,-1.0f,
- -1.0f,-1.0f,-1.0f,
- -1.0f,-1.0f,-1.0f,
- -1.0f, 1.0f, 1.0f,
- -1.0f, 1.0f,-1.0f,
- 1.0f,-1.0f, 1.0f,
- -1.0f,-1.0f, 1.0f,
- -1.0f,-1.0f,-1.0f,
- -1.0f, 1.0f, 1.0f,
- -1.0f,-1.0f, 1.0f,
- 1.0f,-1.0f, 1.0f,
- 1.0f, 1.0f, 1.0f,
- 1.0f,-1.0f,-1.0f,
- 1.0f, 1.0f,-1.0f,
- 1.0f,-1.0f,-1.0f,
- 1.0f, 1.0f, 1.0f,
- 1.0f,-1.0f, 1.0f,
- 1.0f, 1.0f, 1.0f,
- 1.0f, 1.0f,-1.0f,
- -1.0f, 1.0f,-1.0f,
- 1.0f, 1.0f, 1.0f,
- -1.0f, 1.0f,-1.0f,
- -1.0f, 1.0f, 1.0f,
- 1.0f, 1.0f, 1.0f,
- -1.0f, 1.0f, 1.0f,
- 1.0f,-1.0f, 1.0f
- };
- /* Farben */
- var color = new Single[]
- {
- 0.583f, 0.771f, 0.014f,
- 0.609f, 0.115f, 0.436f,
- 0.327f, 0.483f, 0.844f,
- 0.822f, 0.569f, 0.201f,
- 0.435f, 0.602f, 0.223f,
- 0.310f, 0.747f, 0.185f,
- 0.597f, 0.770f, 0.761f,
- 0.559f, 0.436f, 0.730f,
- 0.359f, 0.583f, 0.152f,
- 0.483f, 0.596f, 0.789f,
- 0.559f, 0.861f, 0.639f,
- 0.195f, 0.548f, 0.859f,
- 0.014f, 0.184f, 0.576f,
- 0.771f, 0.328f, 0.970f,
- 0.406f, 0.615f, 0.116f,
- 0.676f, 0.977f, 0.133f,
- 0.971f, 0.572f, 0.833f,
- 0.140f, 0.616f, 0.489f,
- 0.997f, 0.513f, 0.064f,
- 0.945f, 0.719f, 0.592f,
- 0.543f, 0.021f, 0.978f,
- 0.279f, 0.317f, 0.505f,
- 0.167f, 0.620f, 0.077f,
- 0.347f, 0.857f, 0.137f,
- 0.055f, 0.953f, 0.042f,
- 0.714f, 0.505f, 0.345f,
- 0.783f, 0.290f, 0.734f,
- 0.722f, 0.645f, 0.174f,
- 0.302f, 0.455f, 0.848f,
- 0.225f, 0.587f, 0.040f,
- 0.517f, 0.713f, 0.338f,
- 0.053f, 0.959f, 0.120f,
- 0.393f, 0.621f, 0.362f,
- 0.673f, 0.211f, 0.457f,
- 0.820f, 0.883f, 0.371f,
- 0.982f, 0.099f, 0.879f
- };
- /* Vertex Buffer Object */
- GL.GenBuffers(1, out vbo);
- GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
- GL.BufferData(BufferTarget.ArrayBuffer, new IntPtr(vertices.Length), vertices, BufferUsageHint.StaticDraw);
- /* Color Buffer Object */
- GL.GenBuffers(1, out cbo);
- GL.BindBuffer(BufferTarget.ArrayBuffer, cbo);
- GL.BufferData(BufferTarget.ArrayBuffer, new IntPtr(vertices.Length), color, BufferUsageHint.StaticDraw);
- GL.Viewport(0, 0, Width, Height);
- Console.WriteLine("Spiel geladenn");
- }
- protected override void OnResize(EventArgs e)
- {
- base.OnResize(e);
- }
- protected override void OnUpdateFrame(FrameEventArgs e)
- {
- base.OnUpdateFrame(e);
- if (Keyboard[Key.Escape])
- {
- Exit();
- }
- }
- protected override void OnRenderFrame(FrameEventArgs e)
- {
- base.OnRenderFrame(e);
- /* Bildschirm loeschen */
- GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
- /* Shader benutzen */
- GL.UseProgram(shaderProgram);
- GL.UniformMatrix4(MatrixID, false, ref MVP);
- /* 1. Attribut */
- GL.EnableVertexAttribArray(0);
- GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
- GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 0, IntPtr.Zero);
- /* 2. Attribut */
- GL.EnableVertexAttribArray(1);
- GL.BindBuffer(BufferTarget.ArrayBuffer, cbo);
- GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, false, 0, IntPtr.Zero);
- /* Zeichnen */
- GL.DrawArrays(PrimitiveType.Triangles, 0, 12 * 3);
- GL.DisableVertexAttribArray(0);
- GL.DisableVertexAttribArray(1);
- /* Szene anzeigen */
- GL.Flush();
- SwapBuffers();
- }
- protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
- {
- Console.WriteLine("Spiel wird beendet");
- GL.DeleteProgram(shaderProgram);
- GL.DeleteBuffers(1, ref cbo);
- GL.DeleteBuffers(1, ref vbo);
- GL.DeleteVertexArrays(1, ref vao);
- }
- /// <summary>
- /// Shaderdatei laden
- /// </summary>
- /// <param name="vertexFilePath"></param>
- /// <param name="fragmentFilePath"></param>
- /// <returns></returns>
- private Int32 LoadShaders(string vertexFilePath, string fragmentFilePath)
- {
- Int32 vertexShader;
- Int32 fragmentShader;
- Int32 shaderProgram;
- /* Vertex Shader */
- vertexShader = GL.CreateShader(ShaderType.VertexShader);
- GL.ShaderSource(vertexShader, File.ReadAllText(vertexFilePath));
- Console.WriteLine("Vertex Shader wird kompiliert");
- GL.CompileShader(vertexShader);
- if (GL.GetShaderInfoLog(vertexShader) == "")
- {
- Console.WriteLine("Vertex Shader erfolgreich kompiliertn");
- }
- else
- {
- Console.WriteLine("!!! Vertex Shader fehlerhaft: !!!");
- Console.Write(GL.GetShaderInfoLog(vertexShader));
- }
- /* Fragment Shader */
- fragmentShader = GL.CreateShader(ShaderType.FragmentShader);
- GL.ShaderSource(fragmentShader, File.ReadAllText(fragmentFilePath));
- Console.WriteLine("Fragment Shader wird kompiliert");
- GL.CompileShader(fragmentShader);
- if (GL.GetShaderInfoLog(fragmentShader) == "")
- {
- Console.WriteLine("Fragment Shader erfolgreich kompiliertn");
- }
- else
- {
- Console.WriteLine("!!! Fragment Shader fehlerhaft: !!!");
- Console.WriteLine(GL.GetShaderInfoLog(fragmentShader));
- }
- /* Shader Progrm */
- shaderProgram = GL.CreateProgram();
- GL.AttachShader(shaderProgram, vertexShader);
- GL.AttachShader(shaderProgram, fragmentShader);
- GL.BindFragDataLocation(shaderProgram, 0, "outColor");
- Console.WriteLine("Shader werden mit dem Programmobjekt gelinkt");
- GL.LinkProgram(shaderProgram);
- Console.WriteLine("Shader mit dem Programmobjekt gelinkt:");
- Console.WriteLine(GL.GetShaderInfoLog(shaderProgram));
- /* Shader loeschen */
- GL.DeleteShader(fragmentShader);
- GL.DeleteShader(vertexShader);
- return shaderProgram;
- }
- [STAThread]
- static void Main()
- {
- Console.Title = "OpenTK Test - log";
- Console.ForegroundColor = ConsoleColor.Cyan;
- Console.WriteLine("Spiel wird gestartet");
- using (Game game = new Game())
- {
- game.Run(30.0);
- }
- Console.WriteLine("Spiel beendetn");
- Console.ReadLine();
- }
- }
- }
- #version 330 core
- // Input vertex data, different for all executions of this shader.
- layout(location = 0) in vec3 vertexPosition_modelspace;
- layout(location = 1) in vec3 vertexColor;
- // Output data ; will be interpolated for each fragment.
- out vec3 fragmentColor;
- // Values that stay constant for the whole mesh.
- uniform mat4 MVP;
- void main()
- {
- // Output position of the vertex, in clip space : MVP * position
- gl_Position = MVP * vec4(vertexPosition_modelspace,1);
- // The color of each vertex will be interpolated
- // to produce the color of each fragment
- fragmentColor = vertexColor;
- }
- #version 330 core
- // Interpolated values from the vertex shaders
- in vec3 fragmentColor;
- // Ouput data
- out vec3 color;
- void main()
- {
- // Output color = color specified in the vertex shader,
- // interpolated between all 3 surrounding vertices
- color = fragmentColor;
- }
- var posAttrib = GL.GetAttribLocation(shaderProgram, "position");
- GL.EnableVertexAttribArray(posAttrib);
- GL.VertexAttribPointer(posAttrib, 2, VertexAttribPointerType.Float, false, 5 * sizeof(Single), IntPtr.Zero);
- var colAttrib = GL.GetAttribLocation(shaderProgram, "color");
- GL.EnableVertexAttribArray(colAttrib);
- GL.VertexAttribPointer(colAttrib, 3, VertexAttribPointerType.Float, false, 5 * sizeof(Single), new IntPtr(2 * sizeof(Single)));
- /* 1. Attribut */
- GL.EnableVertexAttribArray(0);
- GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
- GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 0, IntPtr.Zero);
- /* 2. Attribut */
- GL.EnableVertexAttribArray(1);
- GL.BindBuffer(BufferTarget.ArrayBuffer, cbo);
- GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, false, 0, IntPtr.Zero);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement