Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/enzoalbornoz/nodegl
C/C++ OpenGL bindings for Node.JS
https://github.com/enzoalbornoz/nodegl
Last synced: 12 days ago
JSON representation
C/C++ OpenGL bindings for Node.JS
- Host: GitHub
- URL: https://github.com/enzoalbornoz/nodegl
- Owner: EnzoAlbornoz
- License: mit
- Created: 2020-06-11T20:50:41.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-01-21T22:41:34.000Z (10 months ago)
- Last Synced: 2024-01-23T00:23:14.012Z (10 months ago)
- Language: C++
- Size: 112 KB
- Stars: 23
- Watchers: 2
- Forks: 4
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# NodeGL - OpenGL bindings for Node.JS
This project ports OpenGL C/C++ core calls to Node.JS using N-API.
All callable functions in `gl.h` are binded, including
functions that depend on pointers or non-javascript sized variables
such as float, short and byte.
This is possible by using the Buffer object of Node, which exports its
data as a pointer, unlike a normal JS object or JS arrays (with getters).# Dependencies
- Linux (For now, only linux headers are used on this project)
- OpenGL Headers
- CMake (Minimum v3)
- GCC or Clang# Installing
Using Npm:
```
npm install nodegl
```
Using Yarn:
```
yarn add nodegl
```# Usage
This package focuses on having only OpenGL bindings, GLUT or GLFW are not included, so you
will need some context initializer. The example below uses a [GLFW port](https://github.com/Reon90/glfwJS) that appears on the ports list of the library's website.```javascript
// Import Libs
const glfw = require("glfw-n-api");
const gl = require("nodegl");
// Setup Code
async function main() {
// Init GLFW
if (!glfw.glfwInit()) {
glfw.glfwTerminate();
process.exit(1);
}
// Define Constants
const WINDOW_WIDTH = 600;
const WINDOW_HEIGHT = 600;
// Create Window
const window = glfw.glfwCreateWindow(
WINDOW_WIDTH,
WINDOW_HEIGHT,
"OpenGLNode",
null,
null
);
if (!window) {
glfw.glfwTerminate();
process.exit(1);
}
// Get Buffer Size
glfw.glfwSetFramebufferSizeCallback(window, (window, fbW, fbH) => {
gl.glViewport(0, 0, fbW, fbH);
gl.glMatrixMode(gl.GL_PROJECTION);
gl.glLoadIdentity();
});
// Set Current GL Context
glfw.glfwMakeContextCurrent(window);
// Pre Loop
gl.glClearColor(0.0, 0.0, 0.0, 1.0);
gl.glMatrixMode(gl.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(-15.0, 15.0, -15.0, 15.0, -15.0, 15.0);
// Main
while (!glfw.glfwWindowShouldClose(window)) {
// Check Window Events
glfw.glfwPollEvents();
// Clear the screen
gl.glClear(gl.GL_COLOR_BUFFER_BIT);
// Draw a blue square
gl.glBegin(gl.GL_QUADS);
gl.glColor3d(0.0, 0.0, 1.0);
gl.glVertex3d(-3.0, -3.0, 0.0);
gl.glVertex3d(3.0, -3.0, 0.0);
gl.glVertex3d(3.0, 3.0, 0.0);
gl.glVertex3d(-3.0, 3.0, 0.0);
gl.glEnd();
// Draw - End
glfw.glfwSwapBuffers(window);
gl.glFlush();
}
// Deallocate GLFW Context
glfw.glfwTerminate();
// Exit Program
process.exit(0);
}
// Start
main();
```
Running the code above gives:
# License
This package is licensed under MIT License. You can see more about it [here](./LICENSE.md)