Advertisement
Guest User

my code

a guest
Nov 12th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.88 KB | None | 0 0
  1. #include <GL/glew.h>
  2. #include <GLFW/glfw3.h>
  3. #include <iostream>
  4.  
  5. static unsigned int CompileShader(unsigned int type, const std::string& source)
  6. {
  7. unsigned int id = glCreateShader(type);
  8. const char* src = source.c_str();
  9. glShaderSource(id, 1, &src, nullptr);
  10. glCompileShader(id);
  11.  
  12. int result;
  13. glGetShaderiv(id, GL_COMPILE_STATUS, &result);
  14. if (result == GL_FALSE)
  15. {
  16. int length;
  17. glGetShaderiv(id, GL_INFO_LOG_LENGTH, &length);
  18. char* message = (char*)alloca(length * sizeof(char));
  19. glGetShaderInfoLog(id, length, &length, message);
  20. std::cout << "Failed to compile " << (type == GL_VERTEX_SHADER ? "vertex" : "fragment")<<
  21. std::endl;
  22. std::cout << message << std::endl;
  23. glDeleteShader(id);
  24. return 0;
  25. }
  26.  
  27. return id;
  28. }
  29.  
  30. static unsigned int CreateShader(const std::string& vertexShader, const std::string& fragmentShader)
  31. {
  32. unsigned int program = glCreateProgram();
  33. unsigned int vs = glCreateShader(GL_VERTEX_SHADER);
  34. unsigned int fs = glCreateShader(GL_VERTEX_SHADER);
  35.  
  36. glAttachShader(program, vs);
  37. glAttachShader(program, fs);
  38. glLinkProgram(program);
  39. glValidateProgram(program);
  40.  
  41. glDeleteShader(vs);
  42. glDeleteShader(vs);
  43.  
  44. return program;
  45. }
  46. int main(void)
  47. {
  48. GLFWwindow* window;
  49.  
  50. /* Initialize the library */
  51. if (!glfwInit())
  52. return -1;
  53.  
  54. /* Create a windowed mode window and its OpenGL context */
  55. window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
  56. if (!window)
  57. {
  58. glfwTerminate();
  59. return -1;
  60. }
  61.  
  62. /* Make the window's context current */
  63. glfwMakeContextCurrent(window);
  64.  
  65.  
  66. if (glewInit() != GLEW_OK)
  67. {
  68. std::cout << "error" << std::endl;
  69. }
  70.  
  71. std::cout << glGetString(GL_VERSION) << std::endl;
  72.  
  73. float positions[6] = {
  74. -0.5f, -0.5f,
  75. 0.0f, 0.5f,
  76. 0.5f, -0.5F
  77.  
  78. };
  79.  
  80. unsigned int buffer;
  81. glGenBuffers(1, &buffer);
  82. glBindBuffer(GL_ARRAY_BUFFER, buffer);
  83. glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(float), positions, GL_STATIC_DRAW);
  84.  
  85. glEnableVertexAttribArray(0);
  86. glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);
  87.  
  88. glBindBuffer(GL_ARRAY_BUFFER, 0);
  89.  
  90. std::string vertexShader =
  91. "#version 330 core\n"
  92. "\n"
  93. "layout(location = 0)in vec4 position;\n"
  94. "\n"
  95. "void main()\n"
  96. "{\n"
  97. " gl_Position = position;\n"
  98. "}\n";
  99.  
  100. std::string fragmentShader =
  101. "#version 330 core\n"
  102. "\n"
  103. "layout(location = 0)in vec4 color;\n"
  104. "\n"
  105. "void main()\n"
  106. "{\n"
  107. " color = vec4(1.0, 0.0, 0.0, 1.0);\n"
  108. "}\n";
  109.  
  110. unsigned int shader = CreateShader(vertexShader, fragmentShader);
  111. glUseProgram(shader);
  112.  
  113. /* Loop until the user closes the window */
  114. while (!glfwWindowShouldClose(window))
  115. {
  116. /* Render here */
  117. glClear(GL_COLOR_BUFFER_BIT);
  118.  
  119. glDrawArrays(GL_TRIANGLES, 0, 3);
  120.  
  121. /* Swap front and back buffers */
  122. glfwSwapBuffers(window);
  123.  
  124. /* Poll for and process events */
  125. glfwPollEvents();
  126. }
  127.  
  128. glfwTerminate();
  129. return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement