draw triangle
This commit is contained in:
parent
c098a3d0b9
commit
e2a45d1bec
1
Makefile
1
Makefile
@ -87,6 +87,7 @@ clean:
|
|||||||
MAIN_OBJS = \
|
MAIN_OBJS = \
|
||||||
src/main.o \
|
src/main.o \
|
||||||
src/glad.o \
|
src/glad.o \
|
||||||
|
src/opengl.o \
|
||||||
$(patsubst %.glsl,%.glsl.o,$(wildcard src/shader/*.glsl)) \
|
$(patsubst %.glsl,%.glsl.o,$(wildcard src/shader/*.glsl)) \
|
||||||
$(GLFW)
|
$(GLFW)
|
||||||
|
|
||||||
|
|||||||
42
src/main.c
42
src/main.c
@ -7,9 +7,13 @@
|
|||||||
#include "shader/vertex_color.fp.glsl.h"
|
#include "shader/vertex_color.fp.glsl.h"
|
||||||
#include "shader/vertex_color.vp.glsl.h"
|
#include "shader/vertex_color.vp.glsl.h"
|
||||||
|
|
||||||
|
#include "opengl.h"
|
||||||
|
|
||||||
static int vp_width = 800;
|
static int vp_width = 800;
|
||||||
static int vp_height = 600;
|
static int vp_height = 600;
|
||||||
|
|
||||||
|
typedef unsigned int uint;
|
||||||
|
|
||||||
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
|
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
|
||||||
{
|
{
|
||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
@ -59,16 +63,17 @@ int main()
|
|||||||
// buffer initialization
|
// buffer initialization
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/*
|
uint triangle_vertex_buffer = make_buffer(GL_ARRAY_BUFFER,
|
||||||
unsigned int triangle_vertex_buffer = make_buffer(GL_ARRAY_BUFFER,
|
|
||||||
triangle_vertex_buffer_data,
|
triangle_vertex_buffer_data,
|
||||||
(sizeof (triangle_vertex_buffer_data)));
|
(sizeof (triangle_vertex_buffer_data)));
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
uint vertex_color_program = compile_shader(src_shader_vertex_color_vp_glsl_start,
|
||||||
vertex_color.program = compile_shaders("src/vertex_color.vp.glsl",
|
src_shader_vertex_color_vp_glsl_size,
|
||||||
"src/vertex_color_fp_render.fp.glsl");
|
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
|
// main loop
|
||||||
@ -82,6 +87,29 @@ int main()
|
|||||||
while(!glfwWindowShouldClose(window)) {
|
while(!glfwWindowShouldClose(window)) {
|
||||||
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
|
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
|
||||||
glfwSetWindowShouldClose(window, true);
|
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();
|
glfwTerminate();
|
||||||
|
|||||||
70
src/opengl.c
70
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 vertex_shader;
|
||||||
unsigned int vertexShader;
|
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
|
||||||
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
glShaderSource(vertex_shader, 1, (const char **)&vp, &vp_length);
|
||||||
glShaderSource(vertexShader, 1, (const char **)&vertexShaderSource, NULL);
|
glCompileShader(vertex_shader);
|
||||||
glCompileShader(vertexShader);
|
|
||||||
{
|
{
|
||||||
int success;
|
int success;
|
||||||
char infoLog[512];
|
char info_log[512];
|
||||||
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
|
glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success);
|
||||||
if(!success) {
|
if(!success) {
|
||||||
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
|
glGetShaderInfoLog(vertex_shader, 512, NULL, info_log);
|
||||||
printf("vertex shader compile failed:\n%s\n", infoLog);
|
fprintf(stderr, "vertex shader compile failed:\n%s\n", info_log);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(vertexShaderSource);
|
|
||||||
|
|
||||||
void * fragmentShaderSource = read_file(fp_path);
|
unsigned int fragment_shader;
|
||||||
unsigned int fragmentShader;
|
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||||
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
glShaderSource(fragment_shader, 1, (const char **)&fp, &fp_length);
|
||||||
glShaderSource(fragmentShader, 1, (const char **)&fragmentShaderSource, NULL);
|
glCompileShader(fragment_shader);
|
||||||
glCompileShader(fragmentShader);
|
|
||||||
{
|
{
|
||||||
int success;
|
int success;
|
||||||
char infoLog[512];
|
char info_log[512];
|
||||||
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
|
glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &success);
|
||||||
if(!success) {
|
if(!success) {
|
||||||
glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
|
glGetShaderInfoLog(fragment_shader, 512, NULL, info_log);
|
||||||
printf("fragment shader compile failed:\n%s\n", infoLog);
|
fprintf(stderr, "fragment shader compile failed:\n%s\n", info_log);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(fragmentShaderSource);
|
|
||||||
|
|
||||||
unsigned int shaderProgram;
|
unsigned int shader_program;
|
||||||
shaderProgram = glCreateProgram();
|
shader_program = glCreateProgram();
|
||||||
|
|
||||||
glAttachShader(shaderProgram, vertexShader);
|
glAttachShader(shader_program, vertex_shader);
|
||||||
glAttachShader(shaderProgram, fragmentShader);
|
glAttachShader(shader_program, fragment_shader);
|
||||||
glLinkProgram(shaderProgram);
|
glLinkProgram(shader_program);
|
||||||
|
|
||||||
{
|
{
|
||||||
int success;
|
int success;
|
||||||
char infoLog[512];
|
char info_log[512];
|
||||||
glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
|
glGetProgramiv(shader_program, GL_LINK_STATUS, &success);
|
||||||
if(!success) {
|
if(!success) {
|
||||||
glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);
|
glGetProgramInfoLog(shader_program, 512, NULL, info_log);
|
||||||
printf("program link failed:\n%s\n", infoLog);
|
fprintf(stderr, "program link failed:\n%s\n", info_log);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glDeleteShader(vertexShader);
|
glDeleteShader(vertex_shader);
|
||||||
glDeleteShader(fragmentShader);
|
glDeleteShader(fragment_shader);
|
||||||
|
|
||||||
return shaderProgram;
|
return shader_program;
|
||||||
}
|
}
|
||||||
|
|
||||||
int make_buffer(unsigned int target,
|
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