base gameoflife graph
This commit is contained in:
parent
b21675e7c3
commit
763df573d8
6
build.sh
6
build.sh
@ -2,4 +2,8 @@
|
|||||||
|
|
||||||
set -xe
|
set -xe
|
||||||
|
|
||||||
gcc -Wall -Wextra -o main main.c
|
CFLAGS="-Wall -Wextra $(pkg-config --cflags sdl2 glew)"
|
||||||
|
LIBS="$(pkg-config --libs sdl2 glew)"
|
||||||
|
|
||||||
|
# gcc -Wall -Wextra -o gameoflife_term gameoflife_term.c
|
||||||
|
gcc ${CFLAGS} -o gameoflife_graph gameoflife_graph.c ${LIBS}
|
||||||
|
131
gameoflife_graph.c
Normal file
131
gameoflife_graph.c
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
#include <SDL2/SDL_events.h>
|
||||||
|
#include <GL/glew.h>
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
#include <SDL2/SDL_opengl.h>
|
||||||
|
#include <SDL2/SDL_opengl_glext.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define FACTOR 80
|
||||||
|
#define WIDTH ((FACTOR) * 16)
|
||||||
|
#define HEIGHT ((FACTOR) * 9)
|
||||||
|
|
||||||
|
SDL_Event e;
|
||||||
|
|
||||||
|
float vertices[] = {
|
||||||
|
0.0f, 0.5f,
|
||||||
|
0.5f, -0.5f,
|
||||||
|
-0.5f, -0.5f
|
||||||
|
};
|
||||||
|
|
||||||
|
char * read_file(const char* path){
|
||||||
|
FILE* file = fopen(path, "r");
|
||||||
|
|
||||||
|
fseek(file, 0, SEEK_END);
|
||||||
|
int eof = ftell(file);
|
||||||
|
fseek(file, 0, SEEK_SET);
|
||||||
|
|
||||||
|
char* file_content = malloc(eof * sizeof(char));
|
||||||
|
fread(file_content, sizeof(char), eof, file);
|
||||||
|
fclose(file);
|
||||||
|
return file_content;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint CompileShader(const char* data, GLenum type){
|
||||||
|
GLuint shader = glCreateShader(type);
|
||||||
|
glShaderSource(shader, 1, &data, NULL);
|
||||||
|
glCompileShader(shader);
|
||||||
|
|
||||||
|
GLint status;
|
||||||
|
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
|
||||||
|
char buffer[512];
|
||||||
|
glGetShaderInfoLog(shader, 512, NULL, buffer);
|
||||||
|
printf("%s", buffer);
|
||||||
|
|
||||||
|
return shader;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint LinkShader(GLuint vertexShader, GLuint fragmentShader){
|
||||||
|
GLuint shaderProgram = glCreateProgram();
|
||||||
|
glAttachShader(shaderProgram, vertexShader);
|
||||||
|
glAttachShader(shaderProgram, fragmentShader);
|
||||||
|
glLinkProgram(shaderProgram);
|
||||||
|
|
||||||
|
GLint status;
|
||||||
|
glGetProgramiv(shaderProgram, GL_LINK_STATUS, &status);
|
||||||
|
char buffer[512];
|
||||||
|
glGetProgramInfoLog(shaderProgram, 512, NULL, buffer);
|
||||||
|
printf("%s", buffer);
|
||||||
|
|
||||||
|
return shaderProgram;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
const char* vs = read_file("./shader.vs");
|
||||||
|
const char* fs = read_file("./shader.fs");
|
||||||
|
|
||||||
|
if(SDL_Init(SDL_INIT_EVENTS | SDL_INIT_VIDEO)){
|
||||||
|
SDL_Log("Unable to initialize SDL: %s", SDL_GetError());
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Window *win;
|
||||||
|
|
||||||
|
win = SDL_CreateWindow("Game of life", 0, 0, WIDTH, HEIGHT, SDL_WINDOW_OPENGL);
|
||||||
|
if(!win){
|
||||||
|
SDL_Log("Unable to create Window: %s", SDL_GetError());
|
||||||
|
}
|
||||||
|
SDL_GLContext con = SDL_GL_CreateContext(win);
|
||||||
|
if(!con){
|
||||||
|
SDL_Log("Unable to create OpenGL Context: %s", SDL_GetError());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(glewInit()){
|
||||||
|
SDL_Log("SDL_INIT error");
|
||||||
|
};
|
||||||
|
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
||||||
|
|
||||||
|
GLuint vertexBuffer;
|
||||||
|
glGenBuffers(1, &vertexBuffer);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
|
||||||
|
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
GLuint vertexShader = CompileShader(vs, GL_VERTEX_SHADER);
|
||||||
|
GLuint fragmentShader = CompileShader(fs, GL_FRAGMENT_SHADER);
|
||||||
|
GLuint shaderProgram = LinkShader(vertexShader, fragmentShader);
|
||||||
|
|
||||||
|
GLint posAttrib = glGetAttribLocation(shaderProgram, "positions");
|
||||||
|
glEnableVertexAttribArray(posAttrib);
|
||||||
|
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
|
||||||
|
|
||||||
|
bool should_close = false;
|
||||||
|
while(!should_close){
|
||||||
|
glClearColor(0, 0, 0, 1);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||||
|
|
||||||
|
SDL_GL_SwapWindow(win);
|
||||||
|
|
||||||
|
while(SDL_PollEvent(&e)){
|
||||||
|
if(e.type == SDL_QUIT) should_close = true;
|
||||||
|
if(e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_a) should_close = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
glDeleteProgram(shaderProgram);
|
||||||
|
glDeleteShader(fragmentShader);
|
||||||
|
glDeleteShader(vertexShader);
|
||||||
|
|
||||||
|
glDeleteBuffers(1, &vertexBuffer);
|
||||||
|
|
||||||
|
SDL_GL_DeleteContext(con);
|
||||||
|
SDL_DestroyWindow(win);
|
||||||
|
SDL_Quit();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
7
shader.fs
Normal file
7
shader.fs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#version 330 core
|
||||||
|
|
||||||
|
out vec4 outColor;
|
||||||
|
|
||||||
|
void main(){
|
||||||
|
outColor = vec4(1.0, 1.0, 1.0, 1.0);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user