base gameoflife graph
This commit is contained in:
		
							
								
								
									
										6
									
								
								build.sh
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								build.sh
									
									
									
									
									
								
							| @ -2,4 +2,8 @@ | ||||
|  | ||||
| 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); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user