Advertisement
Guest User

Untitled

a guest
May 24th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haxe 2.40 KB | None | 0 0
  1. package;
  2.  
  3. import lime.graphics.opengl.GLBuffer;
  4. import lime.graphics.opengl.GLProgram;
  5. import lime.graphics.opengl.GLShader;
  6. import lime.graphics.GLRenderContext;
  7. import lime.utils.Float32Array;
  8. import lime.utils.GLUtils;
  9. import openfl.display.OpenGLRenderer;
  10. import openfl.display.Sprite;
  11. import openfl.events.Event;
  12. import openfl.events.RenderEvent;
  13.  
  14. class GLSprite extends Sprite {
  15.  
  16.     private var positionAttributeLocation:Int;
  17.     private var positionBuffer:GLBuffer;
  18.     private var glCurrentProgram:GLProgram;
  19.  
  20.     private var vertexShader:GLShader;
  21.     private var fragmentShader:GLShader;
  22.  
  23.     private var inited:Bool = false;
  24.  
  25.     var tri:Float32Array;
  26.  
  27.     var vertexSource = "
  28.         attribute vec2 a_position;
  29.        
  30.         void main (void) {
  31.             gl_Position = vec4 (a_position, 0.0, 1.0);
  32.         }
  33.        
  34.     ";
  35.  
  36.     var fragmentSource =
  37.     #if (!desktop || rpi)
  38.     "precision mediump float;"+
  39.     #end
  40.     "
  41.         void main (void) {
  42.             gl_FragColor = vec4 (1, 0, 0.5, 1);            
  43.         }
  44.     ";
  45.  
  46.     public function new () {
  47.         super ();
  48.         addEventListener (RenderEvent.RENDER_OPENGL, render);
  49.         addEventListener (Event.ENTER_FRAME, enterFrame);
  50.     }
  51.  
  52.     /* INIT */
  53.  
  54.     private function initGL(gl:GLRenderContext) {
  55.         //create shader
  56.         glCurrentProgram = GLUtils.createProgram(vertexSource, fragmentSource);
  57.         gl.useProgram(glCurrentProgram);
  58.  
  59.         positionAttributeLocation = gl.getAttribLocation(glCurrentProgram, "a_position");
  60.  
  61.         //create buffer
  62.         positionBuffer = gl.createBuffer();
  63.  
  64.         gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
  65.  
  66.         tri = new Float32Array([100,100, 200,100, 200,100]);
  67.  
  68.         gl.bufferData(gl.ARRAY_BUFFER, Float32Array.BYTES_PER_ELEMENT*tri.length, tri, gl.STATIC_DRAW);
  69.  
  70.         gl.bindBuffer(gl.ARRAY_BUFFER, null);
  71.     }
  72.  
  73.     /* UPDATE */
  74.  
  75.     public function enterFrame(event:Event):Void {
  76.         invalidate();
  77.     }
  78.  
  79.     public function render(event):Void {
  80.         var renderer:OpenGLRenderer = cast event.renderer;
  81.         var gl:GLRenderContext = renderer.gl;
  82.        
  83.         if (!inited) {
  84.             inited = true;
  85.             initGL(gl);
  86.         }
  87.  
  88.         gl.useProgram(glCurrentProgram);
  89.  
  90.         gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
  91.  
  92.         gl.enableVertexAttribArray(positionAttributeLocation);
  93.         gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);
  94.  
  95.         gl.blendFunc (gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
  96.         gl.enable (gl.BLEND);
  97.         gl.viewport (0, 0, 500, 500);
  98.  
  99.         gl.drawArrays(gl.TRIANGLES, 0, 1);
  100.        
  101.         gl.bindBuffer(gl.ARRAY_BUFFER, null);
  102.     }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement