draw triangle
This commit is contained in:
parent
c098a3d0b9
commit
e2a45d1bec
1
Makefile
1
Makefile
@ -87,6 +87,7 @@ clean:
|
||||
MAIN_OBJS = \
|
||||
src/main.o \
|
||||
src/glad.o \
|
||||
src/opengl.o \
|
||||
$(patsubst %.glsl,%.glsl.o,$(wildcard src/shader/*.glsl)) \
|
||||
$(GLFW)
|
||||
|
||||
|
||||
46
src/main.c
46
src/main.c
@ -7,9 +7,13 @@
|
||||
#include "shader/vertex_color.fp.glsl.h"
|
||||
#include "shader/vertex_color.vp.glsl.h"
|
||||
|
||||
#include "opengl.h"
|
||||
|
||||
static int vp_width = 800;
|
||||
static int vp_height = 600;
|
||||
|
||||
typedef unsigned int uint;
|
||||
|
||||
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
|
||||
{
|
||||
glViewport(0, 0, width, height);
|
||||
@ -59,16 +63,17 @@ int main()
|
||||
// buffer initialization
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
/*
|
||||
unsigned int triangle_vertex_buffer = make_buffer(GL_ARRAY_BUFFER,
|
||||
triangle_vertex_buffer_data,
|
||||
(sizeof (triangle_vertex_buffer_data)));
|
||||
*/
|
||||
uint triangle_vertex_buffer = make_buffer(GL_ARRAY_BUFFER,
|
||||
triangle_vertex_buffer_data,
|
||||
(sizeof (triangle_vertex_buffer_data)));
|
||||
|
||||
/*
|
||||
vertex_color.program = compile_shaders("src/vertex_color.vp.glsl",
|
||||
"src/vertex_color_fp_render.fp.glsl");
|
||||
*/
|
||||
uint vertex_color_program = compile_shader(src_shader_vertex_color_vp_glsl_start,
|
||||
src_shader_vertex_color_vp_glsl_size,
|
||||
src_shader_vertex_color_fp_glsl_start,
|
||||
src_shader_vertex_color_fp_glsl_size);
|
||||
glUseProgram(vertex_color_program);
|
||||
uint vertex_color_attrib_position = glGetAttribLocation(vertex_color_program, "position");
|
||||
uint vertex_color_attrib_color = glGetAttribLocation(vertex_color_program, "color");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// main loop
|
||||
@ -82,6 +87,29 @@ int main()
|
||||
while(!glfwWindowShouldClose(window)) {
|
||||
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
|
||||
glfwSetWindowShouldClose(window, true);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, triangle_vertex_buffer);
|
||||
glVertexAttribPointer(vertex_color_attrib_position,
|
||||
3,
|
||||
GL_FLOAT,
|
||||
GL_FALSE,
|
||||
(sizeof (float)) * 6,
|
||||
(void*)0
|
||||
);
|
||||
glVertexAttribPointer(vertex_color_attrib_color,
|
||||
3,
|
||||
GL_FLOAT,
|
||||
GL_FALSE,
|
||||
(sizeof (float)) * 6,
|
||||
(void*)(3 * 4)
|
||||
);
|
||||
glEnableVertexAttribArray(vertex_color_attrib_position);
|
||||
glEnableVertexAttribArray(vertex_color_attrib_color);
|
||||
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||
|
||||
glfwSwapBuffers(window);
|
||||
glfwPollEvents();
|
||||
}
|
||||
|
||||
glfwTerminate();
|
||||
|
||||
98
src/opengl.c
98
src/opengl.c
@ -1,58 +1,62 @@
|
||||
unsigned int compile_shader(const char * vp_path, const char * fp_path)
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "glad/glad.h"
|
||||
|
||||
unsigned int compile_shader(const void * vp,
|
||||
const int vp_length,
|
||||
const void * fp,
|
||||
const int fp_length)
|
||||
{
|
||||
void * vertexShaderSource = read_file(vp_path);
|
||||
unsigned int vertexShader;
|
||||
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
||||
glShaderSource(vertexShader, 1, (const char **)&vertexShaderSource, NULL);
|
||||
glCompileShader(vertexShader);
|
||||
unsigned int vertex_shader;
|
||||
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
|
||||
glShaderSource(vertex_shader, 1, (const char **)&vp, &vp_length);
|
||||
glCompileShader(vertex_shader);
|
||||
{
|
||||
int success;
|
||||
char infoLog[512];
|
||||
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
|
||||
char info_log[512];
|
||||
glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success);
|
||||
if(!success) {
|
||||
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
|
||||
printf("vertex shader compile failed:\n%s\n", infoLog);
|
||||
}
|
||||
}
|
||||
free(vertexShaderSource);
|
||||
|
||||
void * fragmentShaderSource = read_file(fp_path);
|
||||
unsigned int fragmentShader;
|
||||
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
glShaderSource(fragmentShader, 1, (const char **)&fragmentShaderSource, NULL);
|
||||
glCompileShader(fragmentShader);
|
||||
{
|
||||
int success;
|
||||
char infoLog[512];
|
||||
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
|
||||
if(!success) {
|
||||
glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
|
||||
printf("fragment shader compile failed:\n%s\n", infoLog);
|
||||
}
|
||||
}
|
||||
free(fragmentShaderSource);
|
||||
|
||||
unsigned int shaderProgram;
|
||||
shaderProgram = glCreateProgram();
|
||||
|
||||
glAttachShader(shaderProgram, vertexShader);
|
||||
glAttachShader(shaderProgram, fragmentShader);
|
||||
glLinkProgram(shaderProgram);
|
||||
|
||||
{
|
||||
int success;
|
||||
char infoLog[512];
|
||||
glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
|
||||
if(!success) {
|
||||
glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);
|
||||
printf("program link failed:\n%s\n", infoLog);
|
||||
glGetShaderInfoLog(vertex_shader, 512, NULL, info_log);
|
||||
fprintf(stderr, "vertex shader compile failed:\n%s\n", info_log);
|
||||
}
|
||||
}
|
||||
|
||||
glDeleteShader(vertexShader);
|
||||
glDeleteShader(fragmentShader);
|
||||
unsigned int fragment_shader;
|
||||
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
glShaderSource(fragment_shader, 1, (const char **)&fp, &fp_length);
|
||||
glCompileShader(fragment_shader);
|
||||
{
|
||||
int success;
|
||||
char info_log[512];
|
||||
glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &success);
|
||||
if(!success) {
|
||||
glGetShaderInfoLog(fragment_shader, 512, NULL, info_log);
|
||||
fprintf(stderr, "fragment shader compile failed:\n%s\n", info_log);
|
||||
}
|
||||
}
|
||||
|
||||
return shaderProgram;
|
||||
unsigned int shader_program;
|
||||
shader_program = glCreateProgram();
|
||||
|
||||
glAttachShader(shader_program, vertex_shader);
|
||||
glAttachShader(shader_program, fragment_shader);
|
||||
glLinkProgram(shader_program);
|
||||
|
||||
{
|
||||
int success;
|
||||
char info_log[512];
|
||||
glGetProgramiv(shader_program, GL_LINK_STATUS, &success);
|
||||
if(!success) {
|
||||
glGetProgramInfoLog(shader_program, 512, NULL, info_log);
|
||||
fprintf(stderr, "program link failed:\n%s\n", info_log);
|
||||
}
|
||||
}
|
||||
|
||||
glDeleteShader(vertex_shader);
|
||||
glDeleteShader(fragment_shader);
|
||||
|
||||
return shader_program;
|
||||
}
|
||||
|
||||
int make_buffer(unsigned int target,
|
||||
|
||||
8
src/opengl.h
Normal file
8
src/opengl.h
Normal file
@ -0,0 +1,8 @@
|
||||
unsigned int compile_shader(const void * vp,
|
||||
const size_t vp_length,
|
||||
const void * fp,
|
||||
const size_t fp_length);
|
||||
|
||||
int make_buffer(unsigned int target,
|
||||
const void * data,
|
||||
size_t size);
|
||||
Loading…
x
Reference in New Issue
Block a user