nodegl

NodeGL Logo

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 that appears on the ports list of the library's website.

// 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:

Simple Example Result

Documentation

The documentation for the latest version is available here.

License

This package is licensed under MIT License. You can see more about it here

Generated using TypeDoc