nodeglut

0.1.0 • Public • Published

NodeGL Logo

NodeGLUT - FreeGLUT bindings for Node.JS

This project ports FreeGLUT C/C++ calls to Node.JS using N-API. All callable functions in freeglut.h are binded, including functions that depend on pointers or non-javascript sized variables such as float, short and byte.

Dependencies

  • Linux (For now, only linux headers are used on this project)
  • FreeGLUT v3
  • CMake (Minimum v3)
  • GCC or Clang

Installing

Using Npm:

npm install nodeglut

Using Yarn:

yarn add nodeglut

Usage

This package focuses on having only FreeGLUT bindings, OpenGL is not included, so you will need some package to call OpenGL drawing functions. The example below uses a OpenGL port, made by me, that binds core functions of OpenGL v1.1.

// Import Libs
const glut = require("nodeglut");
const gl = require("nodegl");
// Setup Code
function main() {
	// Init GLUT
	glut.glutInit(process.argv.length, process.argv);
	// Define Constants
	const WINDOW_WIDTH = 600;
	const WINDOW_HEIGHT = 600;
	// Create Window
	glut.glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
	const window = glut.glutCreateWindow(
		"NodeGLUT"
	);
	// Get Buffer Size
	glut.glutReshapeFunc((fbW, fbH) => {
		gl.glViewport(0, 0, fbW, fbH);
		gl.glMatrixMode(gl.GL_PROJECTION);
	});
	// 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
	function loop() {

		// 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
		glut.glutSwapBuffers();
		gl.glFlush();
	}
	// Define Show Loop (60 FPS)
	glut.glutDisplayFunc(loop);
	const rl = () => {
		glut.glutPostRedisplay();
		glut.glutTimerFunc(parseInt(1000/60), rl, 0);
	}
	glut.glutTimerFunc(parseInt(1000/60), rl, 0);
	// Show Window
	glut.glutMainLoop();
	// Exit Program
	process.exit(0);
}
// Start
main();

As result of the above code we have:

Simple Example Result

Differences between NodeGLUT and FreeGLUT

  • glutInitErrorFunc :
Before:
glutInitErrorFunc(void (*callback) (const char* fmt, va_list ap))

After:
glutInitErrorFunc((message: String) => void)
  • glutInitWarningFunc :
Before:
glutInitWarningFunc(void (*callback) (const char* fmt, va_list ap))

After:
glutInitWarningFunc((message: String) => void)
  • glutGetProcAddress : Returns a raw C pointer (BigInt)

Warnings

I'm investigating some cases of memory leaking on some functions (like glutIdleFunc) that are called multiple times in a short period of time. If you can help me, open a PR with your changes that I will review it

License

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

Package Sidebar

Install

npm i nodeglut

Weekly Downloads

0

Version

0.1.0

License

MIT

Unpacked Size

230 kB

Total Files

24

Last publish

Collaborators

  • enzoalbornoz