diff --git a/.gitignore b/.gitignore index 42afabf..c1c1d76 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -/build \ No newline at end of file +/build +*.a +*.o \ No newline at end of file diff --git a/makefile b/makefile index cee5329..9e82b8b 100644 --- a/makefile +++ b/makefile @@ -21,6 +21,10 @@ CFLAGS += -Wno-unused-const-variable CFLAGS += -Wno-unused-macros CFLAGS += -O3 CFLAGS += -Ilibadd/include +CFLAGS += -lm +CFLAGS += -lglfw +CFLAGS += -lGL +CFLAGS += -lGLU CFLAGS += -g GITHASH = $(shell git rev-parse --short HEAD) diff --git a/src/main.c b/src/main.c index 459570f..4b4af4c 100644 --- a/src/main.c +++ b/src/main.c @@ -1,8 +1,107 @@ -#include +#define GLFW_INCLUDE_NONE +#include +#include +#include +#include #include -int main(int argc, const char **argv) { - printf("Hello, World!\n"); - printf("add(1, 2) = %d\n", add(1, 2)); - return 0; +#define WIDTH 800 +#define HEIGHT 600 + +// Function to draw the cube +void drawCube() { + glBegin(GL_QUADS); + + // Front face + glColor3f(1.0f, 0.0f, 0.0f); + glVertex3f(-1.0f, -1.0f, 1.0f); + glVertex3f(1.0f, -1.0f, 1.0f); + glVertex3f(1.0f, 1.0f, 1.0f); + glVertex3f(-1.0f, 1.0f, 1.0f); + + // Back face + glColor3f(0.0f, 1.0f, 0.0f); + glVertex3f(-1.0f, -1.0f, -1.0f); + glVertex3f(-1.0f, 1.0f, -1.0f); + glVertex3f(1.0f, 1.0f, -1.0f); + glVertex3f(1.0f, -1.0f, -1.0f); + + // Top face + glColor3f(0.0f, 0.0f, 1.0f); + glVertex3f(-1.0f, 1.0f, -1.0f); + glVertex3f(-1.0f, 1.0f, 1.0f); + glVertex3f(1.0f, 1.0f, 1.0f); + glVertex3f(1.0f, 1.0f, -1.0f); + + // Bottom face + glColor3f(1.0f, 1.0f, 0.0f); + glVertex3f(-1.0f, -1.0f, -1.0f); + glVertex3f(1.0f, -1.0f, -1.0f); + glVertex3f(1.0f, -1.0f, 1.0f); + glVertex3f(-1.0f, -1.0f, 1.0f); + + // Right face + glColor3f(1.0f, 0.0f, 1.0f); + glVertex3f(1.0f, -1.0f, -1.0f); + glVertex3f(1.0f, 1.0f, -1.0f); + glVertex3f(1.0f, 1.0f, 1.0f); + glVertex3f(1.0f, -1.0f, 1.0f); + + // Left face + glColor3f(0.0f, 1.0f, 1.0f); + glVertex3f(-1.0f, -1.0f, -1.0f); + glVertex3f(-1.0f, -1.0f, 1.0f); + glVertex3f(-1.0f, 1.0f, 1.0f); + glVertex3f(-1.0f, 1.0f, -1.0f); + + glEnd(); +} + +int main() { + // Initialize GLFW + if (!glfwInit()) { + fprintf(stderr, "Failed to initialize GLFW\n"); + return -1; + } + + // Create a windowed mode window and its OpenGL context + GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "Rotating Cube", NULL, NULL); + if (!window) { + glfwTerminate(); + return -1; + } + + // Make the window's context current + glfwMakeContextCurrent(window); + + // Loop until the user closes the window + while (!glfwWindowShouldClose(window)) { + // Clear the framebuffer + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + // Set up the view + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45.0f, (float)WIDTH / (float)HEIGHT, 0.1f, 100.0f); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + gluLookAt(3, 3, 3, 0, 0, 0, 0, 1, 0); // Eye position, look at position, up direction + + // Rotate the cube + static double angle = 0; + glRotated(angle, 0, 1, 1); // Rotate around x, y, and z axes + angle += 0.5; + + // Draw the cube + drawCube(); + + // Swap front and back buffers + glfwSwapBuffers(window); + + // Poll for and process events + glfwPollEvents(); + } + + glfwTerminate(); + return 0; }