Creates a program object using the specified vertex and fragment text */
| 239 | /* Creates a program object using the specified vertex and fragment text |
| 240 | */ |
| 241 | static GLuint make_shader_program(const char ** vertex_lines, size_t num_vertex_lines, |
| 242 | const char ** fragment_lines, size_t num_fragment_lines) |
| 243 | { |
| 244 | GLuint program = 0u; |
| 245 | GLint program_ok; |
| 246 | GLuint vertex_shader = 0u; |
| 247 | GLuint fragment_shader = 0u; |
| 248 | GLsizei log_length; |
| 249 | char info_log[8192]; |
| 250 | |
| 251 | vertex_shader = make_shader(GL_VERTEX_SHADER, vertex_lines, num_vertex_lines); |
| 252 | if (vertex_shader != 0u) |
| 253 | { |
| 254 | fragment_shader = make_shader(GL_FRAGMENT_SHADER, fragment_lines, num_fragment_lines); |
| 255 | if (fragment_shader != 0u) |
| 256 | { |
| 257 | /* make the program that connect the two shader and link it */ |
| 258 | program = glCreateProgram(); |
| 259 | if (program != 0u) |
| 260 | { |
| 261 | /* attach both shader and link */ |
| 262 | glAttachShader(program, vertex_shader); |
| 263 | glAttachShader(program, fragment_shader); |
| 264 | |
| 265 | glLinkProgram(program); |
| 266 | glGetProgramiv(program, GL_LINK_STATUS, &program_ok); |
| 267 | |
| 268 | if (program_ok != GL_TRUE) |
| 269 | { |
| 270 | fprintf(stderr, "ERROR, failed to link shader program\n"); |
| 271 | glGetProgramInfoLog(program, 8192, &log_length, info_log); |
| 272 | fprintf(stderr, "ERROR: \n%s\n\n", info_log); |
| 273 | glDeleteProgram(program); |
| 274 | glDeleteShader(fragment_shader); |
| 275 | glDeleteShader(vertex_shader); |
| 276 | program = 0u; |
| 277 | } |
| 278 | } |
| 279 | } |
| 280 | else |
| 281 | { |
| 282 | fprintf(stderr, "ERROR: Unable to load fragment shader\n"); |
| 283 | glDeleteShader(vertex_shader); |
| 284 | } |
| 285 | } |
| 286 | else |
| 287 | { |
| 288 | fprintf(stderr, "ERROR: Unable to load vertex shader\n"); |
| 289 | } |
| 290 | return program; |
| 291 | } |
| 292 | |
| 293 | |
| 294 | static const char * kRGBParams32[] = |
no test coverage detected