diff --git a/examples/opengl/test1.js b/examples/opengl/test1.js new file mode 100644 index 0000000..9b0207b --- /dev/null +++ b/examples/opengl/test1.js @@ -0,0 +1,72 @@ +var x11 = require('../../lib/x11'); + +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(display) { + var X = display.client; + var root = display.screen[0].root; + X.require('glx', function(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); }); +}); + diff --git a/lib/x11/ext/glxconstants.js b/lib/x11/ext/glxconstants.js index 4c3ef54..e238f80 100644 --- a/lib/x11/ext/glxconstants.js +++ b/lib/x11/ext/glxconstants.js @@ -141,320 +141,14 @@ module.exports = { POSITION: 0x1203, SPOT_DIRECTION: 0x1204, AMBIENT_AND_DIFFUSE: 0x1602, - COLOR_INDEXES: 0x1603, - LIGHT_MODEL_TWO_SIDE: 0x0B52, - LIGHT_MODEL_LOCAL_VIEWER: 0x0B51, - LIGHT_MODEL_AMBIENT: 0x0B53, - FRONT_AND_BACK: 0x0408, - SHADE_MODEL: 0x0B54, - FLAT: 0x1D00, - SMOOTH: 0x1D01, - COLOR_MATERIAL: 0x0B57, - COLOR_MATERIAL_FACE: 0x0B55, - COLOR_MATERIAL_PARAMETER: 0x0B56, - NORMALIZE: 0x0BA1, - CLIP_PLANE0: 0x3000, - CLIP_PLANE1: 0x3001, - CLIP_PLANE2: 0x3002, - CLIP_PLANE3: 0x3003, - CLIP_PLANE4: 0x3004, - CLIP_PLANE5: 0x3005, - ACCUM_RED_BITS: 0x0D58, - ACCUM_GREEN_BITS: 0x0D59, - ACCUM_BLUE_BITS: 0x0D5A, - ACCUM_ALPHA_BITS: 0x0D5B, - ACCUM_CLEAR_VALUE: 0x0B80, - ACCUM: 0x0100, - ADD: 0x0104, - LOAD: 0x0101, - MULT: 0x0103, - RETURN: 0x0102, - ALPHA_TEST: 0x0BC0, - ALPHA_TEST_REF: 0x0BC2, - ALPHA_TEST_FUNC: 0x0BC1, - BLEND: 0x0BE2, - BLEND_SRC: 0x0BE1, - BLEND_DST: 0x0BE0, - ZERO: 0x0, - ONE: 0x1, - SRC_COLOR: 0x0300, - ONE_MINUS_SRC_COLOR: 0x0301, - SRC_ALPHA: 0x0302, - ONE_MINUS_SRC_ALPHA: 0x0303, - DST_ALPHA: 0x0304, - ONE_MINUS_DST_ALPHA: 0x0305, - DST_COLOR: 0x0306, - ONE_MINUS_DST_COLOR: 0x0307, - SRC_ALPHA_SATURATE: 0x0308, - FEEDBACK: 0x1C01, - RENDER: 0x1C00, - SELECT: 0x1C02, - "2D": 0x0600, - "3D": 0x0601, - "3D_COLOR": 0x0602, - "3D_COLOR_TEXTURE": 0x0603, - "4D_COLOR_TEXTURE": 0x0604, - POINT_TOKEN: 0x0701, - LINE_TOKEN: 0x0702, - LINE_RESET_TOKEN: 0x0707, - POLYGON_TOKEN: 0x0703, - BITMAP_TOKEN: 0x0704, - DRAW_PIXEL_TOKEN: 0x0705, - COPY_PIXEL_TOKEN: 0x0706, - PASS_THROUGH_TOKEN: 0x0700, - FEEDBACK_BUFFER_POINTER: 0x0DF0, - FEEDBACK_BUFFER_SIZE: 0x0DF1, - FEEDBACK_BUFFER_TYPE: 0x0DF2, - SELECTION_BUFFER_POINTER: 0x0DF3, - SELECTION_BUFFER_SIZE: 0x0DF4, - FOG: 0x0B60, - FOG_MODE: 0x0B65, - FOG_DENSITY: 0x0B62, - FOG_COLOR: 0x0B66, - FOG_INDEX: 0x0B61, - FOG_START: 0x0B63, - FOG_END: 0x0B64, - LINEAR: 0x2601, - EXP: 0x0800, - EXP2: 0x0801, - LOGIC_OP: 0x0BF1, - INDEX_LOGIC_OP: 0x0BF1, - COLOR_LOGIC_OP: 0x0BF2, - LOGIC_OP_MODE: 0x0BF0, - CLEAR: 0x1500, - SET: 0x150F, - COPY: 0x1503, - COPY_INVERTED: 0x150C, - NOOP: 0x1505, - INVERT: 0x150A, - AND: 0x1501, - NAND: 0x150E, - OR: 0x1507, - NOR: 0x1508, - XOR: 0x1506, - EQUIV: 0x1509, - AND_REVERSE: 0x1502, - AND_INVERTED: 0x1504, - OR_REVERSE: 0x150B, - OR_INVERTED: 0x150D, - STENCIL_BITS: 0x0D57, - STENCIL_TEST: 0x0B90, - STENCIL_CLEAR_VALUE: 0x0B91, - STENCIL_FUNC: 0x0B92, - STENCIL_VALUE_MASK: 0x0B93, - STENCIL_FAIL: 0x0B94, - STENCIL_PASS_DEPTH_FAIL: 0x0B95, - STENCIL_PASS_DEPTH_PASS: 0x0B96, - STENCIL_REF: 0x0B97, - STENCIL_WRITEMASK: 0x0B98, - STENCIL_INDEX: 0x1901, - KEEP: 0x1E00, - REPLACE: 0x1E01, - INCR: 0x1E02, - DECR: 0x1E03, - NONE: 0x0, - LEFT: 0x0406, - RIGHT: 0x0407, - FRONT: 0x0404, - BACK: 0x0405, - FRONT_AND_BACK: 0x0408, - FRONT_LEFT: 0x0400, - FRONT_RIGHT: 0x0401, - BACK_LEFT: 0x0402, - BACK_RIGHT: 0x0403, - AUX0: 0x0409, - AUX1: 0x040A, - AUX2: 0x040B, - AUX3: 0x040C, - COLOR_INDEX: 0x1900, - RED: 0x1903, - GREEN: 0x1904, - BLUE: 0x1905, - ALPHA: 0x1906, - LUMINANCE: 0x1909, - LUMINANCE_ALPHA: 0x190A, - ALPHA_BITS: 0x0D55, - RED_BITS: 0x0D52, - GREEN_BITS: 0x0D53, - BLUE_BITS: 0x0D54, - INDEX_BITS: 0x0D51, - SUBPIXEL_BITS: 0x0D50, - AUX_BUFFERS: 0x0C00, - READ_BUFFER: 0x0C02, - DRAW_BUFFER: 0x0C01, - DOUBLEBUFFER: 0x0C32, - STEREO: 0x0C33, - BITMAP: 0x1A00, - COLOR: 0x1800, - DEPTH: 0x1801, - STENCIL: 0x1802, - DITHER: 0x0BD0, - RGB: 0x1907, - RGBA: 0x1908, - MAX_LIST_NESTING: 0x0B31, - MAX_EVAL_ORDER: 0x0D30, - MAX_LIGHTS: 0x0D31, - MAX_CLIP_PLANES: 0x0D32, - MAX_TEXTURE_SIZE: 0x0D33, - MAX_PIXEL_MAP_TABLE: 0x0D34, - MAX_ATTRIB_STACK_DEPTH: 0x0D35, - MAX_MODELVIEW_STACK_DEPTH: 0x0D36, - MAX_NAME_STACK_DEPTH: 0x0D37, - MAX_PROJECTION_STACK_DEPTH: 0x0D38, - MAX_TEXTURE_STACK_DEPTH: 0x0D39, - MAX_VIEWPORT_DIMS: 0x0D3A, - MAX_CLIENT_ATTRIB_STACK_DEPTH: 0x0D3B, - ATTRIB_STACK_DEPTH: 0x0BB0, - CLIENT_ATTRIB_STACK_DEPTH: 0x0BB1, - COLOR_CLEAR_VALUE: 0x0C22, - COLOR_WRITEMASK: 0x0C23, - CURRENT_INDEX: 0x0B01, - CURRENT_COLOR: 0x0B00, - CURRENT_NORMAL: 0x0B02, - CURRENT_RASTER_COLOR: 0x0B04, - CURRENT_RASTER_DISTANCE: 0x0B09, - CURRENT_RASTER_INDEX: 0x0B05, - CURRENT_RASTER_POSITION: 0x0B07, - CURRENT_RASTER_TEXTURE_COORDS: 0x0B06, - CURRENT_RASTER_POSITION_VALID: 0x0B08, - CURRENT_TEXTURE_COORDS: 0x0B03, - INDEX_CLEAR_VALUE: 0x0C20, - INDEX_MODE: 0x0C30, - INDEX_WRITEMASK: 0x0C21, - MODELVIEW_MATRIX: 0x0BA6, - MODELVIEW_STACK_DEPTH: 0x0BA3, - NAME_STACK_DEPTH: 0x0D70, - PROJECTION_MATRIX: 0x0BA7, - PROJECTION_STACK_DEPTH: 0x0BA4, - RENDER_MODE: 0x0C40, - RGBA_MODE: 0x0C31, - TEXTURE_MATRIX: 0x0BA8, - TEXTURE_STACK_DEPTH: 0x0BA5, - VIEWPORT: 0x0BA2, - AUTO_NORMAL: 0x0D80, - MAP1_COLOR_4: 0x0D90, - MAP1_INDEX: 0x0D91, - MAP1_NORMAL: 0x0D92, - MAP1_TEXTURE_COORD_1: 0x0D93, - MAP1_TEXTURE_COORD_2: 0x0D94, - MAP1_TEXTURE_COORD_3: 0x0D95, - MAP1_TEXTURE_COORD_4: 0x0D96, - MAP1_VERTEX_3: 0x0D97, - MAP1_VERTEX_4: 0x0D98, - MAP2_COLOR_4: 0x0DB0, - MAP2_INDEX: 0x0DB1, - MAP2_NORMAL: 0x0DB2, - MAP2_TEXTURE_COORD_1: 0x0DB3, - MAP2_TEXTURE_COORD_2: 0x0DB4, - MAP2_TEXTURE_COORD_3: 0x0DB5, - MAP2_TEXTURE_COORD_4: 0x0DB6, - MAP2_VERTEX_3: 0x0DB7, - MAP2_VERTEX_4: 0x0DB8, - MAP1_GRID_DOMAIN: 0x0DD0, - MAP1_GRID_SEGMENTS: 0x0DD1, - MAP2_GRID_DOMAIN: 0x0DD2, - MAP2_GRID_SEGMENTS: 0x0DD3, - COEFF: 0x0A00, - ORDER: 0x0A01, - DOMAIN: 0x0A02, - PERSPECTIVE_CORRECTION_HINT: 0x0C50, - POINT_SMOOTH_HINT: 0x0C51, - LINE_SMOOTH_HINT: 0x0C52, + + COMPILE: 0x1300, + + // Hint POLYGON_SMOOTH_HINT: 0x0C53, - FOG_HINT: 0x0C54, - DONT_CARE: 0x1100, - FASTEST: 0x1101, NICEST: 0x1102, - SCISSOR_BOX: 0x0C10, - SCISSOR_TEST: 0x0C11, - MAP_COLOR: 0x0D10, - MAP_STENCIL: 0x0D11, - INDEX_SHIFT: 0x0D12, - INDEX_OFFSET: 0x0D13, - RED_SCALE: 0x0D14, - RED_BIAS: 0x0D15, - GREEN_SCALE: 0x0D18, - GREEN_BIAS: 0x0D19, - BLUE_SCALE: 0x0D1A, - BLUE_BIAS: 0x0D1B, - ALPHA_SCALE: 0x0D1C, - ALPHA_BIAS: 0x0D1D, - DEPTH_SCALE: 0x0D1E, - DEPTH_BIAS: 0x0D1F, - PIXEL_MAP_S_TO_S_SIZE: 0x0CB1, - PIXEL_MAP_I_TO_I_SIZE: 0x0CB0, - PIXEL_MAP_I_TO_R_SIZE: 0x0CB2, - PIXEL_MAP_I_TO_G_SIZE: 0x0CB3, - PIXEL_MAP_I_TO_B_SIZE: 0x0CB4, - PIXEL_MAP_I_TO_A_SIZE: 0x0CB5, - PIXEL_MAP_R_TO_R_SIZE: 0x0CB6, - PIXEL_MAP_G_TO_G_SIZE: 0x0CB7, - PIXEL_MAP_B_TO_B_SIZE: 0x0CB8, - PIXEL_MAP_A_TO_A_SIZE: 0x0CB9, - PIXEL_MAP_S_TO_S: 0x0C71, - PIXEL_MAP_I_TO_I: 0x0C70, - PIXEL_MAP_I_TO_R: 0x0C72, - PIXEL_MAP_I_TO_G: 0x0C73, - PIXEL_MAP_I_TO_B: 0x0C74, - PIXEL_MAP_I_TO_A: 0x0C75, - PIXEL_MAP_R_TO_R: 0x0C76, - PIXEL_MAP_G_TO_G: 0x0C77, - PIXEL_MAP_B_TO_B: 0x0C78, - PIXEL_MAP_A_TO_A: 0x0C79, - PACK_ALIGNMENT: 0x0D05, - PACK_LSB_FIRST: 0x0D01, - PACK_ROW_LENGTH: 0x0D02, - PACK_SKIP_PIXELS: 0x0D04, - PACK_SKIP_ROWS: 0x0D03, - PACK_SWAP_BYTES: 0x0D00, - UNPACK_ALIGNMENT: 0x0CF5, - UNPACK_LSB_FIRST: 0x0CF1, - UNPACK_ROW_LENGTH: 0x0CF2, - UNPACK_SKIP_PIXELS: 0x0CF4, - UNPACK_SKIP_ROWS: 0x0CF3, - UNPACK_SWAP_BYTES: 0x0CF0, - ZOOM_X: 0x0D16, - ZOOM_Y: 0x0D17, - TEXTURE_ENV: 0x2300, - TEXTURE_ENV_MODE: 0x2200, - TEXTURE_1D: 0x0DE0, - TEXTURE_2D: 0x0DE1, - TEXTURE_WRAP_S: 0x2802, - TEXTURE_WRAP_T: 0x2803, - TEXTURE_MAG_FILTER: 0x2800, - TEXTURE_MIN_FILTER: 0x2801, - TEXTURE_ENV_COLOR: 0x2201, - TEXTURE_GEN_S: 0x0C60, - TEXTURE_GEN_T: 0x0C61, - TEXTURE_GEN_R: 0x0C62, - TEXTURE_GEN_Q: 0x0C63, - TEXTURE_GEN_MODE: 0x2500, - TEXTURE_BORDER_COLOR: 0x1004, - TEXTURE_WIDTH: 0x1000, - TEXTURE_HEIGHT: 0x1001, - TEXTURE_BORDER: 0x1005, - TEXTURE_COMPONENTS: 0x1003, - TEXTURE_RED_SIZE: 0x805C, - TEXTURE_GREEN_SIZE: 0x805D, - TEXTURE_BLUE_SIZE: 0x805E, - TEXTURE_ALPHA_SIZE: 0x805F, - TEXTURE_LUMINANCE_SIZE: 0x8060, - TEXTURE_INTENSITY_SIZE: 0x8061, - NEAREST_MIPMAP_NEAREST: 0x2700, - NEAREST_MIPMAP_LINEAR: 0x2702, - LINEAR_MIPMAP_NEAREST: 0x2701, - LINEAR_MIPMAP_LINEAR: 0x2703, - OBJECT_LINEAR: 0x2401, - OBJECT_PLANE: 0x2501, - EYE_LINEAR: 0x2400, - EYE_PLANE: 0x2502, - SPHERE_MAP: 0x2402, - DECAL: 0x2101, - MODULATE: 0x2100, - NEAREST: 0x2600, - REPEAT: 0x2901, - CLAMP: 0x2900, - VENDOR: 0x1F00, + + // glGetString RENDERER: 0x1F01, VERSION: 0x1F02, EXTENSIONS: 0x1F03, diff --git a/lib/x11/ext/glxrender.js b/lib/x11/ext/glxrender.js index ba75944..ce927e3 100644 --- a/lib/x11/ext/glxrender.js +++ b/lib/x11/ext/glxrender.js @@ -54,6 +54,16 @@ module.exports = function(GLX, ctx) { buffers.push(res); }; +<<<<<<< HEAD +======= + function serialize2i(opcode, value1, value2) { + var res = commandBuffer(opcode, 12); + res.writeUInt32LE(value1, 4); + res.writeUInt32LE(value2, 8); + buffers.push(res); + } + +>>>>>>> a5087c35c661b9177afa3c7a31502543a9dd2d51 function serialize1i(opcode, value) { var res = commandBuffer(opcode, 8); res.writeUInt32LE(value, 4); @@ -173,7 +183,9 @@ module.exports = function(GLX, ctx) { PointSize: function(r) { serialize1f(100, r); }, - + Hint: function(target, mode) { + serialize2i(85, target, mode); + } }; // import all constants