Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML/Window.hpp>
- #include <GL/glew.h>
- #include <gl/GLU.h>
- #include <SFML/OpenGL.hpp>
- #include <fstream>
- 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();
- }
- // 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 : %s\n", 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);
- std::vector<char> VertexShaderErrorMessage(InfoLogLength);
- glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
- fprintf(stdout, "%s\n", &VertexShaderErrorMessage[0]);
- // Compile Fragment Shader
- printf("Compiling shader : %s\n", 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);
- std::vector<char> FragmentShaderErrorMessage(InfoLogLength);
- glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
- fprintf(stdout, "%s\n", &FragmentShaderErrorMessage[0]);
- // Link the program
- fprintf(stdout, "Linking program\n");
- 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);
- std::vector<char> ProgramErrorMessage(std::max(InfoLogLength, int(1)));
- glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
- fprintf(stdout, "%s\n", &ProgramErrorMessage[0]);
- glDeleteShader(VertexShaderID);
- glDeleteShader(FragmentShaderID);
- return ProgramID;
- }
- int main()
- {
- // create the window
- sf::Window window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(32));
- window.setVerticalSyncEnabled(true);
- // load resources, initialize the OpenGL states, ...
- glewInit();//Opens GL if you don't call will throw mem address error
- //points on our triangle.
- static const GLfloat vertexBD[] =
- {
- //Vertex buffer data; later: a vertex array object groups things into even larger groups.
- -1.0f, -1.0f, 0.0f, //point #1
- 1.0f, -1.0f, 0.0f, //point #2
- 0.0f, 1.0f, 0.0f //point #3
- };
- // Create and compile our GLSL program from the shaders
- GLuint programID = LoadShaders("SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader");
- // run the main loop
- bool running = true;
- while (running)
- {
- // handle events
- sf::Event event;
- while (window.pollEvent(event))
- {
- if (event.type == sf::Event::Closed)
- {
- // end the program
- running = false;
- }
- else if (event.type == sf::Event::Resized)
- {
- // adjust the viewport when the window is resized
- glViewport(0, 0, event.size.width, event.size.height);
- }
- }
- // clear the buffers
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- // Use our shader
- glUseProgram(programID);
- GLuint vertexBuffer;
- // draw...
- glGenBuffers(1, &vertexBuffer);
- glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
- glBufferData(GL_ARRAY_BUFFER, sizeof(vertexBD), vertexBD, GL_STATIC_DRAW);
- glEnableVertexAttribArray(0);
- glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
- glVertexAttribPointer
- (
- 0,
- 3,
- GL_FLOAT,
- GL_FALSE,
- 0,
- (void*)0
- );
- //#define bascially associat this with the other
- //macro helps with optimization creation
- //#pragra locate .lib files
- //enums are weird and just define t hings, typedefs, yay
- glDrawArrays(GL_TRIANGLES, 0, 3);
- glDisableVertexAttribArray(0);
- // end the current frame (internally swaps the front and back buffers)
- window.display();
- }
- // release resources...
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement