Advertisement
Guest User

OpenGL code

a guest
Feb 27th, 2015
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.98 KB | None | 0 0
  1. #include <SFML/Window.hpp>
  2. #include <GL/glew.h>
  3. #include <gl/GLU.h>
  4. #include <SFML/OpenGL.hpp>
  5.  
  6. #include <fstream>
  7.  
  8. GLuint LoadShaders(const char * vertex_file_path, const char * fragment_file_path){
  9.  
  10. // Create the shaders
  11. GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER);
  12. GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
  13.  
  14. // Read the Vertex Shader code from the file
  15. std::string VertexShaderCode;
  16. std::ifstream VertexShaderStream(vertex_file_path, std::ios::in);
  17. if (VertexShaderStream.is_open())
  18. {
  19. std::string Line = "";
  20. while (getline(VertexShaderStream, Line))
  21. VertexShaderCode += "\n" + Line;
  22. VertexShaderStream.close();
  23. }
  24.  
  25. // Read the Fragment Shader code from the file
  26. std::string FragmentShaderCode;
  27. std::ifstream FragmentShaderStream(fragment_file_path, std::ios::in);
  28. if (FragmentShaderStream.is_open()){
  29. std::string Line = "";
  30. while (getline(FragmentShaderStream, Line))
  31. FragmentShaderCode += "\n" + Line;
  32. FragmentShaderStream.close();
  33. }
  34. GLint Result = GL_FALSE;
  35. int InfoLogLength;
  36.  
  37. // Compile Vertex Shader
  38. printf("Compiling shader : %s\n", vertex_file_path);
  39. char const * VertexSourcePointer = VertexShaderCode.c_str();
  40. glShaderSource(VertexShaderID, 1, &VertexSourcePointer, NULL);
  41. glCompileShader(VertexShaderID);
  42.  
  43. // Check Vertex Shader
  44. glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result);
  45. glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
  46. std::vector<char> VertexShaderErrorMessage(InfoLogLength);
  47. glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
  48. fprintf(stdout, "%s\n", &VertexShaderErrorMessage[0]);
  49.  
  50. // Compile Fragment Shader
  51. printf("Compiling shader : %s\n", fragment_file_path);
  52. char const * FragmentSourcePointer = FragmentShaderCode.c_str();
  53. glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer, NULL);
  54. glCompileShader(FragmentShaderID);
  55.  
  56. // Check Fragment Shader
  57. glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result);
  58. glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
  59. std::vector<char> FragmentShaderErrorMessage(InfoLogLength);
  60. glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
  61. fprintf(stdout, "%s\n", &FragmentShaderErrorMessage[0]);
  62.  
  63. // Link the program
  64. fprintf(stdout, "Linking program\n");
  65. GLuint ProgramID = glCreateProgram();
  66. glAttachShader(ProgramID, VertexShaderID);
  67. glAttachShader(ProgramID, FragmentShaderID);
  68. glLinkProgram(ProgramID);
  69.  
  70. // Check the program
  71. glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result);
  72. glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
  73. std::vector<char> ProgramErrorMessage(std::max(InfoLogLength, int(1)));
  74. glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
  75. fprintf(stdout, "%s\n", &ProgramErrorMessage[0]);
  76.  
  77. glDeleteShader(VertexShaderID);
  78. glDeleteShader(FragmentShaderID);
  79.  
  80. return ProgramID;
  81. }
  82.  
  83. int main()
  84. {
  85. // create the window
  86. sf::Window window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(32));
  87. window.setVerticalSyncEnabled(true);
  88.  
  89. // load resources, initialize the OpenGL states, ...
  90.  
  91. glewInit();//Opens GL if you don't call will throw mem address error
  92. //points on our triangle.
  93. static const GLfloat vertexBD[] =
  94. {
  95. //Vertex buffer data; later: a vertex array object groups things into even larger groups.
  96. -1.0f, -1.0f, 0.0f, //point #1
  97. 1.0f, -1.0f, 0.0f, //point #2
  98. 0.0f, 1.0f, 0.0f //point #3
  99. };
  100. // Create and compile our GLSL program from the shaders
  101. GLuint programID = LoadShaders("SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader");
  102. // run the main loop
  103. bool running = true;
  104. while (running)
  105. {
  106. // handle events
  107. sf::Event event;
  108. while (window.pollEvent(event))
  109. {
  110. if (event.type == sf::Event::Closed)
  111. {
  112. // end the program
  113. running = false;
  114. }
  115. else if (event.type == sf::Event::Resized)
  116. {
  117. // adjust the viewport when the window is resized
  118. glViewport(0, 0, event.size.width, event.size.height);
  119. }
  120. }
  121.  
  122. // clear the buffers
  123.  
  124. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  125.  
  126. // Use our shader
  127. glUseProgram(programID);
  128. GLuint vertexBuffer;
  129. // draw...
  130. glGenBuffers(1, &vertexBuffer);
  131. glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
  132. glBufferData(GL_ARRAY_BUFFER, sizeof(vertexBD), vertexBD, GL_STATIC_DRAW);
  133.  
  134. glEnableVertexAttribArray(0);
  135. glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
  136. glVertexAttribPointer
  137. (
  138. 0,
  139. 3,
  140. GL_FLOAT,
  141. GL_FALSE,
  142. 0,
  143. (void*)0
  144. );
  145. //#define bascially associat this with the other
  146. //macro helps with optimization creation
  147. //#pragra locate .lib files
  148. //enums are weird and just define t hings, typedefs, yay
  149.  
  150. glDrawArrays(GL_TRIANGLES, 0, 3);
  151. glDisableVertexAttribArray(0);
  152. // end the current frame (internally swaps the front and back buffers)
  153. window.display();
  154. }
  155.  
  156. // release resources...
  157.  
  158. return 0;
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement