From fdcb9bb1f85ade64cad0bcd0edce019ce76a7cf9 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:00:13 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/x11/core/examples/opengl/triangle.js | 85 +++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 js/x11/core/examples/opengl/triangle.js diff --git a/js/x11/core/examples/opengl/triangle.js b/js/x11/core/examples/opengl/triangle.js new file mode 100644 index 0000000..7abbc85 --- /dev/null +++ b/js/x11/core/examples/opengl/triangle.js @@ -0,0 +1,85 @@ +var x11 = require('../../lib'); + +var randomarr = []; +for(var i=0; i < 20000; ++i) { + randomarr.push([Math.random()*30-15, Math.random()*30-15, Math.random()*30-15]); +} + +var xclient = x11.createClient(function(err, display) { + var X = display.client; + var root = display.screen[0].root; + X.require('glx', function(err, GLX) { + var screen = 0; + var isDirect = 0; + var ctx = X.AllocID(); + var visual = 0xa1; + var shareListCtx = 0; + var width = 800; + var height = 800; + GLX.CreateContext(ctx, visual, screen, shareListCtx, isDirect); + var win = X.AllocID(); + X.CreateWindow(win, root, 0, 0, width, height, 0, 0, 0, 0, { eventMask: x11.eventMask.PointerMotion }); + X.MapWindow(win); + GLX.MakeCurrent(win, ctx, 0, function(err, res) { + + +GLX.NewList(ctx, 1, 0x00001300); +var gl = GLX.renderPipeline(); +gl.Begin(0x0004); +for (var i=0; i < 10000; ++i) +{ + gl.Vertex3f(randomarr[i][0], randomarr[i][1], randomarr[i][2]); + gl.Color3f((randomarr[i+10000][0]+15/30), (randomarr[i+10000][1]+15)/30, (randomarr[i+10000][2]+15)/30); +} +gl.End(); +gl.render(ctx); +GLX.EndList(ctx); + + var i = 0.0; + X.on('event', function(ev) { + var gl = GLX.renderPipeline(); + + gl.Viewport(0, 0, 800, 800); + gl.MatrixMode(0x1701); + gl.LoadIdentity(); + gl.Ortho(-30.0, 30.0, -30.0, 30.0, -300.0, 300.0); + gl.Rotatef(ev.y, 1, 0, 0); + gl.MatrixMode(0x1700); + + gl.ClearColor(0.3,0.3,0.3,0.0); + gl.Clear(0x00004000|0x00000100); + gl.ShadeModel(0x1D01); + gl.LoadIdentity(); + //gl.Translatef(ev.x/100+-15.0, ev.y/100+-15.0, 0.0); + gl.Scalef(0.1, 0.1, 1); + + gl.Translatef(-15.0, -15.0, 0.0); + //gl.Rotatef(ev.y, 0, 0, 1); + gl.Begin(0x0004); + gl.Color3f(1.0, 0.0, 0.0); + gl.Vertex3f(0.0, 0.0, 0.0); + gl.Color3f(0.0, 1.0, 0.0); + gl.Vertex3f(30.0, 0.0, 0.0); + gl.Color3f(0.0, 0.0, 1.0); + gl.Vertex3f(0.0, 30.0, 0); + + var list = false; + if (list) { + gl.CallList(1); + } else { + for (var i=0; i < 500; ++i) + { + gl.Vertex3f(randomarr[i][0], randomarr[i][1], randomarr[i][2]); + gl.Color3f((randomarr[i+500][0]+15/30), (randomarr[i+500][1]+15)/30, (randomarr[i+500][2]+15)/30); + } + } + + gl.End(); + gl.render(ctx); + GLX.SwapBuffers(ctx, win); + //}, 30); + }); + }); + }); + X.on('error', function(err) { console.log(err); }); +});