Guest User

Untitled

a guest
Aug 21st, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. #include"reader.h"
  2. #include"window.h"
  3. #include"shader.h"
  4. int main() {
  5.  
  6. float vertices[] = {
  7. -0.5f, -0.5f, 0.0f ,
  8. 0.5f, -0.5f, 0.0f ,
  9. 0.0f, 0.5f, 0.0f
  10. };
  11.  
  12. Window window;
  13.  
  14. GLuint vao;
  15. glGenVertexArrays(1, &vao);
  16. glBindVertexArray(vao);
  17.  
  18. Shader shader;
  19. shader.addShader("./src/shaders/basic.vtx",GL_VERTEX_SHADER);
  20. shader.addShader("./src/shaders/basic.frg", GL_FRAGMENT_SHADER);
  21. shader.compile();
  22. shader.enable();
  23.  
  24.  
  25. GLuint vbo;
  26. glGenBuffers(1, &vbo);
  27. glBindBuffer(GL_ARRAY_BUFFER, vbo);
  28. glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices,GL_STATIC_DRAW);
  29.  
  30. GLint pos_in = glGetAttribLocation(shader.getProgram(), "pos_in");
  31. if (pos_in < 0) {
  32. std::cout << "pos_in not foundn";
  33. }
  34. glVertexAttribPointer(pos_in, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *)0);
  35. glEnableVertexAttribArray(pos_in);
  36.  
  37.  
  38. while (!window.closed()) {
  39. window.update();
  40. glDrawArrays(GL_TRIANGLES,0,3);
  41. }
  42. return 0;
  43. }
  44.  
  45. #pragma once
  46. #include<glad/glad.h>
  47. #include<iostream>
  48. #include<vector>
  49. #include"reader.h"
  50.  
  51. class Shader {
  52. std::vector<GLuint> shaders;
  53. GLuint program;
  54.  
  55. public :
  56.  
  57. GLuint& getProgram() {
  58. return program;
  59. }
  60.  
  61. Shader() {
  62. program = glCreateProgram();
  63. }
  64. void addShader(const char * path, GLenum type) {
  65.  
  66. std::string data = ShaderReader(path).read_shader();
  67. const char * chardata = data.c_str();
  68. GLuint shader = glCreateShader(type);
  69. glShaderSource(shader, 1, &chardata , nullptr);
  70. glCompileShader(shader);
  71.  
  72. int success;
  73. char buffer[512];
  74. glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
  75. if (!success) {
  76. glGetShaderInfoLog(shader, 512, NULL, buffer);
  77. std::cout << buffer << std::endl;
  78. return;
  79. }
  80. std::cout << "shader inserted into vectorn";
  81.  
  82. shaders.push_back(shader);
  83. }
  84.  
  85. void compile(){
  86. for (int i = 0; i != shaders.size();i++) {
  87. glAttachShader(program, shaders[i]);
  88. }
  89. glLinkProgram(program);
  90. glValidateProgram(program);
  91. glUseProgram(program);
  92. int status;
  93. glGetProgramiv(program, GL_COMPILE_STATUS, &status);
  94.  
  95. char buffer[512];
  96. if (!status) {
  97. glGetProgramInfoLog(program,512,NULL,buffer);
  98. std::cout << buffer << std::endl;
  99. return;
  100. }
  101. std::cout << "shader compilation successfuln";
  102. }
  103. void enable() {
  104. glUseProgram(program);
  105. }
  106. void disable() {
  107. glUseProgram(0);
  108. }
  109. ~Shader() {
  110. for (int i = 0; i != shaders.size();i++) {
  111. glDeleteShader(shaders[i]);
  112. }
  113. }
  114.  
  115. };
  116.  
  117. #version 400
  118.  
  119. layout (location = 0 ) in vec3 pos_in ;
  120.  
  121. void main(){
  122. gl_Position = vec4(pos_in.x , pos_in.y , pos_in.z , 1.0f);
  123. }
  124.  
  125. #version 400
  126.  
  127. out vec4 color;
  128.  
  129. void main(){
  130. color = vec4(0.0f, 0.5f , 0.5f , 1.0f);
  131. }
Add Comment
Please, Sign In to add comment