Init Repository

This commit is contained in:
MrFloor
2022-01-20 02:09:24 +01:00
commit c97ab16096
13 changed files with 11793 additions and 0 deletions

11
src/Input.c Normal file
View File

@@ -0,0 +1,11 @@
#include "Input.h"
void key_pressed(GLFWwindow* window, int key, int scancode, int action, int mods){
if ( key == GLFW_KEY_ESCAPE && action == GLFW_PRESS){
glfwSetWindowShouldClose(window, true);
}
if ( key == GLFW_KEY_Q && action == GLFW_PRESS ){
glfwSetWindowShouldClose(window, true);
}
}

12
src/Input.h Normal file
View File

@@ -0,0 +1,12 @@
#ifndef INPUT
#define INPUT
#include <GLFW/glfw3.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void key_pressed();
#endif

117
src/Renderer.c Normal file
View File

@@ -0,0 +1,117 @@
#include "Renderer.h"
GLFWwindow* initOpenGL() {
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window = glfwCreateWindow(800, 600, "Hello World", NULL, NULL);
if(window == NULL) {
printf("Failed to create a window\n");
glfwTerminate();
exit(-1);
}
glfwMakeContextCurrent(window);
glfwSetFramebufferSizeCallback(window, WindowGotResized);
if(!gladLoadGLLoader( (GLADloadproc) glfwGetProcAddress )) {
printf("Failed to initialize GLAD");
exit(-1);
}
return window;
}
void WindowGotResized(GLFWwindow* window, int width, int height) {
glViewport(0, 0, width, height);
}
unsigned int compileShaderProgram(const char** vertexSrc, const char** fragmentSrc) {
unsigned int vertexShader;
vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, vertexSrc, NULL);
glCompileShader(vertexShader);
int vertexSuccess;
char infoLog[512];
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &vertexSuccess);
if(!vertexSuccess) {
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
printf("SHADER::VERTEX::COMPILATION_FAILED\n %s \n", infoLog);
}
unsigned int fragmentShader;
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, fragmentSrc, NULL);
glCompileShader(fragmentShader);
int fragmentSuccess;
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &fragmentSuccess);
if(!fragmentSuccess){
glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
printf("SHADER::FRAGMENT::COMPILATION_FAILED\n %s \n", infoLog);
}
unsigned int shaderProgram;
shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
int programSuccess;
glGetProgramiv(shaderProgram, GL_LINK_STATUS, &programSuccess);
if(!programSuccess) {
glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);
printf("SHADER::PROGRAM::LINKING_FAILED\n %s \n", infoLog);
}
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
return shaderProgram;
}
unsigned int loadCompileShader(char* vertexPath, char* fragmentPath) {
FILE* vertex_file = fopen(vertexPath, "r");
FILE* fragment_file = fopen(fragmentPath, "r");
if( vertex_file == NULL || fragment_file == NULL ) {
printf("Failed to load shaders.\n");
exit(1);
}
struct stat vertex_stat;
struct stat fragment_stat;
stat(vertexPath, &vertex_stat);
stat(fragmentPath, &fragment_stat);
int vertex_length = vertex_stat.st_size;
int fragment_length = fragment_stat.st_size;
char* vertex_src = (char*)malloc(vertex_length+1);
char* fragment_src = (char*)malloc(fragment_length+1);
memset(vertex_src, 0, vertex_length+1);
memset(fragment_src, 0, fragment_length+1);
fread(vertex_src, sizeof(char), vertex_length, vertex_file );
fread(fragment_src, sizeof(char), fragment_length, fragment_file );
vertex_src[vertex_length+1] = '\0';
fragment_src[fragment_length+1] = '\0';
// printf("%s", vertex_src);
// printf("%s", fragment_src);
const char* vertexSrc = vertex_src;
const char* fragmentSrc = fragment_src;
unsigned int shaderProgram;
shaderProgram = compileShaderProgram(&vertexSrc, &fragmentSrc);
free(fragment_src);
free(vertex_src);
return shaderProgram;
}

20
src/Renderer.h Normal file
View File

@@ -0,0 +1,20 @@
#ifndef OPENGLINITIALIZATION
#define OPENGLINITIALIZATION
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>
GLFWwindow* initOpenGL();
void WindowGotResized(GLFWwindow* window, int width, int height);
unsigned int compileShaderProgram(const char** vertexSrc, const char** fragmentSrc);
unsigned int loadCompileShader(char* vertexPath, char* fragmentPath);
#endif

6803
src/glad.c Normal file

File diff suppressed because it is too large Load Diff

85
src/main.c Normal file
View File

@@ -0,0 +1,85 @@
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
#include "Renderer.h"
#include "Input.h"
int main() {
GLFWwindow* window;
window = initOpenGL();
glfwSetKeyCallback(window, &key_pressed);
float vertices[] = {
-0.3f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f,
0.8f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,
0.3f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f
};
float vertices2[] = {
-0.8f, -0.5f, 0.0f,
-0.3f, -0.5f, 0.0f,
-0.5f, 0.5f, 0.0f
};
char* vertex1 = "../shaders/vertex1.glsl\0";
char* fragment1 = "../shaders/fragment1.glsl\0";
char* vertex2 = "../shaders/vertex2.glsl\0";
char* fragment2 = "../shaders/fragment2.glsl\0";
unsigned int shader1, shader2;
printf("Compiling shader1\n");
shader1 = loadCompileShader(vertex1, fragment1);
printf("Compiling shader2\n");
shader2 = loadCompileShader(vertex2, fragment2);
unsigned int VAOs[2], VBOs[2];
glGenVertexArrays(2, VAOs);
glGenBuffers(2, VBOs);
//unsigned int EBO;
//glGenBuffers(1, &EBO);
glBindVertexArray(VAOs[0]);
glBindBuffer(GL_ARRAY_BUFFER, VBOs[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0 );
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3,GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3*sizeof(float)));
glEnableVertexAttribArray(1);
glBindVertexArray(VAOs[1]);
glBindBuffer(GL_ARRAY_BUFFER, VBOs[1]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices2), vertices2, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0 );
glEnableVertexAttribArray(0);
while(!glfwWindowShouldClose(window)) {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shader1);
glBindVertexArray(VAOs[0]);
glDrawArrays(GL_TRIANGLES, 0, 3);
float time = glfwGetTime();
float green = (sin(time) / 2.0f) + 0.5f;
int vertexColorLocation = glGetUniformLocation(shader2, "Color");
glUseProgram(shader2);
glUniform4f(vertexColorLocation, 0.0f, green, 0.0f, 1.0f);
glBindVertexArray(VAOs[1]);
glDrawArrays(GL_TRIANGLES, 0, 3);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}