From 1b92bebcce7f85691619713c03d500ed554bd66a Mon Sep 17 00:00:00 2001 From: Akshay Date: Thu, 11 Nov 2021 12:03:13 +0530 Subject: init --- .gitignore | 4 ++++ flake.lock | 27 ++++++++++++++++++++++++++ flake.nix | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/1/main.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 150 insertions(+) create mode 100644 .gitignore create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 src/1/main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..03f2f20 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.direnv +.ccls +.clang-format +.ccls-cache diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..d24a185 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1633083543, + "narHash": "sha256-thXKms0SvDirYb8/Hw0zqAE1TsuSFWd0y51mSzkPGLU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "92609f3d9bc3acffbdbe54fa1c591a885612aa73", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-21.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..21b787c --- /dev/null +++ b/flake.nix @@ -0,0 +1,57 @@ +{ + description = "A very basic flake"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-21.05"; + }; + + outputs = + { self + , nixpkgs + }: + let + allPrograms = [ 1 ]; + supportedSystems = [ "x86_64-linux" ]; + forAllSystems = f: nixpkgs.lib.genAttrs supportedSystems (system: f system); + nixpkgsFor = forAllSystems (system: + import nixpkgs { inherit system; } + ); + in + { + devShell = forAllSystems + (system: + let + pkgs = nixpkgsFor."${system}"; + in + with pkgs; + mkShell { + buildInputs = [ gcc glew glfw glm freeglut mesa_glu clang-tools ]; + }); + + apps = forAllSystems + (system: + let + pkgs = nixpkgsFor."${system}"; + execs = with builtins; map toString allPrograms; + mkApp = name: with pkgs; stdenv.mkDerivation { + name = "${name}"; + src = ./src; + buildInputs = [ gcc glew glfw glm freeglut mesa_glu ]; + unpackPhase = '' + true + ''; + buildPhase = '' + gcc -o main $src/${name}/main.c -lglut -lGLU -lGL + ''; + installPhase = '' + install -Dm755 main $out/bin/main + ''; + }; + in + with pkgs; + lib.genAttrs execs (p: { + type = "app"; + program = "${mkApp p}/bin/main"; + })); + }; +} diff --git a/src/1/main.c b/src/1/main.c new file mode 100644 index 0000000..f75eca5 --- /dev/null +++ b/src/1/main.c @@ -0,0 +1,62 @@ +#include +#include +#include + +typedef GLfloat point2[2]; + +float rand_float() { return 1 * (float)rand() / (float)RAND_MAX; } + +void myInit() { + glClearColor(1.0, 1.0, 1.0, 1.0); + glColor3f(rand_float(), rand_float(), rand_float()); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluOrtho2D(0.0, 500.0, 0.0, 500.0); + glMatrixMode(GL_MODELVIEW); +} + +void triangle(point2 a, point2 b, point2 c) { + glBegin(GL_TRIANGLES); + glVertex2fv(a); + glVertex2fv(b); + glVertex2fv(c); + glEnd(); +} + +void divide_triangle(point2 a, point2 b, point2 c, int k) { + point2 ab, ac, bc; + int j; + if (k > 0) { + for (j = 0; j < 2; j++) + ab[j] = (a[j] + b[j]) / 2; + for (j = 0; j < 2; j++) + ac[j] = (a[j] + c[j]) / 2; + for (j = 0; j < 2; j++) + bc[j] = (b[j] + c[j]) / 2; + + divide_triangle(a, ab, ac, k - 1); + divide_triangle(c, ac, bc, k - 1); + divide_triangle(b, bc, ab, k - 1); + } else { + triangle(a, b, c); + } +} + +void display() { + glClear(GL_COLOR_BUFFER_BIT); + point2 v[3] = {{0.0, 0.0}, {250.0, 500.0}, {500.0, 0.0}}; + divide_triangle(v[0], v[1], v[2], 8); + glFlush(); +} + +int main(int argc, char *argv[]) { + srand(time(0)); + glutInit(&argc, argv); + glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); + glutInitWindowSize(500, 500); + glutInitWindowPosition(0, 0); + glutCreateWindow("Sierpinski Gasket"); + glutDisplayFunc(display); + myInit(); + glutMainLoop(); +} -- cgit v1.2.3