{"id":25036766,"url":"https://github.com/arthurlumertz/orin","last_synced_at":"2026-04-30T01:38:36.045Z","repository":{"id":246797304,"uuid":"823368667","full_name":"ArthurLumertz/orin","owner":"ArthurLumertz","description":"Engine built with GLFW, OpenGL and STB for making 2D. Highly inspired from RayLib and libGDX.","archived":false,"fork":false,"pushed_at":"2025-01-01T22:29:15.000Z","size":168,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-06T00:35:10.029Z","etag":null,"topics":["2d","cpp","framework","game","game-development","game-engine","graphics","input","opengl","opensource"],"latest_commit_sha":null,"homepage":"https://arthurlumertz.github.io/orinengine-www/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ArthurLumertz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-02T22:56:01.000Z","updated_at":"2025-01-28T14:33:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"79343c8d-a989-4b69-a03e-84aa6c59f1cc","html_url":"https://github.com/ArthurLumertz/orin","commit_stats":null,"previous_names":["arthurlumertz/orinengine","arthurlumertz/orinframework","arthurlumertz/orin"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArthurLumertz%2Forin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArthurLumertz%2Forin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArthurLumertz%2Forin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArthurLumertz%2Forin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ArthurLumertz","download_url":"https://codeload.github.com/ArthurLumertz/orin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246380054,"owners_count":20767800,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["2d","cpp","framework","game","game-development","game-engine","graphics","input","opengl","opensource"],"created_at":"2025-02-06T00:33:33.109Z","updated_at":"2026-04-30T01:38:36.041Z","avatar_url":"https://github.com/ArthurLumertz.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"orin-framework-512x.png\" width=\"256\" alt=\"Logo\"\u003e\n\u003c/p\u003e\n\n# The Orin Framework\nThe Orin Framework is a game framework written in C for maximum performance and portability.\nI've taken some inspiration from SDL and RayLib to not make it extremely difficult nor lack\nany low-level aspects of game development.\n\n## Wrappers\nThe Orin Framework is also available for the following languages:\n- [Python](./python/)\n\n\nIn future versions, I might wrap it to other languages such as:\n- C++\n- C#\n- Java\n\n\n## Features\n- Display Management\n- Texture Loading \u0026 Rendering\n- Keyboard \u0026 Mouse Input\n- Vector \u0026 Matrix Math\n- Audio Support (coming soon)\n\n\n## Dependencies\nAs of the latest version, the Orin Framework only relies in STB Image.\n\n\n## Code Example\n```c\n/**\n * Orin Framework, 2025\n * Basic window example\n *\n * This program demonstrates on how to:\n * - Create a window\n * - Set up a camera and shader\n * - Render a rectangle centered in the center of the screen\n * - Basic keyboard and mouse input\n */\n\n#include \u003corin.h\u003e\n#include \u003cstdio.h\u003e\n\nint main() {\n    // DisplayMode contains the width and the height of the screen\n    DisplayMode displayMode = { 800, 600 };\n\n    /**\n     * CreateDisplay(DisplayMode, title, args)\n     * Here, we are creating a 800 by 600 pixels display\n     * called \"Game\", this window will be using OpenGL 3.3,\n     * OpenGL 2.1 and 4.6 are also supported.\n     */\n    Display *display = CreateDisplay(displayMode, \"Game\", OPENGL_33);\n\n    /**\n     * This is a shader, the base of how rendering works in modern OpenGL\n     * CreateDefaultShader() returns a basic shader with the intention of being\n     * used for simple or prototype games, you can write your own shaders and\n     * load them here using CreateShader(vertexFile, fragmentFile)\n     */\n    Shader *shader = CreateDefaultShader();\n\n    /**\n     * This is the camera, the essential component to follow the player and etc.\n     * Contains basic properties for now since I haven't added 3D OpenGL yet.\n     */\n    Camera2D camera;\n    camera.position = (Vector2f) { 0, 0 }; // Base (x: 0, y: 0) position\n    camera.zoom = 1; // Zoom set to 1 (default)\n\n    // Create rectangle position\n    Vector2f position = { 0, 0 };\n\n    // Game loop, while the display shouldn't close\n    while (!DisplayShouldClose(display)) {\n        // Clear the background buffer with red\n        ClearBackground(RED);\n\n        /**\n         * When we press the down arrow key, the position will\n         * shift 0.01 pixels per frame\n         *\n         * IsKeyDown(Key)\n         * IsKeyReleased(Key)\n         */\n        if (IsKeyDown(KEY_DOWN)) {\n            position.y += 0.01f;\n        }\n\n        /**\n         * When we release the left mouse button, the position will\n         * shift to the right by 100 pixels\n         *\n         * IsMouseButtonDown(Button)\n         * IsMouseButtonReleased(Button)\n         */\n        if (IsButtonReleased(MOUSE_BUTTON_LEFT)) {\n            position.x += 100.0f;\n        }\n\n        /**\n         * BeginDrawing(Shader, Camera2D)\n         * Needs a shader and a camera to properly work.\n         */\n        BeginDrawing(shader, camera);\n\n        /**\n         * Vector2f is a struct with two values\n         * x: float\n         * y: float\n         */\n        Vector2f size = { 64, 64 }; // Size is 64x64\n\n        // Making the position centered on the display\n\n        /**\n         * DrawRectangle(Vector2f position, Vector2 size, Color color)\n         * Draws the rectangle to the specified position and size\n         * The transformation and color is later processed inside the shaders\n         */\n        DrawRectangle(position, size, WHITE);\n\n        EndDrawing(); // End the drawing context\n\n        // Swap the buffers and poll event the GLFW display\n        UpdateDisplay(display);\n    }\n\n    // Clean up display resources and close the window\n    DestroyDisplay(display);\n\n    return 0;\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthurlumertz%2Forin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farthurlumertz%2Forin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthurlumertz%2Forin/lists"}