https://github.com/nimgl/nimgl
NimGL is a Nim library that offers bindings for popular libraries used in computer graphics
https://github.com/nimgl/nimgl
bindings computer-graphics glfw imgui nim nimgl opengl vulkan
Last synced: 20 days ago
JSON representation
NimGL is a Nim library that offers bindings for popular libraries used in computer graphics
- Host: GitHub
- URL: https://github.com/nimgl/nimgl
- Owner: nimgl
- License: mit
- Created: 2017-12-06T03:34:27.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-07-15T16:21:28.000Z (10 months ago)
- Last Synced: 2025-03-30T19:05:10.665Z (27 days ago)
- Topics: bindings, computer-graphics, glfw, imgui, nim, nimgl, opengl, vulkan
- Language: Nim
- Homepage: https://nimgl.github.io/docs
- Size: 5.69 MB
- Stars: 377
- Watchers: 14
- Forks: 25
- Open Issues: 23
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-nim - nimgl - NimGL is a Nim library that offers bindings for popular libraries used in computer graphics. (Game Development / Game Libraries)
README
Nim Game Library
A collection of bindings for popular libraries
Mostly used in computer graphics
Explore the docs »
![]()
![]()
## Table of Contents
- [About](#about)
- [Getting Started](#getting-started)
- [Installation](#installation)
- [Usage](#usage)
- [Green Window Example](#green-window-example)
- [Contribute](#contribute)
- [Supported Bindings](#supported-bindings)
- [Roadmap](#roadmap)
- [Gallery](#gallery)
- [Contact](#contact)
- [Credits](#credits)
- [License](#license)## About
NimGL (Nim Game Library) is a collection of bindings for popular libraries,
mostly used in computer graphics. *A library of libraries.*This collection of bindings is heavily inspired by LWJGL3. It enables low level
access and it is not a framework, so we highly encourage you to use a game
engine if you do not have experience in working with low level graphics
development. These bindings contain several optional helper procedures to help
with development and to better suit it to the language.## Getting Started
We highly recommend using a Nimble project to easily add requirements such as
NimGL.### Installation
#### With Nimble file (recommended)
1. Install Nimble, it comes preinstalled with Nim.
2. Add it to your .nimble file.
```nim
requires "nimgl >= 1.0.0"
```
3. Build with nimble.
```sh
nimble build
```#### With Nimble install
1. Install Nimble, it comes preinstalled with Nim.
2. Install NimGL with Nimble.
```sh
nimble install nimgl
```
3. Build with Nim.
```sh
nim c -r main.nim
```#### Develop with Nimble
1. Install Nimble, it comes preinstalled with Nim.
2. Clone and link with Nimble in another directory.
```sh
nimble develop nimgl
```
3. Build with either Nim or Nimble.It is currently being developed and tested on
- Windows 10
- MacOS Catalina
- Linux Ubuntu 18.10### Usage
Please refer to each binding documentation to further understand its usage.
### Green Window Example
```nim
import nimgl/[glfw, opengl]proc keyProc(window: GLFWWindow, key: int32, scancode: int32,
action: int32, mods: int32): void {.cdecl.} =
if key == GLFWKey.ESCAPE and action == GLFWPress:
window.setWindowShouldClose(true)proc main() =
assert glfwInit()glfwWindowHint(GLFWContextVersionMajor, 3)
glfwWindowHint(GLFWContextVersionMinor, 3)
glfwWindowHint(GLFWOpenglForwardCompat, GLFW_TRUE) # Used for Mac
glfwWindowHint(GLFWOpenglProfile, GLFW_OPENGL_CORE_PROFILE)
glfwWindowHint(GLFWResizable, GLFW_FALSE)let w: GLFWWindow = glfwCreateWindow(800, 600, "NimGL")
if w == nil:
quit(-1)discard w.setKeyCallback(keyProc)
w.makeContextCurrent()assert glInit()
while not w.windowShouldClose:
glfwPollEvents()
glClearColor(0.68f, 1f, 0.34f, 1f)
glClear(GL_COLOR_BUFFER_BIT)
w.swapBuffers()w.destroyWindow()
glfwTerminate()main()
```## Contribute
Your contributions truly mean the world to this project. If you are missing some
procedures, bindings or functionality feel free to open an Issue with the
specification and some example on how to properly implement it. For the
adventurous also feel free to open a Pull Request which will be greatly
appreciated.
Thank you so much :tada:Read the [Contribution Guide](https://github.com/nimgl/.github/blob/master/CONTRIBUTING.md) for more information.
## Supported Bindings
| Library | Description |
|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [GLFW][glfw-url] | Create multiple windows, handle user input (keyboard, mouse, gaming peripherals) and manage contexts. Also features multi-monitor support, clipboard access, file drag-n-drop, and much more. |
| [Vulkan][vulkan-url] | A new generation graphics and compute API that provides high-efficiency, cross-platform access to modern GPUs used in a wide variety of devices from PCs and consoles to mobile phones and embedded platforms. |
| [OpenGL][opengl-url] | Open Graphics Library is a cross-language, cross-platform application programming interface for rendering 2D and 3D vector graphics. NimGL only supports modern OpenGL. |
| [ImGUI][imgui-url] | Dear ImGui is a bloat-free graphical user interface library for C++. It outputs optimized vertex buffers that you can render anytime in your 3D-pipeline enabled application. |## Gallery
Please let me know if you want to be showcased or removed from here.
chip-8 emulator by [@kraptor](https://github.com/kraptor)
## Credits
Developed by [Leonardo Mariscal](https://lmariscal.com/) and all the amazing
contributors in GitHub.Heavily inspired by [LWJGL3](https://github.com/LWJGL/lwjgl3) and
[GLAD](https://github.com/Dav1dde/glad).Each binding contains a small credits comment at the top of the file, but in
general thank you to every contributor of each individual library used in this
project :rose:.## License
[MIT License](https://choosealicense.com/licenses/mit).
NimGL is open source and is under the MIT License, we highly encourage every
developer that uses it to make improvements and fork them here.[glfw-url]: https://glfw.org/
[opengl-url]: https://www.khronos.org/opengl/
[imgui-url]: https://github.com/ocornut/imgui
[vulkan-url]: https://www.khronos.org/vulkan/