73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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); });
 | |
| });
 | |
| 
 |