diff --git a/js/x11/examples/opengl/test1.js b/js/x11/examples/opengl/test1.js new file mode 100644 index 0000000..b8f6eac --- /dev/null +++ b/js/x11/examples/opengl/test1.js @@ -0,0 +1,72 @@ +var x11 = require('../../lib'); + +var randomarr = []; +for(var i=0; i < 2000; ++i) { + randomarr.push([Math.random()*30-15, Math.random()*30-15, Math.random()*30-15]); +} + +var width = 500; +var height = 500; +var eventmask = x11.eventMask.PointerMotion; +var listId = 1; + +x11.createClient(function(err, display) { + var X = display.client; + var root = display.screen[0].root; + X.require('glx', function(err, GLX) { + var visual = 0; + var visuals = display.screen[0].depths[24]; + for (visual in visuals) { + if (visuals[visual].class == 4 || visuals[visual].class == 5) + break; + } + + var win = X.AllocID(); + X.CreateWindow(win, root, 0, 0, width, height, 0, 0, 0, visual, { eventMask: eventmask }); + X.MapWindow(win); + var ctx = X.AllocID(); + GLX.CreateContext(ctx, visual, 0, 0, 0); + GLX.MakeCurrent(win, ctx, 0, function(err, ctx) {}); // do we need to wait for reply here? + + function draw(ev) { + var gl = GLX.renderPipeline(); + gl.Enable(0x0B71); + 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.Frustum(-30.0, 30.0, -30.0, 30.0, 30, 300.0); + + gl.Rotatef(ev.y, 0, 0, 1); + gl.Rotatef(ev.x, 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.CallList(listId); + gl.render(ctx); + GLX.SwapBuffers(ctx, win); + } + + GLX.GenLists(ctx, 1, function(err, startListIndex) { + listId = startListIndex; + GLX.NewList(ctx, listId, 0x00001300); + var gl = GLX.renderPipeline(); + gl.Begin(0x0004); + for (var i=0; i < 1000; ++i) + { + gl.Vertex3f(randomarr[i][0], randomarr[i][1], randomarr[i][2]); + gl.Color3f((randomarr[i+1000][0]+15/30), (randomarr[i+1000][1]+15)/30, (randomarr[i+1000][2]+15)/30); + } + gl.End(); + gl.render(ctx); + GLX.EndList(ctx); + draw({x: 10, y: 10}); + }); + + X.on('event', draw); + }); + X.on('error', function(err) { console.log(err); }); +}); +