Advertisement
Guest User

CopperLicht:: draw2DOval, draw2DLine

a guest
Jan 5th, 2012
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CL3D.Renderer.prototype.draw2DOval = function (j, h, a, o, b, e) {
  2.  
  3.     if (a <= 0 || o <= 0 || this.width == 0 || this.height == 0) {
  4.         return
  5.     }
  6.     var m = true;
  7.     if (e == null || e == false) {
  8.         m = false
  9.     }
  10.  
  11.     var s = Math.abs(a / 2) + Math.abs(o / 2);
  12.     s = Math.max(s, 12) & ~3;
  13.  
  14.     var d = this.gl;
  15.     d.enableVertexAttribArray(0);
  16.     d.disableVertexAttribArray(1);
  17.     d.disableVertexAttribArray(2);
  18.     d.disableVertexAttribArray(3);
  19.     d.disableVertexAttribArray(4);
  20.     h = this.height - h;
  21.     var n = 2 / this.width;
  22.     var l = 2 / this.height;
  23.     j = (j * n) - 1;
  24.     h = (h * l) - 1;
  25.     a *= n;
  26.     o *= l;
  27.    
  28.     var rx = a / 2;
  29.     var ry = o / 2;
  30.     j += rx;
  31.     h -= ry;
  32.    
  33.     var g = new WebGLFloatArray( (s+1) * 3 + 3 );
  34.     var k = new WebGLUnsignedShortArray(s * 3);
  35.     var i = s * 3;
  36.    
  37.     g[0] = j;
  38.     g[1] = h;
  39.     g[2] = 0;
  40.     var gix=1;
  41.     for (var ic=0; ic<=s; ic++) {
  42.         var ang = (ic * 360.0 / s)
  43.         var dx = Math.cos(ang * 0.0175) * rx + j;
  44.         var dy = Math.sin(ang * 0.0175) * ry + h;
  45.         g[gix*3+0]=dx;
  46.         g[gix*3+1]=dy;
  47.         g[gix*3+2]=0;
  48.         gix++;
  49.     }
  50.  
  51.     gix=0;
  52.     for (var ic=0; ic<s; ic++) {
  53.         k[gix*3+0]=0;
  54.         k[gix*3+1]=ic+1;
  55.         k[gix*3+2]=ic+2;
  56.         gix++;
  57.     }
  58.                
  59.     var f = d.createBuffer();
  60.     d.bindBuffer(d.ARRAY_BUFFER, f);
  61.     d.bufferData(d.ARRAY_BUFFER, g, d.STATIC_DRAW);
  62.     d.vertexAttribPointer(0, 3, d.FLOAT, false, 0, 0);
  63.     var c = d.createBuffer();
  64.     d.bindBuffer(d.ELEMENT_ARRAY_BUFFER, c);
  65.     d.bufferData(d.ELEMENT_ARRAY_BUFFER, k, d.STATIC_DRAW);
  66.     this.currentGLProgram = this.Program2DDrawingColorOnly;
  67.     d.useProgram(this.currentGLProgram);
  68.     d.uniform4f(d.getUniformLocation(this.currentGLProgram, "vColor"), CL3D.getRed(b) / 255, CL3D.getGreen(b) / 255, CL3D.getBlue(b) / 255, m ? (CL3D.getAlpha(b) / 255) : 1);
  69.     d.depthMask(false);
  70.     d.disable(d.DEPTH_TEST);
  71.     if (!m) {
  72.         d.disable(d.BLEND)
  73.     } else {
  74.         d.enable(d.BLEND);
  75.         d.blendFunc(d.SRC_ALPHA, d.ONE_MINUS_SRC_ALPHA)
  76.     }
  77.     d.drawElements(d.TRIANGLES, i, d.UNSIGNED_SHORT, 0);
  78.     d.deleteBuffer(f);
  79.     d.deleteBuffer(c)
  80. };
  81.  
  82. CL3D.Renderer.prototype.draw2DLine = function (j, h, a, o, b, e) {
  83.  
  84.     if (this.width == 0 || this.height == 0) {
  85.         return
  86.     }
  87.     var m = true;
  88.     if (e == null || e == false) {
  89.         m = false
  90.     }
  91.  
  92.     var d = this.gl;
  93.     d.enableVertexAttribArray(0);
  94.     d.disableVertexAttribArray(1);
  95.     d.disableVertexAttribArray(2);
  96.     d.disableVertexAttribArray(3);
  97.     d.disableVertexAttribArray(4);
  98.     h = this.height - h;
  99.     o = this.height - o;
  100.     var n = 2 / this.width;
  101.     var l = 2 / this.height;
  102.     j = (j * n) - 1;
  103.     h = (h * l) - 1;
  104.     a = (a * n) - 1;
  105.     o = (o * l) - 1;
  106.        
  107.     var g = new WebGLFloatArray( 6 );
  108.     var k = new WebGLUnsignedShortArray(2);
  109.     var i = 2;
  110.    
  111.     g[0] = j;
  112.     g[1] = h;
  113.     g[2] = 0;
  114.     g[3] = a;
  115.     g[4] = o;
  116.     g[5] = 0;
  117.  
  118.     k[0] = 0;
  119.     k[1] = 1;
  120.                
  121.     var f = d.createBuffer();
  122.     d.bindBuffer(d.ARRAY_BUFFER, f);
  123.     d.bufferData(d.ARRAY_BUFFER, g, d.STATIC_DRAW);
  124.     d.vertexAttribPointer(0, 3, d.FLOAT, false, 0, 0);
  125.     var c = d.createBuffer();
  126.     d.bindBuffer(d.ELEMENT_ARRAY_BUFFER, c);
  127.     d.bufferData(d.ELEMENT_ARRAY_BUFFER, k, d.STATIC_DRAW);
  128.     this.currentGLProgram = this.Program2DDrawingColorOnly;
  129.     d.useProgram(this.currentGLProgram);
  130.     d.uniform4f(d.getUniformLocation(this.currentGLProgram, "vColor"), CL3D.getRed(b) / 255, CL3D.getGreen(b) / 255, CL3D.getBlue(b) / 255, m ? (CL3D.getAlpha(b) / 255) : 1);
  131.     d.depthMask(false);
  132.     d.disable(d.DEPTH_TEST);
  133.     if (!m) {
  134.         d.disable(d.BLEND)
  135.     } else {
  136.         d.enable(d.BLEND);
  137.         d.blendFunc(d.SRC_ALPHA, d.ONE_MINUS_SRC_ALPHA)
  138.     }
  139.     d.drawElements(d.LINES, i, d.UNSIGNED_SHORT, 0);
  140.     d.deleteBuffer(f);
  141.     d.deleteBuffer(c)
  142. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement