| 21 | } |
| 22 | |
| 23 | void opengl_embed::create_shaders() { |
| 24 | // Create shaders |
| 25 | const char *draw_2d_single_color_vertex_shader_source = |
| 26 | "#version 330 core\n" |
| 27 | "layout (location = 0) in vec2 aPos;\n" |
| 28 | "uniform float windowHeight;\n" |
| 29 | "uniform float windowWidth;\n" |
| 30 | //"out vec4 vertexColor;\n" |
| 31 | "void main()\n" |
| 32 | "{\n" |
| 33 | " gl_Position = vec4((aPos.x/windowWidth)*2-1, (aPos.y/windowHeight)*2-1, 0.0, 1.0);" |
| 34 | //" vertexColor = aColor;\n" |
| 35 | "}\0"; |
| 36 | unsigned int draw_2d_single_color_vertex_shader; |
| 37 | draw_2d_single_color_vertex_shader = glCreateShader(GL_VERTEX_SHADER); |
| 38 | glShaderSource(draw_2d_single_color_vertex_shader, 1, &draw_2d_single_color_vertex_shader_source, NULL); |
| 39 | glCompileShader(draw_2d_single_color_vertex_shader); |
| 40 | int success; |
| 41 | char info_log[512]; |
| 42 | glGetShaderiv(draw_2d_single_color_vertex_shader, GL_COMPILE_STATUS, &success); |
| 43 | if (!success) { |
| 44 | glGetShaderInfoLog(draw_2d_single_color_vertex_shader, 512, NULL, info_log); |
| 45 | throw std::runtime_error( |
| 46 | std::string("ERROR::SHADER::VERTEX::COMPILATION_FAILED\n") + |
| 47 | info_log); |
| 48 | } |
| 49 | |
| 50 | // create and compile fragment shader |
| 51 | const char *draw_2d_single_color_fragment_shader_source = |
| 52 | "#version 330 core\n" |
| 53 | "out vec4 FragColor;\n" |
| 54 | "\n" |
| 55 | "uniform vec4 ourColor;\n" |
| 56 | "\n" |
| 57 | "void main()\n" |
| 58 | "{\n" |
| 59 | " FragColor = ourColor;\n" |
| 60 | "}"; |
| 61 | unsigned int draw_2d_single_color_fragment_shader; |
| 62 | draw_2d_single_color_fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); |
| 63 | glShaderSource(draw_2d_single_color_fragment_shader, 1, &draw_2d_single_color_fragment_shader_source, NULL); |
| 64 | glCompileShader(draw_2d_single_color_fragment_shader); |
| 65 | glGetShaderiv(draw_2d_single_color_fragment_shader, GL_COMPILE_STATUS, &success); |
| 66 | if (!success) { |
| 67 | glGetShaderInfoLog(draw_2d_single_color_fragment_shader, 512, NULL, info_log); |
| 68 | throw std::runtime_error( |
| 69 | std::string("ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n") + |
| 70 | info_log); |
| 71 | } |
| 72 | |
| 73 | // Link shaders into shader program |
| 74 | draw_2d_single_color_shader_program_ = glCreateProgram(); |
| 75 | glAttachShader(draw_2d_single_color_shader_program_, draw_2d_single_color_vertex_shader); |
| 76 | glAttachShader(draw_2d_single_color_shader_program_, draw_2d_single_color_fragment_shader); |
| 77 | glLinkProgram(draw_2d_single_color_shader_program_); |
| 78 | // check if linking was successful |
| 79 | glGetProgramiv(draw_2d_single_color_shader_program_, GL_LINK_STATUS, &success); |
| 80 | if (!success) { |
nothing calls this directly
no outgoing calls
no test coverage detected