From bfbdbdba5ae26c66db52fd539394f018013e60f0 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Tue, 10 Jun 2014 14:27:24 -0700 Subject: [PATCH] Begin work on HTML5 --- lime/app/Application.hx | 4 + lime/app/Config.hx | 4 + lime/graphics/Renderer.hx | 2 + lime/graphics/opengl/GL.hx | 3311 ++++++++++------- lime/graphics/opengl/GLActiveInfo.hx | 14 +- lime/graphics/opengl/GLBuffer.hx | 18 +- lime/graphics/opengl/GLContextAttributes.hx | 24 +- lime/graphics/opengl/GLFramebuffer.hx | 18 +- lime/graphics/opengl/GLProgram.hx | 60 +- lime/graphics/opengl/GLRenderbuffer.hx | 20 +- lime/graphics/opengl/GLShader.hx | 20 +- .../opengl/GLShaderPrecisionFormat.hx | 16 + lime/graphics/opengl/GLTexture.hx | 20 +- lime/graphics/opengl/GLUniformLocation.hx | 8 +- lime/system/System.hx | 24 + lime/ui/Window.hx | 173 +- lime/utils/ArrayBuffer.hx | 9 +- lime/utils/ArrayBufferView.hx | 466 +-- lime/utils/Float32Array.hx | 249 +- lime/utils/Int16Array.hx | 235 +- lime/utils/Int32Array.hx | 238 +- lime/utils/Int8Array.hx | 216 +- lime/utils/UInt16Array.hx | 234 +- lime/utils/UInt32Array.hx | 237 +- lime/utils/UInt8Array.hx | 217 +- templates/html5/haxe/ApplicationMain.hx | 154 +- templates/html5/haxe/NMEPreloader.hx | 113 - templates/html5/haxe/lime/AssetData.hx | 36 - templates/html5/hxml/debug.hxml | 1 - templates/html5/hxml/final.hxml | 1 - templates/html5/hxml/release.hxml | 3 +- templates/html5/template/index.html | 91 +- templates/html5/template/lib/modernizr.js | 4 - .../soundmanager2-nodebug-jsmin.js | 81 - .../lib/soundmanager/swf/soundmanager2.swf | Bin 2908 -> 0 bytes .../soundmanager/swf/soundmanager2_debug.swf | Bin 3282 -> 0 bytes .../soundmanager/swf/soundmanager2_flash9.swf | Bin 8758 -> 0 bytes .../swf/soundmanager2_flash9_debug.swf | Bin 17258 -> 0 bytes .../swf/soundmanager2_flash_xdomain.zip | Bin 33064 -> 0 bytes 39 files changed, 3678 insertions(+), 2643 deletions(-) create mode 100644 lime/graphics/opengl/GLShaderPrecisionFormat.hx mode change 100755 => 100644 templates/html5/haxe/ApplicationMain.hx delete mode 100644 templates/html5/haxe/NMEPreloader.hx delete mode 100644 templates/html5/haxe/lime/AssetData.hx delete mode 100644 templates/html5/template/lib/modernizr.js delete mode 100755 templates/html5/template/lib/soundmanager/soundmanager2-nodebug-jsmin.js delete mode 100755 templates/html5/template/lib/soundmanager/swf/soundmanager2.swf delete mode 100755 templates/html5/template/lib/soundmanager/swf/soundmanager2_debug.swf delete mode 100755 templates/html5/template/lib/soundmanager/swf/soundmanager2_flash9.swf delete mode 100755 templates/html5/template/lib/soundmanager/swf/soundmanager2_flash9_debug.swf delete mode 100755 templates/html5/template/lib/soundmanager/swf/soundmanager2_flash_xdomain.zip diff --git a/lime/app/Application.hx b/lime/app/Application.hx index 8f510b9f7..e79a5a75d 100644 --- a/lime/app/Application.hx +++ b/lime/app/Application.hx @@ -57,6 +57,8 @@ class Application implements IKeyEventListener implements IMouseEventListener im WindowEventManager.addEventListener (this); var window = new Window (this); + window.create (config); + var renderer = new Renderer (window); } @@ -66,6 +68,8 @@ class Application implements IKeyEventListener implements IMouseEventListener im #if (cpp || neko) return lime_application_exec (handle); + #else + return 0; #end } diff --git a/lime/app/Config.hx b/lime/app/Config.hx index 62565c284..4893506e3 100644 --- a/lime/app/Config.hx +++ b/lime/app/Config.hx @@ -4,8 +4,12 @@ package lime.app; typedef Config = { @:optional var antialiasing:Int; + @:optional var background:Null; @:optional var borderless:Bool; @:optional var depthBuffer:Bool; + #if js + @:optional var element:js.html.HtmlElement; + #end @:optional var fps:Int; @:optional var fullscreen:Bool; @:optional var height:Int; diff --git a/lime/graphics/Renderer.hx b/lime/graphics/Renderer.hx index 5d8bebcd0..3e8fc6e1a 100644 --- a/lime/graphics/Renderer.hx +++ b/lime/graphics/Renderer.hx @@ -26,7 +26,9 @@ class Renderer { public static function flip ():Void { + #if (cpp || neko) lime_renderer_flip (instance.handle); + #end } diff --git a/lime/graphics/opengl/GL.hx b/lime/graphics/opengl/GL.hx index c101e939b..8598ffb77 100644 --- a/lime/graphics/opengl/GL.hx +++ b/lime/graphics/opengl/GL.hx @@ -1,6 +1,6 @@ package lime.graphics.opengl; -//import lime.utils.compat.Matrix3D; + import lime.utils.ArrayBuffer; import lime.utils.ArrayBufferView; import lime.utils.Float32Array; @@ -8,1301 +8,2018 @@ import lime.utils.IMemoryRange; import lime.utils.Int32Array; import lime.system.System; +#if js +import js.html.webgl.RenderingContext; +#end + +@:allow(lime.ui.Window) class GL { - - /* ClearBufferMask */ - public static inline var DEPTH_BUFFER_BIT = 0x00000100; - public static inline var STENCIL_BUFFER_BIT = 0x00000400; - public static inline var COLOR_BUFFER_BIT = 0x00004000; - - /* BeginMode */ - public static inline var POINTS = 0x0000; - public static inline var LINES = 0x0001; - public static inline var LINE_LOOP = 0x0002; - public static inline var LINE_STRIP = 0x0003; - public static inline var TRIANGLES = 0x0004; - public static inline var TRIANGLE_STRIP = 0x0005; - public static inline var TRIANGLE_FAN = 0x0006; - - /* AlphaFunction(not supported in ES20) */ - /* NEVER */ - /* LESS */ - /* EQUAL */ - /* LEQUAL */ - /* GREATER */ - /* NOTEQUAL */ - /* GEQUAL */ - /* ALWAYS */ - /* BlendingFactorDest */ - public static inline var ZERO = 0; - public static inline var ONE = 1; - public static inline var SRC_COLOR = 0x0300; - public static inline var ONE_MINUS_SRC_COLOR = 0x0301; - public static inline var SRC_ALPHA = 0x0302; - public static inline var ONE_MINUS_SRC_ALPHA = 0x0303; - public static inline var DST_ALPHA = 0x0304; - public static inline var ONE_MINUS_DST_ALPHA = 0x0305; - - /* BlendingFactorSrc */ - /* ZERO */ - /* ONE */ - public static inline var DST_COLOR = 0x0306; - public static inline var ONE_MINUS_DST_COLOR = 0x0307; - public static inline var SRC_ALPHA_SATURATE = 0x0308; - /* SRC_ALPHA */ - /* ONE_MINUS_SRC_ALPHA */ - /* DST_ALPHA */ - /* ONE_MINUS_DST_ALPHA */ - /* BlendEquationSeparate */ - public static inline var FUNC_ADD = 0x8006; - public static inline var BLEND_EQUATION = 0x8009; - public static inline var BLEND_EQUATION_RGB = 0x8009; /* same as BLEND_EQUATION */ - public static inline var BLEND_EQUATION_ALPHA = 0x883D; - - /* BlendSubtract */ - public static inline var FUNC_SUBTRACT = 0x800A; - public static inline var FUNC_REVERSE_SUBTRACT = 0x800B; - - /* Separate Blend Functions */ - public static inline var BLEND_DST_RGB = 0x80C8; - public static inline var BLEND_SRC_RGB = 0x80C9; - public static inline var BLEND_DST_ALPHA = 0x80CA; - public static inline var BLEND_SRC_ALPHA = 0x80CB; - public static inline var CONSTANT_COLOR = 0x8001; - public static inline var ONE_MINUS_CONSTANT_COLOR = 0x8002; - public static inline var CONSTANT_ALPHA = 0x8003; - public static inline var ONE_MINUS_CONSTANT_ALPHA = 0x8004; - public static inline var BLEND_COLOR = 0x8005; - - /* GLBuffer Objects */ - public static inline var ARRAY_BUFFER = 0x8892; - public static inline var ELEMENT_ARRAY_BUFFER = 0x8893; - public static inline var ARRAY_BUFFER_BINDING = 0x8894; - public static inline var ELEMENT_ARRAY_BUFFER_BINDING = 0x8895; - - public static inline var STREAM_DRAW = 0x88E0; - public static inline var STATIC_DRAW = 0x88E4; - public static inline var DYNAMIC_DRAW = 0x88E8; - - public static inline var BUFFER_SIZE = 0x8764; - public static inline var BUFFER_USAGE = 0x8765; - - public static inline var CURRENT_VERTEX_ATTRIB = 0x8626; - - /* CullFaceMode */ - public static inline var FRONT = 0x0404; - public static inline var BACK = 0x0405; - public static inline var FRONT_AND_BACK = 0x0408; - - /* DepthFunction */ - /* NEVER */ - /* LESS */ - /* EQUAL */ - /* LEQUAL */ - /* GREATER */ - /* NOTEQUAL */ - /* GEQUAL */ - /* ALWAYS */ - /* EnableCap */ - /* TEXTURE_2D */ - public static inline var CULL_FACE = 0x0B44; - public static inline var BLEND = 0x0BE2; - public static inline var DITHER = 0x0BD0; - public static inline var STENCIL_TEST = 0x0B90; - public static inline var DEPTH_TEST = 0x0B71; - public static inline var SCISSOR_TEST = 0x0C11; - public static inline var POLYGON_OFFSET_FILL = 0x8037; - public static inline var SAMPLE_ALPHA_TO_COVERAGE = 0x809E; - public static inline var SAMPLE_COVERAGE = 0x80A0; - - /* ErrorCode */ - public static inline var NO_ERROR = 0; - public static inline var INVALID_ENUM = 0x0500; - public static inline var INVALID_VALUE = 0x0501; - public static inline var INVALID_OPERATION = 0x0502; - public static inline var OUT_OF_MEMORY = 0x0505; - - /* FrontFaceDirection */ - public static inline var CW = 0x0900; - public static inline var CCW = 0x0901; - - /* GetPName */ - public static inline var LINE_WIDTH = 0x0B21; - public static inline var ALIASED_POINT_SIZE_RANGE = 0x846D; - public static inline var ALIASED_LINE_WIDTH_RANGE = 0x846E; - public static inline var CULL_FACE_MODE = 0x0B45; - public static inline var FRONT_FACE = 0x0B46; - public static inline var DEPTH_RANGE = 0x0B70; - public static inline var DEPTH_WRITEMASK = 0x0B72; - public static inline var DEPTH_CLEAR_VALUE = 0x0B73; - public static inline var DEPTH_FUNC = 0x0B74; - public static inline var STENCIL_CLEAR_VALUE = 0x0B91; - public static inline var STENCIL_FUNC = 0x0B92; - public static inline var STENCIL_FAIL = 0x0B94; - public static inline var STENCIL_PASS_DEPTH_FAIL = 0x0B95; - public static inline var STENCIL_PASS_DEPTH_PASS = 0x0B96; - public static inline var STENCIL_REF = 0x0B97; - public static inline var STENCIL_VALUE_MASK = 0x0B93; - public static inline var STENCIL_WRITEMASK = 0x0B98; - public static inline var STENCIL_BACK_FUNC = 0x8800; - public static inline var STENCIL_BACK_FAIL = 0x8801; - public static inline var STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802; - public static inline var STENCIL_BACK_PASS_DEPTH_PASS = 0x8803; - public static inline var STENCIL_BACK_REF = 0x8CA3; - public static inline var STENCIL_BACK_VALUE_MASK = 0x8CA4; - public static inline var STENCIL_BACK_WRITEMASK = 0x8CA5; - public static inline var VIEWPORT = 0x0BA2; - public static inline var SCISSOR_BOX = 0x0C10; - /* SCISSOR_TEST */ - public static inline var COLOR_CLEAR_VALUE = 0x0C22; - public static inline var COLOR_WRITEMASK = 0x0C23; - public static inline var UNPACK_ALIGNMENT = 0x0CF5; - public static inline var PACK_ALIGNMENT = 0x0D05; - public static inline var MAX_TEXTURE_SIZE = 0x0D33; - public static inline var MAX_VIEWPORT_DIMS = 0x0D3A; - public static inline var SUBPIXEL_BITS = 0x0D50; - public static inline var RED_BITS = 0x0D52; - public static inline var GREEN_BITS = 0x0D53; - public static inline var BLUE_BITS = 0x0D54; - public static inline var ALPHA_BITS = 0x0D55; - public static inline var DEPTH_BITS = 0x0D56; - public static inline var STENCIL_BITS = 0x0D57; - public static inline var POLYGON_OFFSET_UNITS = 0x2A00; - /* POLYGON_OFFSET_FILL */ - public static inline var POLYGON_OFFSET_FACTOR = 0x8038; - public static inline var TEXTURE_BINDING_2D = 0x8069; - public static inline var SAMPLE_BUFFERS = 0x80A8; - public static inline var SAMPLES = 0x80A9; - public static inline var SAMPLE_COVERAGE_VALUE = 0x80AA; - public static inline var SAMPLE_COVERAGE_INVERT = 0x80AB; - - /* GetTextureParameter */ - /* TEXTURE_MAG_FILTER */ - /* TEXTURE_MIN_FILTER */ - /* TEXTURE_WRAP_S */ - /* TEXTURE_WRAP_T */ - public static inline var COMPRESSED_TEXTURE_FORMATS = 0x86A3; - - /* HintMode */ - public static inline var DONT_CARE = 0x1100; - public static inline var FASTEST = 0x1101; - public static inline var NICEST = 0x1102; - - /* HintTarget */ - public static inline var GENERATE_MIPMAP_HINT = 0x8192; - - /* DataType */ - public static inline var BYTE = 0x1400; - public static inline var UNSIGNED_BYTE = 0x1401; - public static inline var SHORT = 0x1402; - public static inline var UNSIGNED_SHORT = 0x1403; - public static inline var INT = 0x1404; - public static inline var UNSIGNED_INT = 0x1405; - public static inline var FLOAT = 0x1406; - - /* PixelFormat */ - public static inline var DEPTH_COMPONENT = 0x1902; - public static inline var ALPHA = 0x1906; - public static inline var RGB = 0x1907; - public static inline var RGBA = 0x1908; - public static inline var LUMINANCE = 0x1909; - public static inline var LUMINANCE_ALPHA = 0x190A; - - /* PixelType */ - /* UNSIGNED_BYTE */ - public static inline var UNSIGNED_SHORT_4_4_4_4 = 0x8033; - public static inline var UNSIGNED_SHORT_5_5_5_1 = 0x8034; - public static inline var UNSIGNED_SHORT_5_6_5 = 0x8363; - - /* Shaders */ - public static inline var FRAGMENT_SHADER = 0x8B30; - public static inline var VERTEX_SHADER = 0x8B31; - public static inline var MAX_VERTEX_ATTRIBS = 0x8869; - public static inline var MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB; - public static inline var MAX_VARYING_VECTORS = 0x8DFC; - public static inline var MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D; - public static inline var MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C; - public static inline var MAX_TEXTURE_IMAGE_UNITS = 0x8872; - public static inline var MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD; - public static inline var SHADER_TYPE = 0x8B4F; - public static inline var DELETE_STATUS = 0x8B80; - public static inline var LINK_STATUS = 0x8B82; - public static inline var VALIDATE_STATUS = 0x8B83; - public static inline var ATTACHED_SHADERS = 0x8B85; - public static inline var ACTIVE_UNIFORMS = 0x8B86; - public static inline var ACTIVE_ATTRIBUTES = 0x8B89; - public static inline var SHADING_LANGUAGE_VERSION = 0x8B8C; - public static inline var CURRENT_PROGRAM = 0x8B8D; - - /* StencilFunction */ - public static inline var NEVER = 0x0200; - public static inline var LESS = 0x0201; - public static inline var EQUAL = 0x0202; - public static inline var LEQUAL = 0x0203; - public static inline var GREATER = 0x0204; - public static inline var NOTEQUAL = 0x0205; - public static inline var GEQUAL = 0x0206; - public static inline var ALWAYS = 0x0207; - - /* StencilOp */ - /* ZERO */ - public static inline var KEEP = 0x1E00; - public static inline var REPLACE = 0x1E01; - public static inline var INCR = 0x1E02; - public static inline var DECR = 0x1E03; - public static inline var INVERT = 0x150A; - public static inline var INCR_WRAP = 0x8507; - public static inline var DECR_WRAP = 0x8508; - - /* StringName */ - public static inline var VENDOR = 0x1F00; - public static inline var RENDERER = 0x1F01; - public static inline var VERSION = 0x1F02; - - /* TextureMagFilter */ - public static inline var NEAREST = 0x2600; - public static inline var LINEAR = 0x2601; - - /* TextureMinFilter */ - /* NEAREST */ - /* LINEAR */ - public static inline var NEAREST_MIPMAP_NEAREST = 0x2700; - public static inline var LINEAR_MIPMAP_NEAREST = 0x2701; - public static inline var NEAREST_MIPMAP_LINEAR = 0x2702; - public static inline var LINEAR_MIPMAP_LINEAR = 0x2703; - - /* TextureParameterName */ - public static inline var TEXTURE_MAG_FILTER = 0x2800; - public static inline var TEXTURE_MIN_FILTER = 0x2801; - public static inline var TEXTURE_WRAP_S = 0x2802; - public static inline var TEXTURE_WRAP_T = 0x2803; - - /* TextureTarget */ - public static inline var TEXTURE_2D = 0x0DE1; - public static inline var TEXTURE = 0x1702; - - public static inline var TEXTURE_CUBE_MAP = 0x8513; - public static inline var TEXTURE_BINDING_CUBE_MAP = 0x8514; - public static inline var TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515; - public static inline var TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516; - public static inline var TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517; - public static inline var TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518; - public static inline var TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519; - public static inline var TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A; - public static inline var MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C; - - /* TextureUnit */ - public static inline var TEXTURE0 = 0x84C0; - public static inline var TEXTURE1 = 0x84C1; - public static inline var TEXTURE2 = 0x84C2; - public static inline var TEXTURE3 = 0x84C3; - public static inline var TEXTURE4 = 0x84C4; - public static inline var TEXTURE5 = 0x84C5; - public static inline var TEXTURE6 = 0x84C6; - public static inline var TEXTURE7 = 0x84C7; - public static inline var TEXTURE8 = 0x84C8; - public static inline var TEXTURE9 = 0x84C9; - public static inline var TEXTURE10 = 0x84CA; - public static inline var TEXTURE11 = 0x84CB; - public static inline var TEXTURE12 = 0x84CC; - public static inline var TEXTURE13 = 0x84CD; - public static inline var TEXTURE14 = 0x84CE; - public static inline var TEXTURE15 = 0x84CF; - public static inline var TEXTURE16 = 0x84D0; - public static inline var TEXTURE17 = 0x84D1; - public static inline var TEXTURE18 = 0x84D2; - public static inline var TEXTURE19 = 0x84D3; - public static inline var TEXTURE20 = 0x84D4; - public static inline var TEXTURE21 = 0x84D5; - public static inline var TEXTURE22 = 0x84D6; - public static inline var TEXTURE23 = 0x84D7; - public static inline var TEXTURE24 = 0x84D8; - public static inline var TEXTURE25 = 0x84D9; - public static inline var TEXTURE26 = 0x84DA; - public static inline var TEXTURE27 = 0x84DB; - public static inline var TEXTURE28 = 0x84DC; - public static inline var TEXTURE29 = 0x84DD; - public static inline var TEXTURE30 = 0x84DE; - public static inline var TEXTURE31 = 0x84DF; - public static inline var ACTIVE_TEXTURE = 0x84E0; - - /* TextureWrapMode */ - public static inline var REPEAT = 0x2901; - public static inline var CLAMP_TO_EDGE = 0x812F; - public static inline var MIRRORED_REPEAT = 0x8370; - - /* Uniform Types */ - public static inline var FLOAT_VEC2 = 0x8B50; - public static inline var FLOAT_VEC3 = 0x8B51; - public static inline var FLOAT_VEC4 = 0x8B52; - public static inline var INT_VEC2 = 0x8B53; - public static inline var INT_VEC3 = 0x8B54; - public static inline var INT_VEC4 = 0x8B55; - public static inline var BOOL = 0x8B56; - public static inline var BOOL_VEC2 = 0x8B57; - public static inline var BOOL_VEC3 = 0x8B58; - public static inline var BOOL_VEC4 = 0x8B59; - public static inline var FLOAT_MAT2 = 0x8B5A; - public static inline var FLOAT_MAT3 = 0x8B5B; - public static inline var FLOAT_MAT4 = 0x8B5C; - public static inline var SAMPLER_2D = 0x8B5E; - public static inline var SAMPLER_CUBE = 0x8B60; - - /* Vertex Arrays */ - public static inline var VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622; - public static inline var VERTEX_ATTRIB_ARRAY_SIZE = 0x8623; - public static inline var VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624; - public static inline var VERTEX_ATTRIB_ARRAY_TYPE = 0x8625; - public static inline var VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A; - public static inline var VERTEX_ATTRIB_ARRAY_POINTER = 0x8645; - public static inline var VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F; - - /* Point Size */ - public static inline var VERTEX_PROGRAM_POINT_SIZE = 0x8642; - public static inline var POINT_SPRITE = 0x8861; - - /* GLShader Source */ - public static inline var COMPILE_STATUS = 0x8B81; - - /* GLShader Precision-Specified Types */ - public static inline var LOW_FLOAT = 0x8DF0; - public static inline var MEDIUM_FLOAT = 0x8DF1; - public static inline var HIGH_FLOAT = 0x8DF2; - public static inline var LOW_INT = 0x8DF3; - public static inline var MEDIUM_INT = 0x8DF4; - public static inline var HIGH_INT = 0x8DF5; - - /* GLFramebuffer Object. */ - public static inline var FRAMEBUFFER = 0x8D40; - public static inline var RENDERBUFFER = 0x8D41; - - public static inline var RGBA4 = 0x8056; - public static inline var RGB5_A1 = 0x8057; - public static inline var RGB565 = 0x8D62; - public static inline var DEPTH_COMPONENT16 = 0x81A5; - public static inline var STENCIL_INDEX = 0x1901; - public static inline var STENCIL_INDEX8 = 0x8D48; - public static inline var DEPTH_STENCIL = 0x84F9; - - public static inline var RENDERBUFFER_WIDTH = 0x8D42; - public static inline var RENDERBUFFER_HEIGHT = 0x8D43; - public static inline var RENDERBUFFER_INTERNAL_FORMAT = 0x8D44; - public static inline var RENDERBUFFER_RED_SIZE = 0x8D50; - public static inline var RENDERBUFFER_GREEN_SIZE = 0x8D51; - public static inline var RENDERBUFFER_BLUE_SIZE = 0x8D52; - public static inline var RENDERBUFFER_ALPHA_SIZE = 0x8D53; - public static inline var RENDERBUFFER_DEPTH_SIZE = 0x8D54; - public static inline var RENDERBUFFER_STENCIL_SIZE = 0x8D55; - - public static inline var FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0; - public static inline var FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1; - public static inline var FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2; - public static inline var FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3; - - public static inline var COLOR_ATTACHMENT0 = 0x8CE0; - public static inline var DEPTH_ATTACHMENT = 0x8D00; - public static inline var STENCIL_ATTACHMENT = 0x8D20; - public static inline var DEPTH_STENCIL_ATTACHMENT = 0x821A; - - public static inline var NONE = 0; - - public static inline var FRAMEBUFFER_COMPLETE = 0x8CD5; - public static inline var FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6; - public static inline var FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7; - public static inline var FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9; - public static inline var FRAMEBUFFER_UNSUPPORTED = 0x8CDD; - - public static inline var FRAMEBUFFER_BINDING = 0x8CA6; - public static inline var RENDERBUFFER_BINDING = 0x8CA7; - public static inline var MAX_RENDERBUFFER_SIZE = 0x84E8; - - public static inline var INVALID_FRAMEBUFFER_OPERATION = 0x0506; - - /* WebGL-specific enums */ - public static inline var UNPACK_FLIP_Y_WEBGL = 0x9240; - public static inline var UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241; - public static inline var CONTEXT_LOST_WEBGL = 0x9242; - public static inline var UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243; - public static inline var BROWSER_DEFAULT_WEBGL = 0x9244; - - public static var version(get_version, null):Int; - - public static function versionString():String { - return lime_gl_version(); - } - - public static function activeTexture(texture:Int):Void - { - lime_gl_active_texture(texture); - } - - public static function attachShader(program:GLProgram, shader:GLShader):Void - { - program.attach(shader); - lime_gl_attach_shader(program.id, shader.id); - } - - public static function bindAttribLocation(program:GLProgram, index:Int, name:String):Void - { - lime_gl_bind_attrib_location(program.id, index, name); - } - - public static function bindBuffer(target:Int, buffer:GLBuffer):Void - { - lime_gl_bind_buffer(target, buffer == null ? 0 : buffer.id); - } - - public static function bindFramebuffer(target:Int, framebuffer:GLFramebuffer):Void - { - lime_gl_bind_framebuffer(target, framebuffer == null ? 0 : framebuffer.id); - } - - public static function bindRenderbuffer(target:Int, renderbuffer:GLRenderbuffer):Void - { - lime_gl_bind_renderbuffer(target, renderbuffer == null ? 0 : renderbuffer.id); - } - - public static function bindTexture(target:Int, texture:GLTexture):Void - { - lime_gl_bind_texture(target, texture == null ? 0 : texture.id); - } - - public static function blendColor(red:Float, green:Float, blue:Float, alpha:Float):Void - { - lime_gl_blend_color(red, green, blue, alpha); - } - - public static function blendEquation(mode:Int):Void - { - lime_gl_blend_equation(mode); - } - - public static function blendEquationSeparate(modeRGB:Int, modeAlpha:Int):Void - { - lime_gl_blend_equation_separate(modeRGB, modeAlpha); - } - - public static function blendFunc(sfactor:Int, dfactor:Int):Void - { - lime_gl_blend_func(sfactor, dfactor); - } - - public static function blendFuncSeparate(srcRGB:Int, dstRGB:Int, srcAlpha:Int, dstAlpha:Int):Void - { - lime_gl_blend_func_separate(srcRGB, dstRGB, srcAlpha, dstAlpha); - } - - public static function bufferData(target:Int, data:IMemoryRange, usage:Int):Void - { - lime_gl_buffer_data(target, data.getByteBuffer(), data.getStart(), data.getLength(), usage); - } - - public static function bufferSubData(target:Int, offset:Int, data:IMemoryRange ):Void - { - lime_gl_buffer_sub_data( target, offset, data.getByteBuffer(), data.getStart(), data.getLength() ); - } - - public static function checkFramebufferStatus(target:Int):Int - { - return lime_gl_check_framebuffer_status(target); - } - - public static function clear(mask:Int):Void - { - lime_gl_clear(mask); - } - - public static function clearColor(red:Float, green:Float, blue:Float, alpha:Float):Void - { - lime_gl_clear_color(red, green, blue, alpha); - } - - public static function clearDepth(depth:Float):Void - { - lime_gl_clear_depth(depth); - } - - public static function clearStencil(s:Int):Void - { - lime_gl_clear_stencil(s); - } - - public static function colorMask(red:Bool, green:Bool, blue:Bool, alpha:Bool):Void - { - lime_gl_color_mask(red, green, blue, alpha); - } - - public static function compileShader(shader:GLShader):Void - { - lime_gl_compile_shader(shader.id); - } - - public static function compressedTexImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, data:IMemoryRange):Void - { - lime_gl_compressed_tex_image_2d(target, level, internalformat, width, height, border, data == null ? null : data.getByteBuffer(), data == null ? null : data.getStart()); - } - - public static function compressedTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, data:IMemoryRange):Void - { - lime_gl_compressed_tex_sub_image_2d(target, level, xoffset, yoffset, width, height, format, data == null ? null : data.getByteBuffer(), data == null ? null : data.getStart()); - } - - public static function copyTexImage2D(target:Int, level:Int, internalformat:Int, x:Int, y:Int, width:Int, height:Int, border:Int):Void - { - lime_gl_copy_tex_image_2d(target, level, internalformat, x, y, width, height, border); - } - - public static function copyTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, x:Int, y:Int, width:Int, height:Int):Void - { - lime_gl_copy_tex_sub_image_2d(target, level, xoffset, yoffset, x, y, width, height); - } - - public static function createBuffer():GLBuffer - { - return new GLBuffer(version, lime_gl_create_buffer()); - } - - public static function createFramebuffer():GLFramebuffer - { - return new GLFramebuffer(version, lime_gl_create_framebuffer()); - } - - public static function createProgram():GLProgram - { - return new GLProgram(version, lime_gl_create_program()); - } - - public static function createRenderbuffer():GLRenderbuffer - { - return new GLRenderbuffer(version, lime_gl_create_render_buffer()); - } - - public static function createShader(type:Int):GLShader - { - return new GLShader(version, lime_gl_create_shader(type)); - } - - public static function createTexture():GLTexture - { - return new GLTexture(version, lime_gl_create_texture()); - } - - public static function cullFace(mode:Int):Void - { - lime_gl_cull_face(mode); - } - - public static function deleteBuffer(buffer:GLBuffer):Void - { - lime_gl_delete_buffer(buffer.id); - buffer.invalidate(); - } - - public static function deleteFramebuffer(framebuffer:GLFramebuffer):Void - { - lime_gl_delete_framebuffer(framebuffer.id); - framebuffer.invalidate(); - } - - public static function deleteProgram(program:GLProgram):Void - { - lime_gl_delete_program(program.id); - program.invalidate(); - } - - public static function deleteRenderbuffer(renderbuffer:GLRenderbuffer):Void - { - lime_gl_delete_render_buffer(renderbuffer.id); - renderbuffer.invalidate(); - } - - public static function deleteShader(shader:GLShader):Void - { - lime_gl_delete_shader(shader.id); - shader.invalidate(); - } - - public static function deleteTexture(texture:GLTexture):Void - { - lime_gl_delete_texture(texture.id); - texture.invalidate(); - } - - public static function depthFunc(func:Int):Void - { - lime_gl_depth_func(func); - } - - public static function depthMask(flag:Bool):Void - { - lime_gl_depth_mask(flag); - } - - public static function depthRange(zNear:Float, zFar:Float):Void - { - lime_gl_depth_range(zNear, zFar); - } - - public static function detachShader(program:GLProgram, shader:GLShader):Void - { - lime_gl_detach_shader(program.id, shader.id); - } - - public static function disable(cap:Int):Void - { - lime_gl_disable(cap); - } - - public static function disableVertexAttribArray(index:Int):Void - { - lime_gl_disable_vertex_attrib_array(index); - } - - public static function drawArrays(mode:Int, first:Int, count:Int):Void - { - lime_gl_draw_arrays(mode, first, count); - } - - public static function drawElements(mode:Int, count:Int, type:Int, offset:Int):Void - { - lime_gl_draw_elements(mode, count, type, offset); - } - - public static function enable(cap:Int):Void - { - lime_gl_enable(cap); - } - - public static function enableVertexAttribArray(index:Int):Void - { - lime_gl_enable_vertex_attrib_array(index); - } - - public static function finish():Void - { - lime_gl_finish(); - } - - public static function flush():Void - { - lime_gl_flush(); - } - - public static function framebufferRenderbuffer(target:Int, attachment:Int, renderbuffertarget:Int, renderbuffer:GLRenderbuffer):Void - { - lime_gl_framebuffer_renderbuffer(target, attachment, renderbuffertarget, renderbuffer.id); - } - - public static function framebufferTexture2D(target:Int, attachment:Int, textarget:Int, texture:GLTexture, level:Int):Void - { - lime_gl_framebuffer_texture2D(target, attachment, textarget, texture.id, level); - } - - public static function frontFace(mode:Int):Void - { - lime_gl_front_face(mode); - } - - public static function generateMipmap(target:Int):Void - { - lime_gl_generate_mipmap(target); - } - - public static function getActiveAttrib(program:GLProgram, index:Int):GLActiveInfo - { - return lime_gl_get_active_attrib(program.id, index); - } - - public static function getActiveUniform(program:GLProgram, index:Int):GLActiveInfo - { - return lime_gl_get_active_uniform(program.id, index); - } - - public static function getAttachedShaders(program:GLProgram):Array - { - return program.getShaders(); - } - - public static function getAttribLocation(program:GLProgram, name:String):Int - { - return lime_gl_get_attrib_location(program.id, name); - } - - public static function getBufferParameter(target:Int, pname:Int):Int /*Dynamic*/ - { - return lime_gl_get_buffer_paramerter(target, pname); - } - - public static function getContextAttributes():GLContextAttributes - { - var base = lime_gl_get_context_attributes(); - base.premultipliedAlpha = false; - base.preserveDrawingBuffer = false; - return base; - } - - public static function getError():Int - { - return lime_gl_get_error(); - } - - public static function getExtension(name:String):Dynamic - { - //todo?! - return null; - // return lime_gl_get_extension(name); - } - - public static function getFramebufferAttachmentParameter(target:Int, attachment:Int, pname:Int):Int /*Dynamic*/ - { - return lime_gl_get_framebuffer_attachment_parameter(target, attachment, pname); - } - - public static function getParameter(pname:Int):Dynamic - { - return lime_gl_get_parameter(pname); - } - - public static function getProgramInfoLog(program:GLProgram):String - { - return lime_gl_get_program_info_log(program.id); - } - - public static function getProgramParameter(program:GLProgram, pname:Int):Int - { - return lime_gl_get_program_parameter(program.id, pname); - } - - public static function getRenderbufferParameter(target:Int, pname:Int):Int /*Dynamic*/ - { - return lime_gl_get_render_buffer_parameter(target, pname); - } - - public static function getShaderInfoLog(shader:GLShader):String - { - return lime_gl_get_shader_info_log(shader.id); - } - - public static function getShaderParameter(shader:GLShader, pname:Int):Int - { - return lime_gl_get_shader_parameter(shader.id, pname); - } - - public static function getShaderPrecisionFormat(shadertype:Int, precisiontype:Int):ShaderPrecisionFormat - { - return lime_gl_get_shader_precision_format(shadertype, precisiontype); - } - - public static function getShaderSource(shader:GLShader):String - { - return lime_gl_get_shader_source(shader.id); - } - - public static function getSupportedExtensions():Array - { - var result = new Array(); - lime_gl_get_supported_extensions(result); - return result; - } - - public static function getTexParameter(target:Int, pname:Int):Int /*Dynamic*/ - { - return lime_gl_get_tex_parameter(target, pname); - } - - public static function getUniform(program:GLProgram, location:GLUniformLocation):Dynamic - { - return lime_gl_get_uniform(program.id, location); - } - - public static function getUniformLocation(program:GLProgram, name:String):GLUniformLocation - { - return lime_gl_get_uniform_location(program.id, name); - } - - public static function getVertexAttrib(index:Int, pname:Int):Int /*Dynamic*/ - { - return lime_gl_get_vertex_attrib(index, pname); - } - - public static function getVertexAttribOffset(index:Int, pname:Int):Int - { - return lime_gl_get_vertex_attrib_offset(index, pname); - } - - public static function hint(target:Int, mode:Int):Void - { - lime_gl_hint(target, mode); - } - - public static function isBuffer(buffer:GLBuffer):Bool - { - return buffer != null && buffer.id > 0 && lime_gl_is_buffer(buffer.id); - } - - // This is non-static - // public function isContextLost():Bool { return false; } - public static function isEnabled(cap:Int):Bool - { - return lime_gl_is_enabled(cap); - } - - public static function isFramebuffer(framebuffer:GLFramebuffer):Bool - { - return framebuffer != null && framebuffer.id > 0 && lime_gl_is_framebuffer(framebuffer.id); - } - - public static function isProgram(program:GLProgram):Bool - { - return program != null && program.id > 0 && lime_gl_is_program(program.id); - } - - public static function isRenderbuffer(renderbuffer:GLRenderbuffer):Bool - { - return renderbuffer != null && renderbuffer.id > 0 && lime_gl_is_renderbuffer(renderbuffer.id); - } - - public static function isShader(shader:GLShader):Bool - { - return shader != null && shader.id > 0 && lime_gl_is_shader(shader.id); - } - - public static function isTexture(texture:GLTexture):Bool - { - return texture != null && texture.id > 0 && lime_gl_is_texture(texture.id); - } - - public static function lineWidth(width:Float):Void - { - lime_gl_line_width(width); - } - - public static function linkProgram(program:GLProgram):Void - { - lime_gl_link_program(program.id); - } - - static function load(inName:String, inArgCount:Int):Dynamic - { - try - { - return System.load("lime", inName, inArgCount); - - } catch(e:Dynamic) - { - trace(e); - return null; - } - } - - public static function pixelStorei(pname:Int, param:Int):Void - { - lime_gl_pixel_storei(pname, param); - } - - public static function polygonOffset(factor:Float, units:Float):Void - { - lime_gl_polygon_offset(factor, units); - } - - public static function readPixels(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:ArrayBufferView):Void - { - lime_gl_read_pixels(x, y, width, height, format, type, pixels == null ? null : pixels.getByteBuffer(), pixels == null ? null : pixels.getStart()); - } - - public static function renderbufferStorage(target:Int, internalformat:Int, width:Int, height:Int):Void - { - lime_gl_renderbuffer_storage(target, internalformat, width, height); - } - - public static function sampleCoverage(value:Float, invert:Bool):Void - { - lime_gl_sample_coverage(value, invert); - } - - public static function scissor(x:Int, y:Int, width:Int, height:Int):Void - { - lime_gl_scissor(x, y, width, height); - } - - public static function shaderSource(shader:GLShader, source:String):Void - { - lime_gl_shader_source(shader.id, source); - } - - public static function stencilFunc(func:Int, ref:Int, mask:Int):Void - { - lime_gl_stencil_func(func, ref, mask); - } - - public static function stencilFuncSeparate(face:Int, func:Int, ref:Int, mask:Int):Void - { - lime_gl_stencil_func_separate(face, func, ref, mask); - } - - public static function stencilMask(mask:Int):Void - { - lime_gl_stencil_mask(mask); - } - - public static function stencilMaskSeparate(face:Int, mask:Int):Void - { - lime_gl_stencil_mask_separate(face, mask); - } - - public static function stencilOp(fail:Int, zfail:Int, zpass:Int):Void - { - lime_gl_stencil_op(fail, zfail, zpass); - } - - public static function stencilOpSeparate(face:Int, fail:Int, zfail:Int, zpass:Int):Void - { - lime_gl_stencil_op_separate(face, fail, zfail, zpass); - } - - public static function texImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, pixels:ArrayBufferView):Void - { - lime_gl_tex_image_2d(target, level, internalformat, width, height, border, format, type, pixels == null ? null : pixels.getByteBuffer(), pixels == null ? null : pixels.getStart()); - } - - public static function texParameterf(target:Int, pname:Int, param:Float):Void - { - lime_gl_tex_parameterf(target, pname, param); - } - - public static function texParameteri(target:Int, pname:Int, param:Int):Void - { - lime_gl_tex_parameteri(target, pname, param); - } - - public static function texSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, pixels:ArrayBufferView):Void - { - lime_gl_tex_sub_image_2d(target, level, xoffset, yoffset, width, height, format, type, pixels == null ? null : pixels.getByteBuffer(), pixels == null ? null : pixels.getStart()); - } - - public static function uniform1f(location:GLUniformLocation, x:Float):Void - { - lime_gl_uniform1f(location, x); - } - - public static function uniform1fv(location:GLUniformLocation, x:Float32Array):Void - { - lime_gl_uniform1fv(location, x.getByteBuffer()); - } - - public static function uniform1i(location:GLUniformLocation, x:Int):Void - { - lime_gl_uniform1i(location, x); - } - - public static function uniform1iv(location:GLUniformLocation, v:Int32Array):Void - { - lime_gl_uniform1iv(location, v.getByteBuffer()); - } - - public static function uniform2f(location:GLUniformLocation, x:Float, y:Float):Void - { - lime_gl_uniform2f(location, x, y); - } - - public static function uniform2fv(location:GLUniformLocation, v:Float32Array):Void - { - lime_gl_uniform2fv(location, v.getByteBuffer()); - } - - public static function uniform2i(location:GLUniformLocation, x:Int, y:Int):Void - { - lime_gl_uniform2i(location, x, y); - } - - public static function uniform2iv(location:GLUniformLocation, v:Int32Array):Void - { - lime_gl_uniform2iv(location, v.getByteBuffer()); - } - - public static function uniform3f(location:GLUniformLocation, x:Float, y:Float, z:Float):Void - { - lime_gl_uniform3f(location, x, y, z); - } - - public static function uniform3fv(location:GLUniformLocation, v:Float32Array):Void - { - lime_gl_uniform3fv(location, v.getByteBuffer()); - } - - public static function uniform3i(location:GLUniformLocation, x:Int, y:Int, z:Int):Void - { - lime_gl_uniform3i(location, x, y, z); - } - - public static function uniform3iv(location:GLUniformLocation, v:Int32Array):Void - { - lime_gl_uniform3iv(location, v.getByteBuffer()); - } - - public static function uniform4f(location:GLUniformLocation, x:Float, y:Float, z:Float, w:Float):Void - { - lime_gl_uniform4f(location, x, y, z, w); - } - - public static function uniform4fv(location:GLUniformLocation, v:Float32Array):Void - { - lime_gl_uniform4fv(location, v.getByteBuffer()); - } - - public static function uniform4i(location:GLUniformLocation, x:Int, y:Int, z:Int, w:Int):Void - { - lime_gl_uniform4i(location, x, y, z, w); - } - - public static function uniform4iv(location:GLUniformLocation, v:Int32Array):Void - { - lime_gl_uniform4iv(location, v.getByteBuffer()); - } - - public static function uniformMatrix2fv(location:GLUniformLocation, transpose:Bool, v:Float32Array):Void - { - lime_gl_uniform_matrix(location, transpose, v.getByteBuffer(), 2); - } - - public static function uniformMatrix3fv(location:GLUniformLocation, transpose:Bool, v:Float32Array):Void - { - lime_gl_uniform_matrix(location, transpose, v.getByteBuffer(), 3); - } - - public static function uniformMatrix4fv(location:GLUniformLocation, transpose:Bool, v:Float32Array):Void - { - lime_gl_uniform_matrix(location, transpose, v.getByteBuffer(), 4); - } - - /*public static function uniformMatrix3D(location:GLUniformLocation, transpose:Bool, matrix:Matrix3D):Void - { - lime_gl_uniform_matrix(location, transpose, Float32Array.fromMatrix(matrix).getByteBuffer() , 4); - }*/ - - public static function useProgram(program:GLProgram):Void - { - lime_gl_use_program(program == null ? 0 : program.id); - } - - public static function validateProgram(program:GLProgram):Void - { - lime_gl_validate_program(program.id); - } - - public static function vertexAttrib1f(indx:Int, x:Float):Void - { - lime_gl_vertex_attrib1f(indx, x); - } - - public static function vertexAttrib1fv(indx:Int, values:Float32Array):Void - { - lime_gl_vertex_attrib1fv(indx, values.getByteBuffer()); - } - - public static function vertexAttrib2f(indx:Int, x:Float, y:Float):Void - { - lime_gl_vertex_attrib2f(indx, x, y); - } - - public static function vertexAttrib2fv(indx:Int, values:Float32Array):Void - { - lime_gl_vertex_attrib2fv(indx, values.getByteBuffer()); - } - - public static function vertexAttrib3f(indx:Int, x:Float, y:Float, z:Float):Void - { - lime_gl_vertex_attrib3f(indx, x, y, z); - } - - public static function vertexAttrib3fv(indx:Int, values:Float32Array):Void - { - lime_gl_vertex_attrib3fv(indx, values.getByteBuffer()); - } - - public static function vertexAttrib4f(indx:Int, x:Float, y:Float, z:Float, w:Float):Void - { - lime_gl_vertex_attrib4f(indx, x, y, z, w); - } - - public static function vertexAttrib4fv(indx:Int, values:Float32Array):Void - { - lime_gl_vertex_attrib4fv(indx, values.getByteBuffer()); - } - - public static function vertexAttribPointer(indx:Int, size:Int, type:Int, normalized:Bool, stride:Int, offset:Int):Void - { - lime_gl_vertex_attrib_pointer(indx, size, type, normalized, stride, offset); - } - - public static function viewport(x:Int, y:Int, width:Int, height:Int):Void - { - lime_gl_viewport(x, y, width, height); - } - - - - - // Getters & Setters - - - - - static function get_version():Int { return 2; } - - - - - // Native Methods - - - - - static var lime_gl_active_texture = load("lime_gl_active_texture", 1); - static var lime_gl_attach_shader = load("lime_gl_attach_shader", 2); - static var lime_gl_bind_attrib_location = load("lime_gl_bind_attrib_location", 3); - static var lime_gl_bind_buffer = load("lime_gl_bind_buffer", 2); - static var lime_gl_bind_framebuffer = load("lime_gl_bind_framebuffer", 2); - static var lime_gl_bind_renderbuffer = load("lime_gl_bind_renderbuffer", 2); - static var lime_gl_bind_texture = load("lime_gl_bind_texture", 2); - static var lime_gl_blend_color = load("lime_gl_blend_color", 4); - static var lime_gl_blend_equation = load("lime_gl_blend_equation", 1); - static var lime_gl_blend_equation_separate = load("lime_gl_blend_equation_separate", 2); - static var lime_gl_blend_func = load("lime_gl_blend_func", 2); - static var lime_gl_blend_func_separate = load("lime_gl_blend_func_separate", 4); - static var lime_gl_buffer_data = load("lime_gl_buffer_data", 5); - static var lime_gl_buffer_sub_data = load("lime_gl_buffer_sub_data", 5); - static var lime_gl_check_framebuffer_status = load("lime_gl_check_framebuffer_status", 1); - static var lime_gl_clear = load("lime_gl_clear", 1); - static var lime_gl_clear_color = load("lime_gl_clear_color", 4); - static var lime_gl_clear_depth = load("lime_gl_clear_depth", 1); - static var lime_gl_clear_stencil = load("lime_gl_clear_stencil", 1); - static var lime_gl_color_mask = load("lime_gl_color_mask", 4); - static var lime_gl_compile_shader = load("lime_gl_compile_shader", 1); - static var lime_gl_compressed_tex_image_2d = load("lime_gl_compressed_tex_image_2d", -1); - static var lime_gl_compressed_tex_sub_image_2d = load("lime_gl_compressed_tex_sub_image_2d", -1); - static var lime_gl_copy_tex_image_2d = load("lime_gl_copy_tex_image_2d", -1); - static var lime_gl_copy_tex_sub_image_2d = load("lime_gl_copy_tex_sub_image_2d", -1); - static var lime_gl_create_buffer = load("lime_gl_create_buffer", 0); - static var lime_gl_create_framebuffer = load("lime_gl_create_framebuffer", 0); - static var lime_gl_create_program = load("lime_gl_create_program", 0); - static var lime_gl_create_render_buffer = load("lime_gl_create_render_buffer", 0); - static var lime_gl_create_shader = load("lime_gl_create_shader", 1); - static var lime_gl_create_texture = load("lime_gl_create_texture", 0); - static var lime_gl_cull_face = load("lime_gl_cull_face", 1); - static var lime_gl_delete_buffer = load("lime_gl_delete_buffer", 1); - static var lime_gl_delete_framebuffer = load("lime_gl_delete_framebuffer", 1); - static var lime_gl_delete_program = load("lime_gl_delete_program", 1); - static var lime_gl_delete_render_buffer = load("lime_gl_delete_render_buffer", 1); - static var lime_gl_delete_shader = load("lime_gl_delete_shader", 1); - static var lime_gl_delete_texture = load("lime_gl_delete_texture", 1); - static var lime_gl_depth_func = load("lime_gl_depth_func", 1); - static var lime_gl_depth_mask = load("lime_gl_depth_mask", 1); - static var lime_gl_depth_range = load("lime_gl_depth_range", 2); - static var lime_gl_detach_shader = load("lime_gl_detach_shader", 2); - static var lime_gl_disable = load("lime_gl_disable", 1); - static var lime_gl_disable_vertex_attrib_array = load("lime_gl_disable_vertex_attrib_array", 1); - static var lime_gl_draw_arrays = load("lime_gl_draw_arrays", 3); - static var lime_gl_draw_elements = load("lime_gl_draw_elements", 4); - static var lime_gl_enable = load("lime_gl_enable", 1); - static var lime_gl_enable_vertex_attrib_array = load("lime_gl_enable_vertex_attrib_array", 1); - static var lime_gl_finish = load("lime_gl_finish", 0); - static var lime_gl_flush = load("lime_gl_flush", 0); - static var lime_gl_framebuffer_renderbuffer = load("lime_gl_framebuffer_renderbuffer", 4); - static var lime_gl_framebuffer_texture2D = load("lime_gl_framebuffer_texture2D", 5); - static var lime_gl_front_face = load("lime_gl_front_face", 1); - static var lime_gl_generate_mipmap = load("lime_gl_generate_mipmap", 1); - static var lime_gl_get_active_attrib = load("lime_gl_get_active_attrib", 2); - static var lime_gl_get_active_uniform = load("lime_gl_get_active_uniform", 2); - static var lime_gl_get_attrib_location = load("lime_gl_get_attrib_location", 2); - static var lime_gl_get_buffer_paramerter = load("lime_gl_get_buffer_paramerter", 2); - static var lime_gl_get_context_attributes = load("lime_gl_get_context_attributes", 0); - static var lime_gl_get_error = load("lime_gl_get_error", 0); - static var lime_gl_get_framebuffer_attachment_parameter = load("lime_gl_get_framebuffer_attachment_parameter", 3); - static var lime_gl_get_parameter = load("lime_gl_get_parameter", 1); - // static var lime_gl_get_extension = load("lime_gl_get_extension", 1); - static var lime_gl_get_program_info_log = load("lime_gl_get_program_info_log", 1); - static var lime_gl_get_program_parameter = load("lime_gl_get_program_parameter", 2); - static var lime_gl_get_render_buffer_parameter = load("lime_gl_get_render_buffer_parameter", 2); - static var lime_gl_get_shader_info_log = load("lime_gl_get_shader_info_log", 1); - static var lime_gl_get_shader_parameter = load("lime_gl_get_shader_parameter", 2); - static var lime_gl_get_shader_precision_format = load("lime_gl_get_shader_precision_format", 2); - static var lime_gl_get_shader_source = load("lime_gl_get_shader_source", 1); - static var lime_gl_get_supported_extensions = load("lime_gl_get_supported_extensions", 1); - static var lime_gl_get_tex_parameter = load("lime_gl_get_tex_parameter", 2); - static var lime_gl_get_uniform = load("lime_gl_get_uniform", 2); - static var lime_gl_get_uniform_location = load("lime_gl_get_uniform_location", 2); - static var lime_gl_get_vertex_attrib = load("lime_gl_get_vertex_attrib", 2); - static var lime_gl_get_vertex_attrib_offset = load("lime_gl_get_vertex_attrib_offset", 2); - static var lime_gl_hint = load("lime_gl_hint", 2); - static var lime_gl_is_buffer = load("lime_gl_is_buffer", 1); - static var lime_gl_is_enabled = load("lime_gl_is_enabled", 1); - static var lime_gl_is_framebuffer = load("lime_gl_is_framebuffer", 1); - static var lime_gl_is_program = load("lime_gl_is_program", 1); - static var lime_gl_is_renderbuffer = load("lime_gl_is_renderbuffer", 1); - static var lime_gl_is_shader = load("lime_gl_is_shader", 1); - static var lime_gl_is_texture = load("lime_gl_is_texture", 1); - static var lime_gl_line_width = load("lime_gl_line_width", 1); - static var lime_gl_link_program = load("lime_gl_link_program", 1); - static var lime_gl_pixel_storei = load("lime_gl_pixel_storei", 2); - static var lime_gl_polygon_offset = load("lime_gl_polygon_offset", 2); - static var lime_gl_read_pixels = load("lime_gl_read_pixels", -1); - static var lime_gl_renderbuffer_storage = load("lime_gl_renderbuffer_storage", 4); - static var lime_gl_sample_coverage = load("lime_gl_sample_coverage", 2); - static var lime_gl_scissor = load("lime_gl_scissor", 4); - static var lime_gl_shader_source = load("lime_gl_shader_source", 2); - static var lime_gl_stencil_func = load("lime_gl_stencil_func", 3); - static var lime_gl_stencil_func_separate = load("lime_gl_stencil_func_separate", 4); - static var lime_gl_stencil_mask = load("lime_gl_stencil_mask", 1); - static var lime_gl_stencil_mask_separate = load("lime_gl_stencil_mask_separate", 2); - static var lime_gl_stencil_op = load("lime_gl_stencil_op", 3); - static var lime_gl_stencil_op_separate = load("lime_gl_stencil_op_separate", 4); - static var lime_gl_tex_image_2d = load("lime_gl_tex_image_2d", -1); - static var lime_gl_tex_parameterf = load("lime_gl_tex_parameterf", 3); - static var lime_gl_tex_parameteri = load("lime_gl_tex_parameteri", 3); - static var lime_gl_tex_sub_image_2d = load("lime_gl_tex_sub_image_2d", -1); - static var lime_gl_uniform1f = load("lime_gl_uniform1f", 2); - static var lime_gl_uniform1fv = load("lime_gl_uniform1fv", 2); - static var lime_gl_uniform1i = load("lime_gl_uniform1i", 2); - static var lime_gl_uniform1iv = load("lime_gl_uniform1iv", 2); - static var lime_gl_uniform2f = load("lime_gl_uniform2f", 3); - static var lime_gl_uniform2fv = load("lime_gl_uniform2fv", 2); - static var lime_gl_uniform2i = load("lime_gl_uniform2i", 3); - static var lime_gl_uniform2iv = load("lime_gl_uniform2iv", 2); - static var lime_gl_uniform3f = load("lime_gl_uniform3f", 4); - static var lime_gl_uniform3fv = load("lime_gl_uniform3fv", 2); - static var lime_gl_uniform3i = load("lime_gl_uniform3i", 4); - static var lime_gl_uniform3iv = load("lime_gl_uniform3iv", 2); - static var lime_gl_uniform4f = load("lime_gl_uniform4f", 5); - static var lime_gl_uniform4fv = load("lime_gl_uniform4fv", 2); - static var lime_gl_uniform4i = load("lime_gl_uniform4i", 5); - static var lime_gl_uniform4iv = load("lime_gl_uniform4iv", 2); - static var lime_gl_uniform_matrix = load("lime_gl_uniform_matrix", 4); - static var lime_gl_use_program = load("lime_gl_use_program", 1); - static var lime_gl_validate_program = load("lime_gl_validate_program", 1); - static var lime_gl_version = load("lime_gl_version", 0); - static var lime_gl_vertex_attrib1f = load("lime_gl_vertex_attrib1f", 2); - static var lime_gl_vertex_attrib1fv = load("lime_gl_vertex_attrib1fv", 2); - static var lime_gl_vertex_attrib2f = load("lime_gl_vertex_attrib2f", 3); - static var lime_gl_vertex_attrib2fv = load("lime_gl_vertex_attrib2fv", 2); - static var lime_gl_vertex_attrib3f = load("lime_gl_vertex_attrib3f", 4); - static var lime_gl_vertex_attrib3fv = load("lime_gl_vertex_attrib3fv", 2); - static var lime_gl_vertex_attrib4f = load("lime_gl_vertex_attrib4f", 5); - static var lime_gl_vertex_attrib4fv = load("lime_gl_vertex_attrib4fv", 2); - static var lime_gl_vertex_attrib_pointer = load("lime_gl_vertex_attrib_pointer", -1); - static var lime_gl_viewport = load("lime_gl_viewport", 4); - - -} - - -typedef ShaderPrecisionFormat = -{ - rangeMin : Int, - rangeMax : Int, - precision : Int, - -}; - - + + + public static inline var DEPTH_BUFFER_BIT = 0x00000100; + public static inline var STENCIL_BUFFER_BIT = 0x00000400; + public static inline var COLOR_BUFFER_BIT = 0x00004000; + + public static inline var POINTS = 0x0000; + public static inline var LINES = 0x0001; + public static inline var LINE_LOOP = 0x0002; + public static inline var LINE_STRIP = 0x0003; + public static inline var TRIANGLES = 0x0004; + public static inline var TRIANGLE_STRIP = 0x0005; + public static inline var TRIANGLE_FAN = 0x0006; + + public static inline var ZERO = 0; + public static inline var ONE = 1; + public static inline var SRC_COLOR = 0x0300; + public static inline var ONE_MINUS_SRC_COLOR = 0x0301; + public static inline var SRC_ALPHA = 0x0302; + public static inline var ONE_MINUS_SRC_ALPHA = 0x0303; + public static inline var DST_ALPHA = 0x0304; + public static inline var ONE_MINUS_DST_ALPHA = 0x0305; + + public static inline var DST_COLOR = 0x0306; + public static inline var ONE_MINUS_DST_COLOR = 0x0307; + public static inline var SRC_ALPHA_SATURATE = 0x0308; + + public static inline var FUNC_ADD = 0x8006; + public static inline var BLEND_EQUATION = 0x8009; + public static inline var BLEND_EQUATION_RGB = 0x8009; + public static inline var BLEND_EQUATION_ALPHA = 0x883D; + + public static inline var FUNC_SUBTRACT = 0x800A; + public static inline var FUNC_REVERSE_SUBTRACT = 0x800B; + + public static inline var BLEND_DST_RGB = 0x80C8; + public static inline var BLEND_SRC_RGB = 0x80C9; + public static inline var BLEND_DST_ALPHA = 0x80CA; + public static inline var BLEND_SRC_ALPHA = 0x80CB; + public static inline var CONSTANT_COLOR = 0x8001; + public static inline var ONE_MINUS_CONSTANT_COLOR = 0x8002; + public static inline var CONSTANT_ALPHA = 0x8003; + public static inline var ONE_MINUS_CONSTANT_ALPHA = 0x8004; + public static inline var BLEND_COLOR = 0x8005; + + public static inline var ARRAY_BUFFER = 0x8892; + public static inline var ELEMENT_ARRAY_BUFFER = 0x8893; + public static inline var ARRAY_BUFFER_BINDING = 0x8894; + public static inline var ELEMENT_ARRAY_BUFFER_BINDING = 0x8895; + + public static inline var STREAM_DRAW = 0x88E0; + public static inline var STATIC_DRAW = 0x88E4; + public static inline var DYNAMIC_DRAW = 0x88E8; + + public static inline var BUFFER_SIZE = 0x8764; + public static inline var BUFFER_USAGE = 0x8765; + + public static inline var CURRENT_VERTEX_ATTRIB = 0x8626; + + public static inline var FRONT = 0x0404; + public static inline var BACK = 0x0405; + public static inline var FRONT_AND_BACK = 0x0408; + + public static inline var CULL_FACE = 0x0B44; + public static inline var BLEND = 0x0BE2; + public static inline var DITHER = 0x0BD0; + public static inline var STENCIL_TEST = 0x0B90; + public static inline var DEPTH_TEST = 0x0B71; + public static inline var SCISSOR_TEST = 0x0C11; + public static inline var POLYGON_OFFSET_FILL = 0x8037; + public static inline var SAMPLE_ALPHA_TO_COVERAGE = 0x809E; + public static inline var SAMPLE_COVERAGE = 0x80A0; + + public static inline var NO_ERROR = 0; + public static inline var INVALID_ENUM = 0x0500; + public static inline var INVALID_VALUE = 0x0501; + public static inline var INVALID_OPERATION = 0x0502; + public static inline var OUT_OF_MEMORY = 0x0505; + + public static inline var CW = 0x0900; + public static inline var CCW = 0x0901; + + public static inline var LINE_WIDTH = 0x0B21; + public static inline var ALIASED_POINT_SIZE_RANGE = 0x846D; + public static inline var ALIASED_LINE_WIDTH_RANGE = 0x846E; + public static inline var CULL_FACE_MODE = 0x0B45; + public static inline var FRONT_FACE = 0x0B46; + public static inline var DEPTH_RANGE = 0x0B70; + public static inline var DEPTH_WRITEMASK = 0x0B72; + public static inline var DEPTH_CLEAR_VALUE = 0x0B73; + public static inline var DEPTH_FUNC = 0x0B74; + public static inline var STENCIL_CLEAR_VALUE = 0x0B91; + public static inline var STENCIL_FUNC = 0x0B92; + public static inline var STENCIL_FAIL = 0x0B94; + public static inline var STENCIL_PASS_DEPTH_FAIL = 0x0B95; + public static inline var STENCIL_PASS_DEPTH_PASS = 0x0B96; + public static inline var STENCIL_REF = 0x0B97; + public static inline var STENCIL_VALUE_MASK = 0x0B93; + public static inline var STENCIL_WRITEMASK = 0x0B98; + public static inline var STENCIL_BACK_FUNC = 0x8800; + public static inline var STENCIL_BACK_FAIL = 0x8801; + public static inline var STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802; + public static inline var STENCIL_BACK_PASS_DEPTH_PASS = 0x8803; + public static inline var STENCIL_BACK_REF = 0x8CA3; + public static inline var STENCIL_BACK_VALUE_MASK = 0x8CA4; + public static inline var STENCIL_BACK_WRITEMASK = 0x8CA5; + public static inline var VIEWPORT = 0x0BA2; + public static inline var SCISSOR_BOX = 0x0C10; + + public static inline var COLOR_CLEAR_VALUE = 0x0C22; + public static inline var COLOR_WRITEMASK = 0x0C23; + public static inline var UNPACK_ALIGNMENT = 0x0CF5; + public static inline var PACK_ALIGNMENT = 0x0D05; + public static inline var MAX_TEXTURE_SIZE = 0x0D33; + public static inline var MAX_VIEWPORT_DIMS = 0x0D3A; + public static inline var SUBPIXEL_BITS = 0x0D50; + public static inline var RED_BITS = 0x0D52; + public static inline var GREEN_BITS = 0x0D53; + public static inline var BLUE_BITS = 0x0D54; + public static inline var ALPHA_BITS = 0x0D55; + public static inline var DEPTH_BITS = 0x0D56; + public static inline var STENCIL_BITS = 0x0D57; + public static inline var POLYGON_OFFSET_UNITS = 0x2A00; + + public static inline var POLYGON_OFFSET_FACTOR = 0x8038; + public static inline var TEXTURE_BINDING_2D = 0x8069; + public static inline var SAMPLE_BUFFERS = 0x80A8; + public static inline var SAMPLES = 0x80A9; + public static inline var SAMPLE_COVERAGE_VALUE = 0x80AA; + public static inline var SAMPLE_COVERAGE_INVERT = 0x80AB; + + public static inline var COMPRESSED_TEXTURE_FORMATS = 0x86A3; + + public static inline var DONT_CARE = 0x1100; + public static inline var FASTEST = 0x1101; + public static inline var NICEST = 0x1102; + + public static inline var GENERATE_MIPMAP_HINT = 0x8192; + + public static inline var BYTE = 0x1400; + public static inline var UNSIGNED_BYTE = 0x1401; + public static inline var SHORT = 0x1402; + public static inline var UNSIGNED_SHORT = 0x1403; + public static inline var INT = 0x1404; + public static inline var UNSIGNED_INT = 0x1405; + public static inline var FLOAT = 0x1406; + + public static inline var DEPTH_COMPONENT = 0x1902; + public static inline var ALPHA = 0x1906; + public static inline var RGB = 0x1907; + public static inline var RGBA = 0x1908; + public static inline var LUMINANCE = 0x1909; + public static inline var LUMINANCE_ALPHA = 0x190A; + + public static inline var UNSIGNED_SHORT_4_4_4_4 = 0x8033; + public static inline var UNSIGNED_SHORT_5_5_5_1 = 0x8034; + public static inline var UNSIGNED_SHORT_5_6_5 = 0x8363; + + public static inline var FRAGMENT_SHADER = 0x8B30; + public static inline var VERTEX_SHADER = 0x8B31; + public static inline var MAX_VERTEX_ATTRIBS = 0x8869; + public static inline var MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB; + public static inline var MAX_VARYING_VECTORS = 0x8DFC; + public static inline var MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D; + public static inline var MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C; + public static inline var MAX_TEXTURE_IMAGE_UNITS = 0x8872; + public static inline var MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD; + public static inline var SHADER_TYPE = 0x8B4F; + public static inline var DELETE_STATUS = 0x8B80; + public static inline var LINK_STATUS = 0x8B82; + public static inline var VALIDATE_STATUS = 0x8B83; + public static inline var ATTACHED_SHADERS = 0x8B85; + public static inline var ACTIVE_UNIFORMS = 0x8B86; + public static inline var ACTIVE_ATTRIBUTES = 0x8B89; + public static inline var SHADING_LANGUAGE_VERSION = 0x8B8C; + public static inline var CURRENT_PROGRAM = 0x8B8D; + + public static inline var NEVER = 0x0200; + public static inline var LESS = 0x0201; + public static inline var EQUAL = 0x0202; + public static inline var LEQUAL = 0x0203; + public static inline var GREATER = 0x0204; + public static inline var NOTEQUAL = 0x0205; + public static inline var GEQUAL = 0x0206; + public static inline var ALWAYS = 0x0207; + + public static inline var KEEP = 0x1E00; + public static inline var REPLACE = 0x1E01; + public static inline var INCR = 0x1E02; + public static inline var DECR = 0x1E03; + public static inline var INVERT = 0x150A; + public static inline var INCR_WRAP = 0x8507; + public static inline var DECR_WRAP = 0x8508; + + public static inline var VENDOR = 0x1F00; + public static inline var RENDERER = 0x1F01; + public static inline var VERSION = 0x1F02; + + public static inline var NEAREST = 0x2600; + public static inline var LINEAR = 0x2601; + + public static inline var NEAREST_MIPMAP_NEAREST = 0x2700; + public static inline var LINEAR_MIPMAP_NEAREST = 0x2701; + public static inline var NEAREST_MIPMAP_LINEAR = 0x2702; + public static inline var LINEAR_MIPMAP_LINEAR = 0x2703; + + public static inline var TEXTURE_MAG_FILTER = 0x2800; + public static inline var TEXTURE_MIN_FILTER = 0x2801; + public static inline var TEXTURE_WRAP_S = 0x2802; + public static inline var TEXTURE_WRAP_T = 0x2803; + + public static inline var TEXTURE_2D = 0x0DE1; + public static inline var TEXTURE = 0x1702; + + public static inline var TEXTURE_CUBE_MAP = 0x8513; + public static inline var TEXTURE_BINDING_CUBE_MAP = 0x8514; + public static inline var TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515; + public static inline var TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516; + public static inline var TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517; + public static inline var TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518; + public static inline var TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519; + public static inline var TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A; + public static inline var MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C; + + public static inline var TEXTURE0 = 0x84C0; + public static inline var TEXTURE1 = 0x84C1; + public static inline var TEXTURE2 = 0x84C2; + public static inline var TEXTURE3 = 0x84C3; + public static inline var TEXTURE4 = 0x84C4; + public static inline var TEXTURE5 = 0x84C5; + public static inline var TEXTURE6 = 0x84C6; + public static inline var TEXTURE7 = 0x84C7; + public static inline var TEXTURE8 = 0x84C8; + public static inline var TEXTURE9 = 0x84C9; + public static inline var TEXTURE10 = 0x84CA; + public static inline var TEXTURE11 = 0x84CB; + public static inline var TEXTURE12 = 0x84CC; + public static inline var TEXTURE13 = 0x84CD; + public static inline var TEXTURE14 = 0x84CE; + public static inline var TEXTURE15 = 0x84CF; + public static inline var TEXTURE16 = 0x84D0; + public static inline var TEXTURE17 = 0x84D1; + public static inline var TEXTURE18 = 0x84D2; + public static inline var TEXTURE19 = 0x84D3; + public static inline var TEXTURE20 = 0x84D4; + public static inline var TEXTURE21 = 0x84D5; + public static inline var TEXTURE22 = 0x84D6; + public static inline var TEXTURE23 = 0x84D7; + public static inline var TEXTURE24 = 0x84D8; + public static inline var TEXTURE25 = 0x84D9; + public static inline var TEXTURE26 = 0x84DA; + public static inline var TEXTURE27 = 0x84DB; + public static inline var TEXTURE28 = 0x84DC; + public static inline var TEXTURE29 = 0x84DD; + public static inline var TEXTURE30 = 0x84DE; + public static inline var TEXTURE31 = 0x84DF; + public static inline var ACTIVE_TEXTURE = 0x84E0; + + public static inline var REPEAT = 0x2901; + public static inline var CLAMP_TO_EDGE = 0x812F; + public static inline var MIRRORED_REPEAT = 0x8370; + + public static inline var FLOAT_VEC2 = 0x8B50; + public static inline var FLOAT_VEC3 = 0x8B51; + public static inline var FLOAT_VEC4 = 0x8B52; + public static inline var INT_VEC2 = 0x8B53; + public static inline var INT_VEC3 = 0x8B54; + public static inline var INT_VEC4 = 0x8B55; + public static inline var BOOL = 0x8B56; + public static inline var BOOL_VEC2 = 0x8B57; + public static inline var BOOL_VEC3 = 0x8B58; + public static inline var BOOL_VEC4 = 0x8B59; + public static inline var FLOAT_MAT2 = 0x8B5A; + public static inline var FLOAT_MAT3 = 0x8B5B; + public static inline var FLOAT_MAT4 = 0x8B5C; + public static inline var SAMPLER_2D = 0x8B5E; + public static inline var SAMPLER_CUBE = 0x8B60; + + public static inline var VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622; + public static inline var VERTEX_ATTRIB_ARRAY_SIZE = 0x8623; + public static inline var VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624; + public static inline var VERTEX_ATTRIB_ARRAY_TYPE = 0x8625; + public static inline var VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A; + public static inline var VERTEX_ATTRIB_ARRAY_POINTER = 0x8645; + public static inline var VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F; + + public static inline var VERTEX_PROGRAM_POINT_SIZE = 0x8642; + public static inline var POINT_SPRITE = 0x8861; + + public static inline var COMPILE_STATUS = 0x8B81; + + public static inline var LOW_FLOAT = 0x8DF0; + public static inline var MEDIUM_FLOAT = 0x8DF1; + public static inline var HIGH_FLOAT = 0x8DF2; + public static inline var LOW_INT = 0x8DF3; + public static inline var MEDIUM_INT = 0x8DF4; + public static inline var HIGH_INT = 0x8DF5; + + public static inline var FRAMEBUFFER = 0x8D40; + public static inline var RENDERBUFFER = 0x8D41; + + public static inline var RGBA4 = 0x8056; + public static inline var RGB5_A1 = 0x8057; + public static inline var RGB565 = 0x8D62; + public static inline var DEPTH_COMPONENT16 = 0x81A5; + public static inline var STENCIL_INDEX = 0x1901; + public static inline var STENCIL_INDEX8 = 0x8D48; + public static inline var DEPTH_STENCIL = 0x84F9; + + public static inline var RENDERBUFFER_WIDTH = 0x8D42; + public static inline var RENDERBUFFER_HEIGHT = 0x8D43; + public static inline var RENDERBUFFER_INTERNAL_FORMAT = 0x8D44; + public static inline var RENDERBUFFER_RED_SIZE = 0x8D50; + public static inline var RENDERBUFFER_GREEN_SIZE = 0x8D51; + public static inline var RENDERBUFFER_BLUE_SIZE = 0x8D52; + public static inline var RENDERBUFFER_ALPHA_SIZE = 0x8D53; + public static inline var RENDERBUFFER_DEPTH_SIZE = 0x8D54; + public static inline var RENDERBUFFER_STENCIL_SIZE = 0x8D55; + + public static inline var FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0; + public static inline var FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1; + public static inline var FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2; + public static inline var FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3; + + public static inline var COLOR_ATTACHMENT0 = 0x8CE0; + public static inline var DEPTH_ATTACHMENT = 0x8D00; + public static inline var STENCIL_ATTACHMENT = 0x8D20; + public static inline var DEPTH_STENCIL_ATTACHMENT = 0x821A; + + public static inline var NONE = 0; + + public static inline var FRAMEBUFFER_COMPLETE = 0x8CD5; + public static inline var FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6; + public static inline var FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7; + public static inline var FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9; + public static inline var FRAMEBUFFER_UNSUPPORTED = 0x8CDD; + + public static inline var FRAMEBUFFER_BINDING = 0x8CA6; + public static inline var RENDERBUFFER_BINDING = 0x8CA7; + public static inline var MAX_RENDERBUFFER_SIZE = 0x84E8; + + public static inline var INVALID_FRAMEBUFFER_OPERATION = 0x0506; + + public static inline var UNPACK_FLIP_Y_WEBGL = 0x9240; + public static inline var UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241; + public static inline var CONTEXT_LOST_WEBGL = 0x9242; + public static inline var UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243; + public static inline var BROWSER_DEFAULT_WEBGL = 0x9244; + + public static var version (get, null):Int; + + #if js + private static var context:RenderingContext; + #end + + + public static inline function activeTexture (texture:Int):Void { + + #if js + context.activeTexture (texture); + #else + lime_gl_active_texture (texture); + #end + + } + + + public static inline function attachShader (program:GLProgram, shader:GLShader):Void { + + #if js + context.attachShader (program, shader); + #else + program.attach (shader); + lime_gl_attach_shader (program.id, shader.id); + #end + + } + + + public static inline function bindAttribLocation (program:GLProgram, index:Int, name:String):Void { + + #if js + context.bindAttribLocation (program, index, name); + #else + lime_gl_bind_attrib_location (program.id, index, name); + #end + + } + + + public static inline function bindBuffer (target:Int, buffer:GLBuffer):Void { + + #if js + context.bindBuffer (target, buffer); + #else + lime_gl_bind_buffer (target, buffer == null ? 0 : buffer.id); + #end + + } + + + public static inline function bindFramebuffer (target:Int, framebuffer:GLFramebuffer):Void { + + #if js + context.bindFramebuffer (target, framebuffer); + #else + lime_gl_bind_framebuffer (target, framebuffer == null ? 0 : framebuffer.id); + #end + + } + + + public static inline function bindRenderbuffer (target:Int, renderbuffer:GLRenderbuffer):Void { + + #if js + context.bindRenderbuffer (target, renderbuffer); + #else + lime_gl_bind_renderbuffer (target, renderbuffer == null ? 0 : renderbuffer.id); + #end + + } + + + public static inline function bindTexture (target:Int, texture:GLTexture):Void { + + #if js + context.bindTexture (target, texture); + #else + lime_gl_bind_texture(target, texture == null ? 0 : texture.id); + #end + + } + + + public static inline function blendColor (red:Float, green:Float, blue:Float, alpha:Float):Void { + + #if js + context.blendColor (red, green, blue, alpha); + #else + lime_gl_blend_color (red, green, blue, alpha); + #end + + } + + + public static inline function blendEquation (mode:Int):Void { + + #if js + context.blendEquation (mode); + #else + lime_gl_blend_equation (mode); + #end + + } + + + public static inline function blendEquationSeparate (modeRGB:Int, modeAlpha:Int):Void { + + #if js + context.blendEquationSeparate (modeRGB, modeAlpha); + #else + lime_gl_blend_equation_separate (modeRGB, modeAlpha); + #end + + } + + + public static inline function blendFunc (sfactor:Int, dfactor:Int):Void { + + #if js + context.blendFunc (sfactor, dfactor); + #else + lime_gl_blend_func (sfactor, dfactor); + #end + + } + + + public static inline function blendFuncSeparate (srcRGB:Int, dstRGB:Int, srcAlpha:Int, dstAlpha:Int):Void { + + #if js + context.blendFuncSeparate (srcRGB, dstRGB, srcAlpha, dstAlpha); + #else + lime_gl_blend_func_separate (srcRGB, dstRGB, srcAlpha, dstAlpha); + #end + + } + + + public static inline function bufferData (target:Int, data:ArrayBufferView, usage:Int):Void { + + #if js + context.bufferData (target, data, usage); + #else + lime_gl_buffer_data (target, data.getByteBuffer (), data.getStart (), data.getLength (), usage); + #end + + } + + + public static inline function bufferSubData (target:Int, offset:Int, data:ArrayBufferView):Void { + + #if js + context.bufferSubData (target, offset, data); + #else + lime_gl_buffer_sub_data (target, offset, data.getByteBuffer (), data.getStart (), data.getLength ()); + #end + + } + + + public static inline function checkFramebufferStatus (target:Int):Int { + + #if js + return context.checkFramebufferStatus (target); + #else + return lime_gl_check_framebuffer_status (target); + #end + + } + + + public static inline function clear (mask:Int):Void { + + #if js + context.clear (mask); + #else + lime_gl_clear (mask); + #end + + } + + + public static inline function clearColor (red:Float, green:Float, blue:Float, alpha:Float):Void { + + #if js + context.clearColor (red, green, blue, alpha); + #else + lime_gl_clear_color (red, green, blue, alpha); + #end + + } + + + public static inline function clearDepth (depth:Float):Void { + + #if js + context.clearDepth (depth); + #else + lime_gl_clear_depth (depth); + #end + + } + + + public static inline function clearStencil (s:Int):Void { + + #if js + context.clearStencil (s); + #else + lime_gl_clear_stencil (s); + #end + + } + + + public static inline function colorMask (red:Bool, green:Bool, blue:Bool, alpha:Bool):Void { + + #if js + context.colorMask (red, green, blue, alpha); + #else + lime_gl_color_mask (red, green, blue, alpha); + #end + + } + + + public static inline function compileShader (shader:GLShader):Void { + + #if js + context.compileShader (shader); + #else + lime_gl_compile_shader (shader.id); + #end + + } + + + public static inline function compressedTexImage2D (target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, data:ArrayBufferView):Void { + + #if js + context.compressedTexImage2D (target, level, internalformat, width, height, border, data); + #else + lime_gl_compressed_tex_image_2d (target, level, internalformat, width, height, border, data == null ? null : data.getByteBuffer (), data == null ? null : data.getStart ()); + #end + + } + + + public static inline function compressedTexSubImage2D (target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, data:ArrayBufferView):Void { + + #if js + context.compressedTexSubImage2D (target, level, xoffset, yoffset, width, height, format, data); + #else + lime_gl_compressed_tex_sub_image_2d (target, level, xoffset, yoffset, width, height, format, data == null ? null : data.getByteBuffer (), data == null ? null : data.getStart ()); + #end + + } + + + public static inline function copyTexImage2D (target:Int, level:Int, internalformat:Int, x:Int, y:Int, width:Int, height:Int, border:Int):Void { + + #if js + context.copyTexImage2D (target, level, internalformat, x, y, width, height, border); + #else + lime_gl_copy_tex_image_2d (target, level, internalformat, x, y, width, height, border); + #end + + } + + + public static inline function copyTexSubImage2D (target:Int, level:Int, xoffset:Int, yoffset:Int, x:Int, y:Int, width:Int, height:Int):Void { + + #if js + context.copyTexSubImage2D (target, level, xoffset, yoffset, x, y, width, height); + #else + lime_gl_copy_tex_sub_image_2d (target, level, xoffset, yoffset, x, y, width, height); + #end + + } + + + public static inline function createBuffer ():GLBuffer { + + #if js + return context.createBuffer (); + #else + return new GLBuffer (version, lime_gl_create_buffer ()); + #end + + } + + + public static inline function createFramebuffer ():GLFramebuffer { + + #if js + return context.createFramebuffer (); + #else + return new GLFramebuffer (version, lime_gl_create_framebuffer ()); + #end + + } + + + public static inline function createProgram ():GLProgram { + + #if js + return context.createProgram (); + #else + return new GLProgram (version, lime_gl_create_program ()); + #end + + } + + + public static inline function createRenderbuffer ():GLRenderbuffer { + + #if js + return context.createRenderbuffer (); + #else + return new GLRenderbuffer (version, lime_gl_create_render_buffer ()); + #end + + } + + + public static inline function createShader (type:Int):GLShader { + + #if js + return context.createShader (type); + #else + return new GLShader (version, lime_gl_create_shader (type)); + #end + + } + + + public static inline function createTexture ():GLTexture { + + #if js + return context.createTexture (); + #else + return new GLTexture (version, lime_gl_create_texture ()); + #end + + } + + + public static inline function cullFace (mode:Int):Void { + + #if js + context.cullFace (mode); + #else + lime_gl_cull_face (mode); + #end + + } + + + public static inline function deleteBuffer (buffer:GLBuffer):Void { + + #if js + context.deleteBuffer (buffer); + #else + lime_gl_delete_buffer (buffer.id); + buffer.invalidate (); + #end + + } + + + public static inline function deleteFramebuffer (framebuffer:GLFramebuffer):Void { + + #if js + context.deleteFramebuffer (framebuffer); + #else + lime_gl_delete_framebuffer (framebuffer.id); + framebuffer.invalidate (); + #end + + } + + + public static inline function deleteProgram (program:GLProgram):Void { + + #if js + context.deleteProgram (program); + #else + lime_gl_delete_program (program.id); + program.invalidate (); + #end + + } + + + public static inline function deleteRenderbuffer (renderbuffer:GLRenderbuffer):Void { + + #if js + context.deleteRenderbuffer (renderbuffer); + #else + lime_gl_delete_render_buffer (renderbuffer.id); + renderbuffer.invalidate (); + #end + + } + + + public static inline function deleteShader (shader:GLShader):Void { + + #if js + context.deleteShader (shader); + #else + lime_gl_delete_shader (shader.id); + shader.invalidate (); + #end + + } + + + public static inline function deleteTexture (texture:GLTexture):Void { + + #if js + context.deleteTexture (texture); + #else + lime_gl_delete_texture (texture.id); + texture.invalidate (); + #end + + } + + + public static inline function depthFunc (func:Int):Void { + + #if js + context.depthFunc (func); + #else + lime_gl_depth_func (func); + #end + + } + + + public static inline function depthMask (flag:Bool):Void { + + #if js + context.depthMask (flag); + #else + lime_gl_depth_mask (flag); + #end + + } + + + public static inline function depthRange (zNear:Float, zFar:Float):Void { + + #if js + context.depthRange (zNear, zFar); + #else + lime_gl_depth_range (zNear, zFar); + #end + + } + + + public static inline function detachShader (program:GLProgram, shader:GLShader):Void { + + #if js + context.detachShader (program, shader); + #else + lime_gl_detach_shader (program.id, shader.id); + #end + + } + + + public static inline function disable (cap:Int):Void { + + #if js + context.disable (cap); + #else + lime_gl_disable (cap); + #end + + } + + + public static inline function disableVertexAttribArray (index:Int):Void { + + #if js + context.disableVertexAttribArray (index); + #else + lime_gl_disable_vertex_attrib_array (index); + #end + + } + + + public static inline function drawArrays (mode:Int, first:Int, count:Int):Void { + + #if js + context.drawArrays (mode, first, count); + #else + lime_gl_draw_arrays (mode, first, count); + #end + + } + + + public static inline function drawElements (mode:Int, count:Int, type:Int, offset:Int):Void { + + #if js + context.drawElements (mode, count, type, offset); + #else + lime_gl_draw_elements (mode, count, type, offset); + #end + + } + + + public static inline function enable (cap:Int):Void { + + #if js + context.enable (cap); + #else + lime_gl_enable (cap); + #end + + } + + + public static inline function enableVertexAttribArray (index:Int):Void { + + #if js + context.enableVertexAttribArray (index); + #else + lime_gl_enable_vertex_attrib_array (index); + #end + + } + + + public static inline function finish ():Void { + + #if js + context.finish (); + #else + lime_gl_finish (); + #end + + } + + + public static inline function flush ():Void { + + #if js + context.flush (); + #else + lime_gl_flush (); + #end + + } + + + public static inline function framebufferRenderbuffer (target:Int, attachment:Int, renderbuffertarget:Int, renderbuffer:GLRenderbuffer):Void { + + #if js + context.framebufferRenderbuffer (target, attachment, renderbuffertarget, renderbuffer); + #else + lime_gl_framebuffer_renderbuffer (target, attachment, renderbuffertarget, renderbuffer.id); + #end + + } + + + public static inline function framebufferTexture2D (target:Int, attachment:Int, textarget:Int, texture:GLTexture, level:Int):Void { + + #if js + context.framebufferTexture2D (target, attachment, textarget, texture, level); + #else + lime_gl_framebuffer_texture2D (target, attachment, textarget, texture.id, level); + #end + + } + + + public static inline function frontFace (mode:Int):Void { + + #if js + context.frontFace (mode); + #else + lime_gl_front_face (mode); + #end + + } + + + public static inline function generateMipmap (target:Int):Void { + + #if js + context.generateMipmap (target); + #else + lime_gl_generate_mipmap (target); + #end + + } + + + public static inline function getActiveAttrib (program:GLProgram, index:Int):GLActiveInfo { + + #if js + return context.getActiveAttrib (program, index); + #else + return lime_gl_get_active_attrib (program.id, index); + #end + + } + + + public static inline function getActiveUniform (program:GLProgram, index:Int):GLActiveInfo { + + #if js + return context.getActiveUniform (program, index); + #else + return lime_gl_get_active_uniform (program.id, index); + #end + + } + + + public static inline function getAttachedShaders (program:GLProgram):Array { + + #if js + return context.getAttachedShaders (program); + #else + return program.getShaders (); + #end + + } + + + public static inline function getAttribLocation (program:GLProgram, name:String):Int { + + #if js + return context.getAttribLocation (program, name); + #else + return lime_gl_get_attrib_location (program.id, name); + #end + + } + + + public static inline function getBufferParameter (target:Int, pname:Int):Int /*Dynamic*/ { + + #if js + return context.getBufferParameter (target, pname); + #else + return lime_gl_get_buffer_paramerter (target, pname); + #end + + } + + + public static inline function getContextAttributes ():GLContextAttributes { + + #if js + return context.getContextAttributes (); + #else + var base = lime_gl_get_context_attributes (); + base.premultipliedAlpha = false; + base.preserveDrawingBuffer = false; + return base; + #end + + } + + + public static inline function getError ():Int { + + #if js + return context.getError (); + #else + return lime_gl_get_error (); + #end + + } + + + public static inline function getExtension (name:String):Dynamic { + + #if js + return context.getExtension (name); + #else + //todo?! + return null; + // return lime_gl_get_extension(name); + #end + + } + + + public static inline function getFramebufferAttachmentParameter (target:Int, attachment:Int, pname:Int):Int /*Dynamic*/ { + + #if js + return context.getFramebufferAttachmentParameter (target, attachment, pname); + #else + return lime_gl_get_framebuffer_attachment_parameter (target, attachment, pname); + #end + + } + + + public static inline function getParameter (pname:Int):Dynamic { + + #if js + return context.getParameter (pname); + #else + return lime_gl_get_parameter (pname); + #end + + } + + + public static inline function getProgramInfoLog (program:GLProgram):String { + + #if js + return context.getProgramInfoLog (program); + #else + return lime_gl_get_program_info_log (program.id); + #end + + } + + + public static inline function getProgramParameter (program:GLProgram, pname:Int):Int { + + #if js + return context.getProgramParameter (program, pname); + #else + return lime_gl_get_program_parameter (program.id, pname); + #end + + } + + + public static inline function getRenderbufferParameter (target:Int, pname:Int):Int /*Dynamic*/ { + + #if js + return context.getRenderbufferParameter (target, pname); + #else + return lime_gl_get_render_buffer_parameter (target, pname); + #end + + } + + + public static inline function getShaderInfoLog (shader:GLShader):String { + + #if js + return context.getShaderInfoLog (shader); + #else + return lime_gl_get_shader_info_log (shader.id); + #end + + } + + + public static inline function getShaderParameter (shader:GLShader, pname:Int):Int { + + #if js + return context.getShaderParameter (shader, pname); + #else + return lime_gl_get_shader_parameter (shader.id, pname); + #end + + } + + + public static inline function getShaderPrecisionFormat (shadertype:Int, precisiontype:Int):GLShaderPrecisionFormat { + + #if js + return context.getShaderPrecisionFormat (shadertype, precisiontype); + #else + return lime_gl_get_shader_precision_format (shadertype, precisiontype); + #end + + } + + + public static inline function getShaderSource (shader:GLShader):String { + + #if js + return context.getShaderSource (shader); + #else + return lime_gl_get_shader_source (shader.id); + #end + + } + + + public static inline function getSupportedExtensions ():Array { + + #if js + return context.getSupportedExtensions (); + #else + var result = new Array (); + lime_gl_get_supported_extensions (result); + return result; + #end + + } + + + public static inline function getTexParameter (target:Int, pname:Int):Int /*Dynamic*/ { + + #if js + return context.getTexParameter (target, pname); + #else + return lime_gl_get_tex_parameter (target, pname); + #end + + } + + + public static inline function getUniform (program:GLProgram, location:GLUniformLocation):Dynamic { + + #if js + return context.getUniform (program, location); + #else + return lime_gl_get_uniform (program.id, location); + #end + + } + + + public static inline function getUniformLocation (program:GLProgram, name:String):GLUniformLocation { + + #if js + return context.getUniformLocation (program, name); + #else + return lime_gl_get_uniform_location (program.id, name); + #end + + } + + + public static inline function getVertexAttrib (index:Int, pname:Int):Int /*Dynamic*/ { + + #if js + return context.getVertexAttrib (index, pname); + #else + return lime_gl_get_vertex_attrib (index, pname); + #end + + } + + + public static inline function getVertexAttribOffset (index:Int, pname:Int):Int { + + #if js + return context.getVertexAttribOffset (index, pname); + #else + return lime_gl_get_vertex_attrib_offset (index, pname); + #end + + } + + + public static inline function hint (target:Int, mode:Int):Void { + + #if js + context.hint (target, mode); + #else + lime_gl_hint (target, mode); + #end + + } + + + public static inline function isBuffer (buffer:GLBuffer):Bool { + + #if js + return context.isBuffer (buffer); + #else + return buffer != null && buffer.id > 0 && lime_gl_is_buffer (buffer.id); + #end + + } + + + // This is non-static + // public function isContextLost():Bool { return false; } + + + public static inline function isEnabled (cap:Int):Bool { + + #if js + return context.isEnabled (cap); + #else + return lime_gl_is_enabled (cap); + #end + + } + + + public static inline function isFramebuffer (framebuffer:GLFramebuffer):Bool { + + #if js + return context.isFramebuffer (framebuffer); + #else + return framebuffer != null && framebuffer.id > 0 && lime_gl_is_framebuffer (framebuffer.id); + #end + + } + + + public static inline function isProgram (program:GLProgram):Bool { + + #if js + return context.isProgram (program); + #else + return program != null && program.id > 0 && lime_gl_is_program (program.id); + #end + + } + + + public static inline function isRenderbuffer (renderbuffer:GLRenderbuffer):Bool { + + #if js + return context.isRenderbuffer (renderbuffer); + #else + return renderbuffer != null && renderbuffer.id > 0 && lime_gl_is_renderbuffer (renderbuffer.id); + #end + + } + + + public static inline function isShader (shader:GLShader):Bool { + + #if js + return context.isShader (shader); + #else + return shader != null && shader.id > 0 && lime_gl_is_shader (shader.id); + #end + + } + + + public static inline function isTexture (texture:GLTexture):Bool { + + #if js + return context.isTexture (texture); + #else + return texture != null && texture.id > 0 && lime_gl_is_texture (texture.id); + #end + + } + + + public static inline function lineWidth (width:Float):Void { + + #if js + context.lineWidth (width); + #else + lime_gl_line_width (width); + #end + + } + + + public static inline function linkProgram (program:GLProgram):Void { + + #if js + context.linkProgram (program); + #else + lime_gl_link_program (program.id); + #end + + } + + + public static inline function pixelStorei (pname:Int, param:Int):Void { + + #if js + context.pixelStorei (pname, param); + #else + lime_gl_pixel_storei (pname, param); + #end + + } + + + public static inline function polygonOffset (factor:Float, units:Float):Void { + + #if js + context.polygonOffset (factor, units); + #else + lime_gl_polygon_offset (factor, units); + #end + + } + + + public static inline function readPixels (x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:ArrayBufferView):Void { + + #if js + context.readPixels (x, y, width, height, format, type, pixels); + #else + lime_gl_read_pixels (x, y, width, height, format, type, pixels == null ? null : pixels.getByteBuffer (), pixels == null ? null : pixels.getStart ()); + #end + + } + + + public static inline function renderbufferStorage (target:Int, internalformat:Int, width:Int, height:Int):Void { + + #if js + context.renderbufferStorage (target, internalformat, width, height); + #else + lime_gl_renderbuffer_storage (target, internalformat, width, height); + #end + + } + + + public static inline function sampleCoverage (value:Float, invert:Bool):Void { + + #if js + context.sampleCoverage (value, invert); + #else + lime_gl_sample_coverage (value, invert); + #end + + } + + + public static inline function scissor (x:Int, y:Int, width:Int, height:Int):Void { + + #if js + context.scissor (x, y, width, height); + #else + lime_gl_scissor (x, y, width, height); + #end + + } + + + public static inline function shaderSource (shader:GLShader, source:String):Void { + + #if js + context.shaderSource (shader, source); + #else + lime_gl_shader_source (shader.id, source); + #end + + } + + + public static inline function stencilFunc (func:Int, ref:Int, mask:Int):Void { + + #if js + context.stencilFunc (func, ref, mask); + #else + lime_gl_stencil_func (func, ref, mask); + #end + + } + + + public static inline function stencilFuncSeparate (face:Int, func:Int, ref:Int, mask:Int):Void { + + #if js + context.stencilFuncSeparate (face, func, ref, mask); + #else + lime_gl_stencil_func_separate (face, func, ref, mask); + #end + + } + + + public static inline function stencilMask (mask:Int):Void { + + #if js + context.stencilMask (mask); + #else + lime_gl_stencil_mask (mask); + #end + + } + + + public static inline function stencilMaskSeparate (face:Int, mask:Int):Void { + + #if js + context.stencilMaskSeparate (face, mask); + #else + lime_gl_stencil_mask_separate (face, mask); + #end + + } + + + public static inline function stencilOp (fail:Int, zfail:Int, zpass:Int):Void { + + #if js + context.stencilOp (fail, zfail, zpass); + #else + lime_gl_stencil_op (fail, zfail, zpass); + #end + + } + + + public static inline function stencilOpSeparate (face:Int, fail:Int, zfail:Int, zpass:Int):Void { + + #if js + context.stencilOpSeparate (face, fail, zfail, zpass); + #else + lime_gl_stencil_op_separate (face, fail, zfail, zpass); + #end + + } + + + public static inline function texImage2D (target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, pixels:ArrayBufferView):Void { + + #if js + context.texImage2D (target, level, internalformat, width, height, border, format, type, pixels); + #else + lime_gl_tex_image_2d (target, level, internalformat, width, height, border, format, type, pixels == null ? null : pixels.getByteBuffer (), pixels == null ? null : pixels.getStart ()); + #end + + } + + + public static inline function texParameterf (target:Int, pname:Int, param:Float):Void { + + #if js + context.texParameterf (target, pname, param); + #else + lime_gl_tex_parameterf (target, pname, param); + #end + + } + + + public static inline function texParameteri (target:Int, pname:Int, param:Int):Void { + + #if js + context.texParameteri (target, pname, param); + #else + lime_gl_tex_parameteri (target, pname, param); + #end + + } + + + public static inline function texSubImage2D (target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, pixels:ArrayBufferView):Void { + + #if js + context.texSubImage2D (target, level, xoffset, yoffset, width, height, format, type, pixels); + #else + lime_gl_tex_sub_image_2d (target, level, xoffset, yoffset, width, height, format, type, pixels == null ? null : pixels.getByteBuffer(), pixels == null ? null : pixels.getStart()); + #end + + } + + + public static inline function uniform1f (location:GLUniformLocation, x:Float):Void { + + #if js + context.uniform1f (location, x); + #else + lime_gl_uniform1f (location, x); + #end + + } + + + public static inline function uniform1fv (location:GLUniformLocation, x:Float32Array):Void { + + #if js + context.uniform1fv (location, x); + #else + lime_gl_uniform1fv (location, x.getByteBuffer ()); + #end + + } + + + public static inline function uniform1i (location:GLUniformLocation, x:Int):Void { + + #if js + context.uniform1i (location, x); + #else + lime_gl_uniform1i (location, x); + #end + + } + + + public static inline function uniform1iv (location:GLUniformLocation, v:Int32Array):Void { + + #if js + context.uniform1iv (location, v); + #else + lime_gl_uniform1iv (location, v.getByteBuffer ()); + #end + + } + + + public static inline function uniform2f (location:GLUniformLocation, x:Float, y:Float):Void { + + #if js + context.uniform2f (location, x, y); + #else + lime_gl_uniform2f (location, x, y); + #end + + } + + + public static inline function uniform2fv (location:GLUniformLocation, v:Float32Array):Void { + + #if js + context.uniform2fv (location, v); + #else + lime_gl_uniform2fv (location, v.getByteBuffer ()); + #end + + } + + + public static inline function uniform2i (location:GLUniformLocation, x:Int, y:Int):Void { + + #if js + context.uniform2i (location, x, y); + #else + lime_gl_uniform2i (location, x, y); + #end + + } + + + public static inline function uniform2iv (location:GLUniformLocation, v:Int32Array):Void { + + #if js + context.uniform2iv (location, v); + #else + lime_gl_uniform2iv (location, v.getByteBuffer ()); + #end + + } + + + public static inline function uniform3f (location:GLUniformLocation, x:Float, y:Float, z:Float):Void { + + #if js + context.uniform3f (location, x, y, z); + #else + lime_gl_uniform3f (location, x, y, z); + #end + + } + + + public static inline function uniform3fv (location:GLUniformLocation, v:Float32Array):Void { + + #if js + context.uniform3fv (location, v); + #else + lime_gl_uniform3fv (location, v.getByteBuffer ()); + #end + + } + + + public static inline function uniform3i (location:GLUniformLocation, x:Int, y:Int, z:Int):Void { + + #if js + context.uniform3i (location, x, y, z); + #else + lime_gl_uniform3i (location, x, y, z); + #end + + } + + + public static inline function uniform3iv (location:GLUniformLocation, v:Int32Array):Void { + + #if js + context.uniform3iv (location, v); + #else + lime_gl_uniform3iv (location, v.getByteBuffer ()); + #end + + } + + + public static inline function uniform4f (location:GLUniformLocation, x:Float, y:Float, z:Float, w:Float):Void { + + #if js + context.uniform4f (location, x, y, z, w); + #else + lime_gl_uniform4f (location, x, y, z, w); + #end + + } + + + public static inline function uniform4fv (location:GLUniformLocation, v:Float32Array):Void { + + #if js + context.uniform4fv (location, v); + #else + lime_gl_uniform4fv (location, v.getByteBuffer ()); + #end + + } + + + public static inline function uniform4i (location:GLUniformLocation, x:Int, y:Int, z:Int, w:Int):Void { + + #if js + context.uniform4i (location, x, y, z, w); + #else + lime_gl_uniform4i (location, x, y, z, w); + #end + + } + + + public static inline function uniform4iv (location:GLUniformLocation, v:Int32Array):Void { + + #if js + context.uniform4iv (location, v); + #else + lime_gl_uniform4iv (location, v.getByteBuffer ()); + #end + + } + + + public static inline function uniformMatrix2fv (location:GLUniformLocation, transpose:Bool, v:Float32Array):Void { + + #if js + context.uniformMatrix2fv (location, transpose, v); + #else + lime_gl_uniform_matrix (location, transpose, v.getByteBuffer (), 2); + #end + + } + + + public static inline function uniformMatrix3fv (location:GLUniformLocation, transpose:Bool, v:Float32Array):Void { + + #if js + context.uniformMatrix3fv (location, transpose, v); + #else + lime_gl_uniform_matrix (location, transpose, v.getByteBuffer (), 3); + #end + + } + + + public static inline function uniformMatrix4fv (location:GLUniformLocation, transpose:Bool, v:Float32Array):Void { + + #if js + context.uniformMatrix4fv (location, transpose, v); + #else + lime_gl_uniform_matrix (location, transpose, v.getByteBuffer (), 4); + #end + + } + + + /*public static inline function uniformMatrix3D(location:GLUniformLocation, transpose:Bool, matrix:Matrix3D):Void { + + lime_gl_uniform_matrix(location, transpose, Float32Array.fromMatrix(matrix).getByteBuffer() , 4); + + }*/ + + + public static inline function useProgram (program:GLProgram):Void { + + #if js + context.useProgram (program); + #else + lime_gl_use_program (program == null ? 0 : program.id); + #end + + } + + + public static inline function validateProgram (program:GLProgram):Void { + + #if js + context.validateProgram (program); + #else + lime_gl_validate_program (program.id); + #end + + } + + + public static inline function vertexAttrib1f (indx:Int, x:Float):Void { + + #if js + context.vertexAttrib1f (indx, x); + #else + lime_gl_vertex_attrib1f (indx, x); + #end + + } + + + public static inline function vertexAttrib1fv (indx:Int, values:Float32Array):Void { + + #if js + context.vertexAttrib1fv (indx, values); + #else + lime_gl_vertex_attrib1fv (indx, values.getByteBuffer ()); + #end + + } + + + public static inline function vertexAttrib2f (indx:Int, x:Float, y:Float):Void { + + #if js + context.vertexAttrib2f (indx, x, y); + #else + lime_gl_vertex_attrib2f (indx, x, y); + #end + + } + + + public static inline function vertexAttrib2fv (indx:Int, values:Float32Array):Void { + + #if js + context.vertexAttrib2fv (indx, values); + #else + lime_gl_vertex_attrib2fv (indx, values.getByteBuffer()); + #end + + } + + + public static inline function vertexAttrib3f (indx:Int, x:Float, y:Float, z:Float):Void { + + #if js + context.vertexAttrib3f (indx, x, y, z); + #else + lime_gl_vertex_attrib3f (indx, x, y, z); + #end + + } + + + public static inline function vertexAttrib3fv (indx:Int, values:Float32Array):Void { + + #if js + context.vertexAttrib3fv (indx, values); + #else + lime_gl_vertex_attrib3fv (indx, values.getByteBuffer ()); + #end + + } + + + public static inline function vertexAttrib4f (indx:Int, x:Float, y:Float, z:Float, w:Float):Void { + + #if js + context.vertexAttrib4f (indx, x, y, z, w); + #else + lime_gl_vertex_attrib4f (indx, x, y, z, w); + #end + + } + + + public static inline function vertexAttrib4fv (indx:Int, values:Float32Array):Void { + + #if js + context.vertexAttrib4fv (indx, values); + #else + lime_gl_vertex_attrib4fv (indx, values.getByteBuffer ()); + #end + + } + + + public static inline function vertexAttribPointer (indx:Int, size:Int, type:Int, normalized:Bool, stride:Int, offset:Int):Void { + + #if js + context.vertexAttribPointer (indx, size, type, normalized, stride, offset); + #else + lime_gl_vertex_attrib_pointer (indx, size, type, normalized, stride, offset); + #end + + } + + + public static inline function viewport (x:Int, y:Int, width:Int, height:Int):Void { + + #if js + context.viewport (x, y, width, height); + #else + lime_gl_viewport (x, y, width, height); + #end + + } + + + private static function get_version ():Int { return 2; } + + + #if (cpp || neko) + + private static var lime_gl_active_texture = System.load ("lime", "lime_gl_active_texture", 1); + private static var lime_gl_attach_shader = System.load ("lime", "lime_gl_attach_shader", 2); + private static var lime_gl_bind_attrib_location = System.load ("lime", "lime_gl_bind_attrib_location", 3); + private static var lime_gl_bind_buffer = System.load ("lime", "lime_gl_bind_buffer", 2); + private static var lime_gl_bind_framebuffer = System.load ("lime", "lime_gl_bind_framebuffer", 2); + private static var lime_gl_bind_renderbuffer = System.load ("lime", "lime_gl_bind_renderbuffer", 2); + private static var lime_gl_bind_texture = System.load ("lime", "lime_gl_bind_texture", 2); + private static var lime_gl_blend_color = System.load ("lime", "lime_gl_blend_color", 4); + private static var lime_gl_blend_equation = System.load ("lime", "lime_gl_blend_equation", 1); + private static var lime_gl_blend_equation_separate = System.load ("lime", "lime_gl_blend_equation_separate", 2); + private static var lime_gl_blend_func = System.load ("lime", "lime_gl_blend_func", 2); + private static var lime_gl_blend_func_separate = System.load ("lime", "lime_gl_blend_func_separate", 4); + private static var lime_gl_buffer_data = System.load ("lime", "lime_gl_buffer_data", 5); + private static var lime_gl_buffer_sub_data = System.load ("lime", "lime_gl_buffer_sub_data", 5); + private static var lime_gl_check_framebuffer_status = System.load ("lime", "lime_gl_check_framebuffer_status", 1); + private static var lime_gl_clear = System.load ("lime", "lime_gl_clear", 1); + private static var lime_gl_clear_color = System.load ("lime", "lime_gl_clear_color", 4); + private static var lime_gl_clear_depth = System.load ("lime", "lime_gl_clear_depth", 1); + private static var lime_gl_clear_stencil = System.load ("lime", "lime_gl_clear_stencil", 1); + private static var lime_gl_color_mask = System.load ("lime", "lime_gl_color_mask", 4); + private static var lime_gl_compile_shader = System.load ("lime", "lime_gl_compile_shader", 1); + private static var lime_gl_compressed_tex_image_2d = System.load ("lime", "lime_gl_compressed_tex_image_2d", -1); + private static var lime_gl_compressed_tex_sub_image_2d = System.load ("lime", "lime_gl_compressed_tex_sub_image_2d", -1); + private static var lime_gl_copy_tex_image_2d = System.load ("lime", "lime_gl_copy_tex_image_2d", -1); + private static var lime_gl_copy_tex_sub_image_2d = System.load ("lime", "lime_gl_copy_tex_sub_image_2d", -1); + private static var lime_gl_create_buffer = System.load ("lime", "lime_gl_create_buffer", 0); + private static var lime_gl_create_framebuffer = System.load ("lime", "lime_gl_create_framebuffer", 0); + private static var lime_gl_create_program = System.load ("lime", "lime_gl_create_program", 0); + private static var lime_gl_create_render_buffer = System.load ("lime", "lime_gl_create_render_buffer", 0); + private static var lime_gl_create_shader = System.load ("lime", "lime_gl_create_shader", 1); + private static var lime_gl_create_texture = System.load ("lime", "lime_gl_create_texture", 0); + private static var lime_gl_cull_face = System.load ("lime", "lime_gl_cull_face", 1); + private static var lime_gl_delete_buffer = System.load ("lime", "lime_gl_delete_buffer", 1); + private static var lime_gl_delete_framebuffer = System.load ("lime", "lime_gl_delete_framebuffer", 1); + private static var lime_gl_delete_program = System.load ("lime", "lime_gl_delete_program", 1); + private static var lime_gl_delete_render_buffer = System.load ("lime", "lime_gl_delete_render_buffer", 1); + private static var lime_gl_delete_shader = System.load ("lime", "lime_gl_delete_shader", 1); + private static var lime_gl_delete_texture = System.load ("lime", "lime_gl_delete_texture", 1); + private static var lime_gl_depth_func = System.load ("lime", "lime_gl_depth_func", 1); + private static var lime_gl_depth_mask = System.load ("lime", "lime_gl_depth_mask", 1); + private static var lime_gl_depth_range = System.load ("lime", "lime_gl_depth_range", 2); + private static var lime_gl_detach_shader = System.load ("lime", "lime_gl_detach_shader", 2); + private static var lime_gl_disable = System.load ("lime", "lime_gl_disable", 1); + private static var lime_gl_disable_vertex_attrib_array = System.load ("lime", "lime_gl_disable_vertex_attrib_array", 1); + private static var lime_gl_draw_arrays = System.load ("lime", "lime_gl_draw_arrays", 3); + private static var lime_gl_draw_elements = System.load ("lime", "lime_gl_draw_elements", 4); + private static var lime_gl_enable = System.load ("lime", "lime_gl_enable", 1); + private static var lime_gl_enable_vertex_attrib_array = System.load ("lime", "lime_gl_enable_vertex_attrib_array", 1); + private static var lime_gl_finish = System.load ("lime", "lime_gl_finish", 0); + private static var lime_gl_flush = System.load ("lime", "lime_gl_flush", 0); + private static var lime_gl_framebuffer_renderbuffer = System.load ("lime", "lime_gl_framebuffer_renderbuffer", 4); + private static var lime_gl_framebuffer_texture2D = System.load ("lime", "lime_gl_framebuffer_texture2D", 5); + private static var lime_gl_front_face = System.load ("lime", "lime_gl_front_face", 1); + private static var lime_gl_generate_mipmap = System.load ("lime", "lime_gl_generate_mipmap", 1); + private static var lime_gl_get_active_attrib = System.load ("lime", "lime_gl_get_active_attrib", 2); + private static var lime_gl_get_active_uniform = System.load ("lime", "lime_gl_get_active_uniform", 2); + private static var lime_gl_get_attrib_location = System.load ("lime", "lime_gl_get_attrib_location", 2); + private static var lime_gl_get_buffer_paramerter = System.load ("lime", "lime_gl_get_buffer_paramerter", 2); + private static var lime_gl_get_context_attributes = System.load ("lime", "lime_gl_get_context_attributes", 0); + private static var lime_gl_get_error = System.load ("lime", "lime_gl_get_error", 0); + private static var lime_gl_get_framebuffer_attachment_parameter = System.load ("lime", "lime_gl_get_framebuffer_attachment_parameter", 3); + private static var lime_gl_get_parameter = System.load ("lime", "lime_gl_get_parameter", 1); + // static var lime_gl_get_extension = System.load ("lime", "lime_gl_get_extension", 1); + private static var lime_gl_get_program_info_log = System.load ("lime", "lime_gl_get_program_info_log", 1); + private static var lime_gl_get_program_parameter = System.load ("lime", "lime_gl_get_program_parameter", 2); + private static var lime_gl_get_render_buffer_parameter = System.load ("lime", "lime_gl_get_render_buffer_parameter", 2); + private static var lime_gl_get_shader_info_log = System.load ("lime", "lime_gl_get_shader_info_log", 1); + private static var lime_gl_get_shader_parameter = System.load ("lime", "lime_gl_get_shader_parameter", 2); + private static var lime_gl_get_shader_precision_format = System.load ("lime", "lime_gl_get_shader_precision_format", 2); + private static var lime_gl_get_shader_source = System.load ("lime", "lime_gl_get_shader_source", 1); + private static var lime_gl_get_supported_extensions = System.load ("lime", "lime_gl_get_supported_extensions", 1); + private static var lime_gl_get_tex_parameter = System.load ("lime", "lime_gl_get_tex_parameter", 2); + private static var lime_gl_get_uniform = System.load ("lime", "lime_gl_get_uniform", 2); + private static var lime_gl_get_uniform_location = System.load ("lime", "lime_gl_get_uniform_location", 2); + private static var lime_gl_get_vertex_attrib = System.load ("lime", "lime_gl_get_vertex_attrib", 2); + private static var lime_gl_get_vertex_attrib_offset = System.load ("lime", "lime_gl_get_vertex_attrib_offset", 2); + private static var lime_gl_hint = System.load ("lime", "lime_gl_hint", 2); + private static var lime_gl_is_buffer = System.load ("lime", "lime_gl_is_buffer", 1); + private static var lime_gl_is_enabled = System.load ("lime", "lime_gl_is_enabled", 1); + private static var lime_gl_is_framebuffer = System.load ("lime", "lime_gl_is_framebuffer", 1); + private static var lime_gl_is_program = System.load ("lime", "lime_gl_is_program", 1); + private static var lime_gl_is_renderbuffer = System.load ("lime", "lime_gl_is_renderbuffer", 1); + private static var lime_gl_is_shader = System.load ("lime", "lime_gl_is_shader", 1); + private static var lime_gl_is_texture = System.load ("lime", "lime_gl_is_texture", 1); + private static var lime_gl_line_width = System.load ("lime", "lime_gl_line_width", 1); + private static var lime_gl_link_program = System.load ("lime", "lime_gl_link_program", 1); + private static var lime_gl_pixel_storei = System.load ("lime", "lime_gl_pixel_storei", 2); + private static var lime_gl_polygon_offset = System.load ("lime", "lime_gl_polygon_offset", 2); + private static var lime_gl_read_pixels = System.load ("lime", "lime_gl_read_pixels", -1); + private static var lime_gl_renderbuffer_storage = System.load ("lime", "lime_gl_renderbuffer_storage", 4); + private static var lime_gl_sample_coverage = System.load ("lime", "lime_gl_sample_coverage", 2); + private static var lime_gl_scissor = System.load ("lime", "lime_gl_scissor", 4); + private static var lime_gl_shader_source = System.load ("lime", "lime_gl_shader_source", 2); + private static var lime_gl_stencil_func = System.load ("lime", "lime_gl_stencil_func", 3); + private static var lime_gl_stencil_func_separate = System.load ("lime", "lime_gl_stencil_func_separate", 4); + private static var lime_gl_stencil_mask = System.load ("lime", "lime_gl_stencil_mask", 1); + private static var lime_gl_stencil_mask_separate = System.load ("lime", "lime_gl_stencil_mask_separate", 2); + private static var lime_gl_stencil_op = System.load ("lime", "lime_gl_stencil_op", 3); + private static var lime_gl_stencil_op_separate = System.load ("lime", "lime_gl_stencil_op_separate", 4); + private static var lime_gl_tex_image_2d = System.load ("lime", "lime_gl_tex_image_2d", -1); + private static var lime_gl_tex_parameterf = System.load ("lime", "lime_gl_tex_parameterf", 3); + private static var lime_gl_tex_parameteri = System.load ("lime", "lime_gl_tex_parameteri", 3); + private static var lime_gl_tex_sub_image_2d = System.load ("lime", "lime_gl_tex_sub_image_2d", -1); + private static var lime_gl_uniform1f = System.load ("lime", "lime_gl_uniform1f", 2); + private static var lime_gl_uniform1fv = System.load ("lime", "lime_gl_uniform1fv", 2); + private static var lime_gl_uniform1i = System.load ("lime", "lime_gl_uniform1i", 2); + private static var lime_gl_uniform1iv = System.load ("lime", "lime_gl_uniform1iv", 2); + private static var lime_gl_uniform2f = System.load ("lime", "lime_gl_uniform2f", 3); + private static var lime_gl_uniform2fv = System.load ("lime", "lime_gl_uniform2fv", 2); + private static var lime_gl_uniform2i = System.load ("lime", "lime_gl_uniform2i", 3); + private static var lime_gl_uniform2iv = System.load ("lime", "lime_gl_uniform2iv", 2); + private static var lime_gl_uniform3f = System.load ("lime", "lime_gl_uniform3f", 4); + private static var lime_gl_uniform3fv = System.load ("lime", "lime_gl_uniform3fv", 2); + private static var lime_gl_uniform3i = System.load ("lime", "lime_gl_uniform3i", 4); + private static var lime_gl_uniform3iv = System.load ("lime", "lime_gl_uniform3iv", 2); + private static var lime_gl_uniform4f = System.load ("lime", "lime_gl_uniform4f", 5); + private static var lime_gl_uniform4fv = System.load ("lime", "lime_gl_uniform4fv", 2); + private static var lime_gl_uniform4i = System.load ("lime", "lime_gl_uniform4i", 5); + private static var lime_gl_uniform4iv = System.load ("lime", "lime_gl_uniform4iv", 2); + private static var lime_gl_uniform_matrix = System.load ("lime", "lime_gl_uniform_matrix", 4); + private static var lime_gl_use_program = System.load ("lime", "lime_gl_use_program", 1); + private static var lime_gl_validate_program = System.load ("lime", "lime_gl_validate_program", 1); + private static var lime_gl_version = System.load ("lime", "lime_gl_version", 0); + private static var lime_gl_vertex_attrib1f = System.load ("lime", "lime_gl_vertex_attrib1f", 2); + private static var lime_gl_vertex_attrib1fv = System.load ("lime", "lime_gl_vertex_attrib1fv", 2); + private static var lime_gl_vertex_attrib2f = System.load ("lime", "lime_gl_vertex_attrib2f", 3); + private static var lime_gl_vertex_attrib2fv = System.load ("lime", "lime_gl_vertex_attrib2fv", 2); + private static var lime_gl_vertex_attrib3f = System.load ("lime", "lime_gl_vertex_attrib3f", 4); + private static var lime_gl_vertex_attrib3fv = System.load ("lime", "lime_gl_vertex_attrib3fv", 2); + private static var lime_gl_vertex_attrib4f = System.load ("lime", "lime_gl_vertex_attrib4f", 5); + private static var lime_gl_vertex_attrib4fv = System.load ("lime", "lime_gl_vertex_attrib4fv", 2); + private static var lime_gl_vertex_attrib_pointer = System.load ("lime", "lime_gl_vertex_attrib_pointer", -1); + private static var lime_gl_viewport = System.load ("lime", "lime_gl_viewport", 4); + + #end + +} \ No newline at end of file diff --git a/lime/graphics/opengl/GLActiveInfo.hx b/lime/graphics/opengl/GLActiveInfo.hx index 30f57cf83..caccb30ec 100644 --- a/lime/graphics/opengl/GLActiveInfo.hx +++ b/lime/graphics/opengl/GLActiveInfo.hx @@ -1,10 +1,16 @@ package lime.graphics.opengl; +#if js +typedef GLActiveInfo = js.html.webgl.ActiveInfo; +#else typedef GLActiveInfo = { + + size:Int, + type:Int, + name:String + +} - size : Int, - type : Int, - name : String -} //GLActiveInfo \ No newline at end of file +#end \ No newline at end of file diff --git a/lime/graphics/opengl/GLBuffer.hx b/lime/graphics/opengl/GLBuffer.hx index 272583e90..bea0a5f8b 100644 --- a/lime/graphics/opengl/GLBuffer.hx +++ b/lime/graphics/opengl/GLBuffer.hx @@ -1,10 +1,20 @@ package lime.graphics.opengl; +#if js +typedef GLBuffer = js.html.webgl.Buffer; +#else class GLBuffer extends GLObject { + + + private override function getType ():String { + + return "Buffer"; + + } + + +} - override function getType ():String { - return "Buffer"; - } -} //GLBuffer \ No newline at end of file +#end \ No newline at end of file diff --git a/lime/graphics/opengl/GLContextAttributes.hx b/lime/graphics/opengl/GLContextAttributes.hx index 2dadbb6f8..0c46bf9f1 100644 --- a/lime/graphics/opengl/GLContextAttributes.hx +++ b/lime/graphics/opengl/GLContextAttributes.hx @@ -1,13 +1,19 @@ package lime.graphics.opengl; +#if js +typedef GLContextAttributes = js.html.webgl.ContextAttributes; +#else typedef GLContextAttributes = { - - alpha:Bool, - depth:Bool, - stencil:Bool, - antialias:Bool, - premultipliedAlpha:Bool, - preserveDrawingBuffer:Bool - -} //GLContextAttributes \ No newline at end of file + + alpha:Bool, + depth:Bool, + stencil:Bool, + antialias:Bool, + premultipliedAlpha:Bool, + preserveDrawingBuffer:Bool + +} + + +#end \ No newline at end of file diff --git a/lime/graphics/opengl/GLFramebuffer.hx b/lime/graphics/opengl/GLFramebuffer.hx index 0a1b1bc55..58c836030 100644 --- a/lime/graphics/opengl/GLFramebuffer.hx +++ b/lime/graphics/opengl/GLFramebuffer.hx @@ -1,10 +1,20 @@ package lime.graphics.opengl; +#if js +typedef GLFramebuffer = js.html.webgl.Framebuffer; +#else class GLFramebuffer extends GLObject { + + + private override function getType ():String { + + return "Framebuffer"; + + } + + +} - override function getType () : String { - return "Framebuffer"; - } -} //GLFramebuffer \ No newline at end of file +#end \ No newline at end of file diff --git a/lime/graphics/opengl/GLProgram.hx b/lime/graphics/opengl/GLProgram.hx index a4ed0305e..a5fc77110 100644 --- a/lime/graphics/opengl/GLProgram.hx +++ b/lime/graphics/opengl/GLProgram.hx @@ -1,27 +1,45 @@ package lime.graphics.opengl; +#if js +typedef GLProgram = js.html.webgl.Program; +#else class GLProgram extends GLObject { - - public var shaders:Array; - - public function new( version:Int, id:Dynamic ) { + + + public var shaders:Array; + + + public function new (version:Int, id:Dynamic) { + + super (version, id); + shaders = new Array (); + + } + + + public function attach (shader:GLShader):Void { + + shaders.push (shader); + + } + + + public function getShaders ():Array { + + return shaders.copy (); + + } + + + private override function getType ():String { + + return "Program"; + + } + + +} - super (version, id); - shaders = new Array (); - } //new - - public function attach( shader:GLShader ) : Void { - shaders.push(shader); - } //attach - - public function getShaders() : Array { - return shaders.copy(); - } //getShaders - - override function getType ():String { - return "Program"; - } //getType - -} //GLProgram \ No newline at end of file +#end \ No newline at end of file diff --git a/lime/graphics/opengl/GLRenderbuffer.hx b/lime/graphics/opengl/GLRenderbuffer.hx index 27ae3d8ef..bd48fab9b 100644 --- a/lime/graphics/opengl/GLRenderbuffer.hx +++ b/lime/graphics/opengl/GLRenderbuffer.hx @@ -1,10 +1,20 @@ package lime.graphics.opengl; +#if js +typedef GLRenderbuffer = js.html.webgl.Renderbuffer; +#else class GLRenderbuffer extends GLObject { - - override function getType ():String { - return "Renderbuffer"; - } + + + private override function getType ():String { + + return "Renderbuffer"; + + } -} //GLRenderbuffer \ No newline at end of file + +} + + +#end \ No newline at end of file diff --git a/lime/graphics/opengl/GLShader.hx b/lime/graphics/opengl/GLShader.hx index ddddbf7b3..bb00e5110 100644 --- a/lime/graphics/opengl/GLShader.hx +++ b/lime/graphics/opengl/GLShader.hx @@ -1,10 +1,20 @@ package lime.graphics.opengl; +#if js +typedef GLShader = js.html.webgl.Shader; +#else class GLShader extends GLObject { - - override function getType ():String { - return "Shader"; - } + + + private override function getType ():String { + + return "Shader"; + + } -} //GLShader \ No newline at end of file + +} + + +#end \ No newline at end of file diff --git a/lime/graphics/opengl/GLShaderPrecisionFormat.hx b/lime/graphics/opengl/GLShaderPrecisionFormat.hx new file mode 100644 index 000000000..f52721a64 --- /dev/null +++ b/lime/graphics/opengl/GLShaderPrecisionFormat.hx @@ -0,0 +1,16 @@ +package lime.graphics.opengl; +#if js +typedef GLShaderPrecisionFormat = js.html.webgl.ShaderPrecisionFormat; +#else + + +typedef GLShaderPrecisionFormat = { + + rangeMin:Int, + rangeMax:Int, + precision:Int + +}; + + +#end \ No newline at end of file diff --git a/lime/graphics/opengl/GLTexture.hx b/lime/graphics/opengl/GLTexture.hx index 0a123b20e..fd6254f55 100644 --- a/lime/graphics/opengl/GLTexture.hx +++ b/lime/graphics/opengl/GLTexture.hx @@ -1,10 +1,20 @@ package lime.graphics.opengl; +#if js +typedef GLTexture = js.html.webgl.Texture; +#else class GLTexture extends GLObject { - - override function getType ():String { - return "Texture"; - } + + + private override function getType ():String { + + return "Texture"; + + } -} //GLTexture \ No newline at end of file + +} + + +#end \ No newline at end of file diff --git a/lime/graphics/opengl/GLUniformLocation.hx b/lime/graphics/opengl/GLUniformLocation.hx index 22a7fef0b..b531539ca 100644 --- a/lime/graphics/opengl/GLUniformLocation.hx +++ b/lime/graphics/opengl/GLUniformLocation.hx @@ -1,4 +1,10 @@ package lime.graphics.opengl; +#if js +typedef GLUniformLocation = js.html.webgl.UniformLocation; +#else -typedef GLUniformLocation = Int; \ No newline at end of file +typedef GLUniformLocation = Int; + + +#end \ No newline at end of file diff --git a/lime/system/System.hx b/lime/system/System.hx index 644648966..7f93af9cc 100644 --- a/lime/system/System.hx +++ b/lime/system/System.hx @@ -14,6 +14,8 @@ class System { static private function findHaxeLib (library:String):String { + #if sys + try { var proc = new Process ("haxelib", [ "path", library ]); @@ -48,6 +50,8 @@ class System { } catch (e:Dynamic) { } + #end + return ""; } @@ -55,6 +59,8 @@ class System { public static function load (library:String, method:String, args:Int = 0):Dynamic { + #if sys + #if (iphone || emscripten || android) return cpp.Lib.load (library, method, args); #end @@ -125,6 +131,12 @@ class System { } #end + #else + + var result = null; + + #end + return result; } @@ -132,18 +144,24 @@ class System { private static function sysName ():String { + #if sys #if cpp var sys_string = cpp.Lib.load ("std", "sys_string", 0); return sys_string (); #else return Sys.systemName (); #end + #else + return null; + #end } private static function tryLoad (name:String, library:String, func:String, args:Int):Dynamic { + #if sys + try { #if cpp @@ -168,6 +186,8 @@ class System { } + #end + return null; } @@ -175,6 +195,8 @@ class System { private static function loaderTrace (message:String) { + #if sys + #if cpp var get_env = cpp.Lib.load ("std", "get_env", 1); var debug = (get_env ("OPENFL_LOAD_DEBUG") != null); @@ -188,6 +210,8 @@ class System { } + #end + } diff --git a/lime/ui/Window.hx b/lime/ui/Window.hx index 7f9cdf751..2c5d03520 100644 --- a/lime/ui/Window.hx +++ b/lime/ui/Window.hx @@ -2,24 +2,195 @@ package lime.ui; import lime.app.Application; +import lime.app.Config; +import lime.graphics.RenderEvent; +import lime.graphics.RenderEventManager; import lime.system.System; +#if js +import lime.graphics.opengl.GL; +import js.html.webgl.RenderingContext; +import js.html.CanvasElement; +import js.Browser; +#end + +@:access(lime.graphics.RenderEventManager) class Window { public var handle:Dynamic; + public var height:Int; + public var width:Int; + + #if js + private var canvas:CanvasElement; + #end public function new (application:Application) { - #if (cpp || neko) + + + } + + + public function create (config:Config):Void { + + #if js + + if (Std.is (config.element, CanvasElement)) { + + canvas = cast config.element; + + } else { + + canvas = cast Browser.document.createElement ("canvas"); + + } + + var context:RenderingContext = cast canvas.getContext ("webgl"); + + if (context == null) { + + context = cast canvas.getContext ("experimental-webgl"); + + } + + #if debug + context = untyped WebGLDebugUtils.makeDebugContext (context); + #end + + GL.context = context; + + var style = canvas.style; + style.setProperty ("-webkit-transform", "translateZ(0)", null); + style.setProperty ("transform", "translateZ(0)", null); + + width = config.width; + height = config.height; + + //__originalWidth = width; + //__originalHeight = height; + + if (width == 0 && height == 0) { + + if (config.element != null) { + + width = config.element.clientWidth; + height = config.element.clientHeight; + + } else { + + width = Browser.window.innerWidth; + height = Browser.window.innerHeight; + + } + + //__fullscreen = true; + + } + + //stageWidth = width; + //stageHeight = height; + + if (canvas != null) { + + canvas.width = width; + canvas.height = height; + + /*} else { + + __div.style.width = width + "px"; + __div.style.height = height + "px"; + */ + } + + //__resize (); + + //Browser.window.addEventListener ("resize", window_onResize); + //Browser.window.addEventListener ("focus", window_onFocus); + //Browser.window.addEventListener ("blur", window_onBlur); + + if (config.element != null) { + + if (canvas != null) { + + if (config.element != cast canvas) { + + config.element.appendChild (canvas); + + } + + } else { + + //element.appendChild (__div); + + } + + } + + + #if stats + var __stats = untyped __js__("new Stats ()"); + __stats.domElement.style.position = "absolute"; + __stats.domElement.style.top = "0px"; + Browser.document.body.appendChild (__stats.domElement); + #end + + /*var keyEvents = [ "keydown", "keyup" ]; + var touchEvents = [ "touchstart", "touchmove", "touchend" ]; + var mouseEvents = [ "mousedown", "mousemove", "mouseup", "click", "dblclick", "mousewheel" ]; + var focusEvents = [ "focus", "blur" ]; + + var element = __canvas != null ? __canvas : __div; + + for (type in keyEvents) { + + Browser.window.addEventListener (type, window_onKey, false); + + } + + for (type in touchEvents) { + + element.addEventListener (type, element_onTouch, true); + + } + + for (type in mouseEvents) { + + element.addEventListener (type, element_onMouse, true); + + } + + for (type in focusEvents) { + + element.addEventListener (type, element_onFocus, true); + + } + + Browser.window.requestAnimationFrame (cast __render); + */ + render (); + + #elseif (cpp || neko) handle = lime_window_create (application.handle); #end } + #if js + private function render ():Void { + + RenderEventManager.instance.handleEvent (new RenderEvent ()); + + Browser.window.requestAnimationFrame (cast render); + + } + #end + + #if (cpp || neko) private static var lime_window_create = System.load ("lime", "lime_window_create", 1); #end diff --git a/lime/utils/ArrayBuffer.hx b/lime/utils/ArrayBuffer.hx index 1b752d893..f02372bfb 100644 --- a/lime/utils/ArrayBuffer.hx +++ b/lime/utils/ArrayBuffer.hx @@ -1,3 +1,10 @@ package lime.utils; +#if js +typedef ArrayBuffer = js.html.ArrayBuffer; +#else -typedef ArrayBuffer = lime.utils.ByteArray; \ No newline at end of file + +typedef ArrayBuffer = lime.utils.ByteArray; + + +#end \ No newline at end of file diff --git a/lime/utils/ArrayBufferView.hx b/lime/utils/ArrayBufferView.hx index 1310ed0b2..677920cf8 100644 --- a/lime/utils/ArrayBufferView.hx +++ b/lime/utils/ArrayBufferView.hx @@ -1,238 +1,244 @@ package lime.utils; +#if html5 +typedef ArrayBufferView = js.html.ArrayBufferView; +#else -#if lime_native - import lime.utils.ByteArray; - import lime.utils.IMemoryRange; +import lime.utils.ByteArray; +import lime.utils.IMemoryRange; - #if cpp - import haxe.io.BytesData; - #end +#if cpp +import haxe.io.BytesData; +#end - class ArrayBufferView implements IMemoryRange { - - public var buffer (default, null) : ByteArray; - public var byteOffset (default, null) : Int; - public var byteLength (default, null) : Int; - - #if cpp - var bytes : BytesData; - #end - - function new( lengthOrBuffer:Dynamic, byteOffset:Int = 0, length:Null = null ) { - - if (Std.is(lengthOrBuffer, Int)) { - - byteLength = Std.int(lengthOrBuffer); - this.byteOffset = 0; - buffer = new ArrayBuffer(Std.int(lengthOrBuffer)); - - } else { - - buffer = lengthOrBuffer; - - if (buffer == null) { - throw "Invalid input buffer"; - } - - this.byteOffset = byteOffset; - - if (byteOffset > buffer.length) { - throw "Invalid starting position"; - } - - if (length == null) { - byteLength = buffer.length - byteOffset; - } else { - byteLength = length; - if (byteLength + byteOffset > buffer.length) { - throw "Invalid buffer length"; - } - } - - } - - buffer.bigEndian = false; - - #if cpp - bytes = buffer.getData(); - #end - - } +class ArrayBufferView implements IMemoryRange { + + + public var buffer (default, null) : ByteArray; + public var byteOffset (default, null) : Int; + public var byteLength (default, null) : Int; + + #if cpp + var bytes : BytesData; + #end + + + function new( lengthOrBuffer:Dynamic, byteOffset:Int = 0, length:Null = null ) { + + if (Std.is(lengthOrBuffer, Int)) { + + byteLength = Std.int(lengthOrBuffer); + this.byteOffset = 0; + buffer = new ArrayBuffer(Std.int(lengthOrBuffer)); + + } else { + + buffer = lengthOrBuffer; + + if (buffer == null) { + throw "Invalid input buffer"; + } + + this.byteOffset = byteOffset; + + if (byteOffset > buffer.length) { + throw "Invalid starting position"; + } + + if (length == null) { + byteLength = buffer.length - byteOffset; + } else { + byteLength = length; + + if (byteLength + byteOffset > buffer.length) { + throw "Invalid buffer length"; + } + } + + } + + buffer.bigEndian = false; + + #if cpp + bytes = buffer.getData(); + #end + + } + + public function getByteBuffer() : ByteArray { + + return buffer; + + } + + public function getLength() : Int { + + return byteLength; + + } + + public function getStart() : Int { + + return byteOffset; + + } + + inline public function getInt8( position:Int ) : Int { + + #if cpp + return untyped __global__.__hxcpp_memory_get_byte(bytes, position + byteOffset); + #else + buffer.position = position + byteOffset; + return buffer.readByte(); + #end + + } + + inline public function setInt8( position:Int, value:Int ) { + + #if cpp + untyped __global__.__hxcpp_memory_set_byte(bytes, position + byteOffset, value); + #else + buffer.position = position + byteOffset; + buffer.writeByte(value); + #end + + } + + inline public function getUInt8( position:Int ) : Int { + + #if cpp + return untyped __global__.__hxcpp_memory_get_byte(bytes, position + byteOffset) & 0xff; + #else + buffer.position = position + byteOffset; + return buffer.readUnsignedByte(); + #end + + } + + inline public function setUInt8( position:Int, value:Int ) { + + #if cpp + untyped __global__.__hxcpp_memory_set_byte(bytes, position + byteOffset, value); + #else + buffer.position = position + byteOffset; + buffer.writeByte(value); + #end + + } + + inline public function getInt16( position:Int ) : Int { + + #if cpp + untyped return __global__.__hxcpp_memory_get_i16(bytes, position + byteOffset); + #else + buffer.position = position + byteOffset; + return buffer.readShort(); + #end + + } + + inline public function setInt16( position:Int, value:Int ) { + + #if cpp + untyped __global__.__hxcpp_memory_set_i16(bytes, position + byteOffset, value); + #else + buffer.position = position + byteOffset; + buffer.writeShort(Std.int(value)); + #end + + } + + inline public function getUInt16( position:Int ) : Int { + + #if cpp + untyped return __global__.__hxcpp_memory_get_ui16(bytes, position + byteOffset) & 0xffff; + #else + buffer.position = position + byteOffset; + return buffer.readUnsignedShort(); + #end + + } + + inline public function setUInt16( position:Int, value:Int ) { + + #if cpp + untyped __global__.__hxcpp_memory_set_ui16(bytes, position + byteOffset, value); + #else + buffer.position = position + byteOffset; + buffer.writeShort(Std.int(value)); + #end + + } + + inline public function getInt32( position:Int ) : Int { + + #if cpp + untyped return __global__.__hxcpp_memory_get_i32(bytes, position + byteOffset); + #else + buffer.position = position + byteOffset; + return buffer.readInt(); + #end + + } + + inline public function setInt32( position:Int, value:Int ) { + + #if cpp + untyped __global__.__hxcpp_memory_set_i32(bytes, position + byteOffset, value); + #else + buffer.position = position + byteOffset; + buffer.writeInt(Std.int(value)); + #end + + } + + inline public function getUInt32( position:Int ) : Int { + + #if cpp + untyped return __global__.__hxcpp_memory_get_ui32(bytes, position + byteOffset); + #else + buffer.position = position + byteOffset; + return buffer.readUnsignedInt(); + #end + + } + + inline public function setUInt32( position:Int, value:Int ) { + + #if cpp + untyped __global__.__hxcpp_memory_set_ui32(bytes, position + byteOffset, value); + #else + buffer.position = position + byteOffset; + buffer.writeUnsignedInt(Std.int(value)); + #end + + } + + inline public function getFloat32( position:Int ) : Float { + + #if cpp + untyped return __global__.__hxcpp_memory_get_float(bytes, position + byteOffset); + #else + buffer.position = position + byteOffset; + return buffer.readFloat(); + #end + + } + + inline public function setFloat32( position:Int, value:Float ) { + + #if cpp + untyped __global__.__hxcpp_memory_set_float(bytes, position + byteOffset, value); + #else + buffer.position = position + byteOffset; + buffer.writeFloat(value); + #end + + } + +} - public function getByteBuffer() : ByteArray { - - return buffer; - - } - - public function getLength() : Int { - - return byteLength; - - } - - public function getStart() : Int { - - return byteOffset; - - } - - inline public function getInt8( position:Int ) : Int { - - #if cpp - return untyped __global__.__hxcpp_memory_get_byte(bytes, position + byteOffset); - #else - buffer.position = position + byteOffset; - return buffer.readByte(); - #end - - } - - inline public function setInt8( position:Int, value:Int ) { - - #if cpp - untyped __global__.__hxcpp_memory_set_byte(bytes, position + byteOffset, value); - #else - buffer.position = position + byteOffset; - buffer.writeByte(value); - #end - - } - - inline public function getUInt8( position:Int ) : Int { - - #if cpp - return untyped __global__.__hxcpp_memory_get_byte(bytes, position + byteOffset) & 0xff; - #else - buffer.position = position + byteOffset; - return buffer.readUnsignedByte(); - #end - - } - - inline public function setUInt8( position:Int, value:Int ) { - - #if cpp - untyped __global__.__hxcpp_memory_set_byte(bytes, position + byteOffset, value); - #else - buffer.position = position + byteOffset; - buffer.writeByte(value); - #end - - } - - inline public function getInt16( position:Int ) : Int { - - #if cpp - untyped return __global__.__hxcpp_memory_get_i16(bytes, position + byteOffset); - #else - buffer.position = position + byteOffset; - return buffer.readShort(); - #end - - } - - inline public function setInt16( position:Int, value:Int ) { - - #if cpp - untyped __global__.__hxcpp_memory_set_i16(bytes, position + byteOffset, value); - #else - buffer.position = position + byteOffset; - buffer.writeShort(Std.int(value)); - #end - - } - - inline public function getUInt16( position:Int ) : Int { - - #if cpp - untyped return __global__.__hxcpp_memory_get_ui16(bytes, position + byteOffset) & 0xffff; - #else - buffer.position = position + byteOffset; - return buffer.readUnsignedShort(); - #end - - } - - inline public function setUInt16( position:Int, value:Int ) { - - #if cpp - untyped __global__.__hxcpp_memory_set_ui16(bytes, position + byteOffset, value); - #else - buffer.position = position + byteOffset; - buffer.writeShort(Std.int(value)); - #end - - } - - inline public function getInt32( position:Int ) : Int { - - #if cpp - untyped return __global__.__hxcpp_memory_get_i32(bytes, position + byteOffset); - #else - buffer.position = position + byteOffset; - return buffer.readInt(); - #end - - } - - inline public function setInt32( position:Int, value:Int ) { - - #if cpp - untyped __global__.__hxcpp_memory_set_i32(bytes, position + byteOffset, value); - #else - buffer.position = position + byteOffset; - buffer.writeInt(Std.int(value)); - #end - - } - - inline public function getUInt32( position:Int ) : Int { - - #if cpp - untyped return __global__.__hxcpp_memory_get_ui32(bytes, position + byteOffset); - #else - buffer.position = position + byteOffset; - return buffer.readUnsignedInt(); - #end - - } - - inline public function setUInt32( position:Int, value:Int ) { - - #if cpp - untyped __global__.__hxcpp_memory_set_ui32(bytes, position + byteOffset, value); - #else - buffer.position = position + byteOffset; - buffer.writeUnsignedInt(Std.int(value)); - #end - - } - - inline public function getFloat32( position:Int ) : Float { - - #if cpp - untyped return __global__.__hxcpp_memory_get_float(bytes, position + byteOffset); - #else - buffer.position = position + byteOffset; - return buffer.readFloat(); - #end - - } - - inline public function setFloat32( position:Int, value:Float ) { - - #if cpp - untyped __global__.__hxcpp_memory_set_float(bytes, position + byteOffset, value); - #else - buffer.position = position + byteOffset; - buffer.writeFloat(value); - #end - - } - - } //ArrayBufferView -#end //lime_native +#end \ No newline at end of file diff --git a/lime/utils/Float32Array.hx b/lime/utils/Float32Array.hx index 56ef9a5ca..13ba0130c 100644 --- a/lime/utils/Float32Array.hx +++ b/lime/utils/Float32Array.hx @@ -1,119 +1,142 @@ package lime.utils; +#if js +typedef Float32Array = js.html.Float32Array; +#else -//import lime.utils.compat.Matrix3D; class Float32Array extends ArrayBufferView implements ArrayAccess { - - public var BYTES_PER_ELEMENT (default, null) : Int; - public var length (default, null) : Int; - - public function new( bufferOrArray:Dynamic, start:Int = 0, length:Null = null ) { - - BYTES_PER_ELEMENT = 4; + + + public var BYTES_PER_ELEMENT (default, null):Int; + public var length (default, null):Int; + + + public function new (bufferOrArray:Dynamic, start:Int = 0, length:Null = null) { + + BYTES_PER_ELEMENT = 4; + + if (Std.is (bufferOrArray, Int)) { + + super (Std.int (bufferOrArray) << 2); + + this.length = bufferOrArray; + + } else if (Std.is (bufferOrArray, Array)) { + + var floats:Array = bufferOrArray; + this.length = (length != null) ? length : floats.length - start; + + super (this.length << 2); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_float (bytes, (i << 2), floats[i + start]); + #else + buffer.writeFloat (floats[i + start]); + #end + + } + + } else if (Std.is (bufferOrArray, Float32Array)) { + + var floats:Float32Array = bufferOrArray; + this.length = (length != null) ? length : floats.length - start; + + super (this.length << 2); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_float (bytes, (i << 2), floats[i + start]); + #else + buffer.writeFloat (floats[i + start]); + #end + + } + + } else { + + super (bufferOrArray, start, (length != null) ? length << 2 : null); + + if ((byteLength & 0x03) > 0) { + + throw "Invalid array size"; + + } + + this.length = byteLength >> 2; + + if ((this.length << 2) != byteLength) { + + throw "Invalid length multiple"; + + } + + } + + } + + + public function set (bufferOrArray:Dynamic, offset:Int = 0) { + + if (Std.is (bufferOrArray, Array)) { + + var floats:Array = bufferOrArray; + + for (i in 0...floats.length) { + + setFloat32 ((i + offset) << 2, floats[i]); + + } + + } else if (Std.is (bufferOrArray, Float32Array)) { + + var floats:Float32Array = bufferOrArray; + + for (i in 0...floats.length) { + + setFloat32 ((i + offset) << 2, floats[i]); + + } + + } else { + + throw "Invalid input buffer"; + + } + + } + + + public function subarray (start:Int, end:Null = null):Float32Array { + + end = (end == null) ? length : end; + return new Float32Array (buffer, start << 2, end - start); + + } + + + /*public static function fromMatrix (matrix:Matrix3D):Float32Array { + + return new Float32Array (matrix.rawData); + + }*/ + + + @:noCompletion @:keep inline public function __get (index:Int):Float { return getFloat32 (index << 2); } + @:noCompletion @:keep inline public function __set (index:Int, value:Float) { setFloat32 (index << 2, value); } + + +} - if (Std.is(bufferOrArray, Int)) { - - super(Std.int(bufferOrArray) << 2); - this.length = bufferOrArray; - - } else if (Std.is(bufferOrArray, Array)) { - var floats:Array = bufferOrArray; - this.length = (length != null) ? length : floats.length - start; - super(this.length << 2); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_float(bytes, (i << 2), floats[i + start]); - #else - buffer.writeFloat(floats[i + start]); - #end - - } - - } else if (Std.is(bufferOrArray, Float32Array)) { - - var floats:Float32Array = bufferOrArray; - this.length = (length != null) ? length : floats.length - start; - super(this.length << 2); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_float(bytes, (i << 2), floats[i + start]); - #else - buffer.writeFloat(floats[i + start]); - #end - - } - - } else { - - super(bufferOrArray, start, (length != null) ? length << 2 : null); - - if ((byteLength & 0x03) > 0) { - throw "Invalid array size"; - } - - this.length = byteLength >> 2; - - if ((this.length << 2) != byteLength) { - throw "Invalid length multiple"; - } - - } - - } //new - - public function set( bufferOrArray:Dynamic, offset:Int = 0 ) { - - if (Std.is(bufferOrArray, Array)) { - - var floats:Array = bufferOrArray; - - for (i in 0...floats.length) { - setFloat32((i + offset) << 2, floats[i]); - } - - } else if (Std.is(bufferOrArray, Float32Array)) { - - var floats:Float32Array = bufferOrArray; - - for (i in 0...floats.length) { - setFloat32((i + offset) << 2, floats[i]); - } - - } else { - - throw "Invalid input buffer"; - - } - - } //set - - public function subarray( start:Int, end:Null = null ) : Float32Array { - - end = (end == null) ? length : end; - return new Float32Array(buffer, start << 2, end - start); - - } //subarray - - /*public static function fromMatrix( matrix:Matrix3D ) : Float32Array { - - return new Float32Array(matrix.rawData); - - } //fromMatrix*/ - - @:noCompletion @:keep inline public function __get( index:Int ):Float { return getFloat32(index << 2); } - @:noCompletion @:keep inline public function __set( index:Int, value:Float ) { setFloat32(index << 2, value); } - -} //Float32Array +#end \ No newline at end of file diff --git a/lime/utils/Int16Array.hx b/lime/utils/Int16Array.hx index b37f8356b..96e2e3ca4 100644 --- a/lime/utils/Int16Array.hx +++ b/lime/utils/Int16Array.hx @@ -1,112 +1,135 @@ package lime.utils; +#if js +typedef Int16Array = js.html.Int16Array; +#else class Int16Array extends ArrayBufferView implements ArrayAccess { - - public var BYTES_PER_ELEMENT (default, null) : Int; - public var length (default, null) : Int; - - public function new( bufferOrArray:Dynamic, start:Int = 0, length:Null = null ) { - - BYTES_PER_ELEMENT = 2; - - if (Std.is(bufferOrArray, Int)) { - - super(Std.int(bufferOrArray) << 1); - this.length = bufferOrArray; - - } else if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length << 1); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_i16(bytes, (i << 1), ints[i + start]); - #else - buffer.writeShort(ints[i + start]); - #end - - } - - } else if (Std.is(bufferOrArray, Int16Array)) { - - var ints:Int16Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length << 1); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_i16(bytes, (i << 1), ints[i + start]); - #else - buffer.writeShort(ints[i + start]); - #end - - } - - } else { - - super(bufferOrArray, start, (length != null) ? length << 1 : null); - - if ((byteLength & 0x01) > 0) { - throw "Invalid array size"; - } - - this.length = byteLength >> 1; - - if ((this.length << 1) != byteLength) { - throw "Invalid length multiple"; - } - - } - - } + + + public var BYTES_PER_ELEMENT (default, null) : Int; + public var length (default, null) : Int; + + + public function new (bufferOrArray:Dynamic, start:Int = 0, length:Null = null) { + + BYTES_PER_ELEMENT = 2; + + if (Std.is (bufferOrArray, Int)) { + + super (Std.int (bufferOrArray) << 1); + + this.length = bufferOrArray; + + } else if (Std.is (bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length << 1); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_i16 (bytes, (i << 1), ints[i + start]); + #else + buffer.writeShort (ints[i + start]); + #end + + } + + } else if (Std.is (bufferOrArray, Int16Array)) { + + var ints:Int16Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length << 1); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_i16 (bytes, (i << 1), ints[i + start]); + #else + buffer.writeShort (ints[i + start]); + #end + + } + + } else { + + super (bufferOrArray, start, (length != null) ? length << 1 : null); + + if ((byteLength & 0x01) > 0) { + + throw "Invalid array size"; + + } + + this.length = byteLength >> 1; + + if ((this.length << 1) != byteLength) { + + throw "Invalid length multiple"; + + } + + } + + } + + + public function set (bufferOrArray:Dynamic, offset:Int = 0) { + + if (Std.is (bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + + for (i in 0...ints.length) { + + setInt16 ((i + offset) << 1, ints[i]); + + } + + } else if (Std.is (bufferOrArray, Int16Array)) { + + var ints:Int16Array = bufferOrArray; + + for (i in 0...ints.length) { + + setInt16 ((i + offset) << 1, ints[i]); + + } + + } else { + + throw "Invalid input buffer"; + + } + + } + + + public function subarray (start:Int, end:Null = null):Int16Array { + + end = (end == null) ? length : end; + return new Int16Array (buffer, start << 1, end - start); + + } + + + @:noCompletion @:keep inline public function __get (index:Int):Int { return getInt16 (index << 1); } + @:noCompletion @:keep inline public function __set (index:Int, value:Int) { setInt16 (index << 1, value); } + + +} - public function set( bufferOrArray:Dynamic, offset:Int = 0 ) { - if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - - for (i in 0...ints.length) { - setInt16((i + offset) << 1, ints[i]); - } - - } else if (Std.is(bufferOrArray, Int16Array)) { - - var ints:Int16Array = bufferOrArray; - - for (i in 0...ints.length) { - setInt16((i + offset) << 1, ints[i]); - } - - } else { - - throw "Invalid input buffer"; - - } - - } - - public function subarray( start:Int, end:Null = null ) : Int16Array { - - end = (end == null) ? length : end; - return new Int16Array(buffer, start << 1, end - start); - - } - - @:noCompletion @:keep inline public function __get( index:Int ):Int { return getInt16(index << 1); } - @:noCompletion @:keep inline public function __set( index:Int, value:Int ) { setInt16(index << 1, value); } - -} //Int16Array +#end \ No newline at end of file diff --git a/lime/utils/Int32Array.hx b/lime/utils/Int32Array.hx index 81ec3b6e6..b5e95a77a 100644 --- a/lime/utils/Int32Array.hx +++ b/lime/utils/Int32Array.hx @@ -1,115 +1,135 @@ package lime.utils; - +#if js +typedef Int32Array = js.html.Int32Array; +#else class Int32Array extends ArrayBufferView implements ArrayAccess { - - - public var BYTES_PER_ELEMENT (default, null) : Int; - public var length (default, null) : Int; - - - public function new( bufferOrArray:Dynamic, start:Int = 0, length:Null = null ) { - - BYTES_PER_ELEMENT = 4; - - if (Std.is(bufferOrArray, Int)) { - - super(Std.int(bufferOrArray) << 2); - this.length = bufferOrArray; - - } else if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length << 2); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_i32(bytes, (i << 2), ints[i + start]); - #else - buffer.writeInt(ints[i + start]); - #end - - } - - } else if (Std.is(bufferOrArray, Int32Array)) { - - var ints:Int32Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length << 2); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_i32(bytes, (i << 2), ints[i + start]); - #else - buffer.writeInt(ints[i + start]); - #end - - } - - } else { - - super(bufferOrArray, start, (length != null) ? length << 2 : null); - - if ((byteLength & 0x03) > 0) { - throw "Invalid array size"; - } - - this.length = byteLength >> 2; - - if ((this.length << 2) != byteLength) { - throw "Invalid length multiple"; - } - - } - - } //new + + + public var BYTES_PER_ELEMENT (default, null) : Int; + public var length (default, null) : Int; + + + public function new (bufferOrArray:Dynamic, start:Int = 0, length:Null = null) { + + BYTES_PER_ELEMENT = 4; + + if (Std.is (bufferOrArray, Int)) { + + super (Std.int (bufferOrArray) << 2); + + this.length = bufferOrArray; + + } else if (Std.is (bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length << 2); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_i32 (bytes, (i << 2), ints[i + start]); + #else + buffer.writeInt (ints[i + start]); + #end + + } + + } else if (Std.is (bufferOrArray, Int32Array)) { + + var ints:Int32Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length << 2); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_i32(bytes, (i << 2), ints[i + start]); + #else + buffer.writeInt(ints[i + start]); + #end + + } + + } else { + + super (bufferOrArray, start, (length != null) ? length << 2 : null); + + if ((byteLength & 0x03) > 0) { + + throw "Invalid array size"; + + } + + this.length = byteLength >> 2; + + if ((this.length << 2) != byteLength) { + + throw "Invalid length multiple"; + + } + + } + + } + + + public function set (bufferOrArray:Dynamic, offset:Int = 0) { + + if (Std.is (bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + + for (i in 0...ints.length) { + + setInt32 ((i + offset) << 2, ints[i]); + + } + + } else if (Std.is (bufferOrArray, Int32Array)) { + + var ints:Int32Array = bufferOrArray; + + for (i in 0...ints.length) { + + setInt32 ((i + offset) << 2, ints[i]); + + } + + } else { + + throw "Invalid input buffer"; + + } + + } + + + public function subarray (start:Int, end:Null = null):Int32Array { + + end = (end == null) ? length : end; + return new Int32Array (buffer, start << 2, end - start); + + } + + + @:noCompletion @:keep inline public function __get (index:Int):Int { return getInt32 (index << 2); } + @:noCompletion @:keep inline public function __set (index:Int, value:Int) { setInt32 (index << 2, value); } + + +} - public function set( bufferOrArray:Dynamic, offset:Int = 0 ) { - if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - - for (i in 0...ints.length) { - setInt32((i + offset) << 2, ints[i]); - } - - } else if (Std.is(bufferOrArray, Int32Array)) { - - var ints:Int32Array = bufferOrArray; - - for (i in 0...ints.length) { - setInt32((i + offset) << 2, ints[i]); - } - - } else { - - throw "Invalid input buffer"; - - } - - } //set - - public function subarray( start:Int, end:Null = null ) : Int32Array { - - end = (end == null) ? length : end; - return new Int32Array(buffer, start << 2, end - start); - - } //subarray - - @:noCompletion @:keep inline public function __get( index:Int ):Int { return getInt32(index << 2); } - @:noCompletion @:keep inline public function __set( index:Int, value:Int ) { setInt32(index << 2, value); } - -} //Int32Array +#end \ No newline at end of file diff --git a/lime/utils/Int8Array.hx b/lime/utils/Int8Array.hx index 1db84e210..d3ac74807 100644 --- a/lime/utils/Int8Array.hx +++ b/lime/utils/Int8Array.hx @@ -1,106 +1,122 @@ package lime.utils; - +#if js +typedef Int8Array = js.html.Int8Array; +#else class Int8Array extends ArrayBufferView implements ArrayAccess { - + + + public var BYTES_PER_ELEMENT (default, null) : Int; + public var length (default, null) : Int; + + + public function new (bufferOrArray:Dynamic, start:Int = 0, length:Null = null) { + + BYTES_PER_ELEMENT = 1; + + if (Std.is (bufferOrArray, Int)) { + + super (Std.int (bufferOrArray)); + + this.length = bufferOrArray; + + } else if (Std.is (bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_byte (bytes, i, ints[i + start]); + #else + buffer.writeByte (ints[i + start]); + #end + + } + + } else if (Std.is (bufferOrArray, Int8Array)) { + + var ints:Int8Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_byte (bytes, i, ints[i + start]); + #else + buffer.writeByte (ints[i + start]); + #end + + } + + } else { + + super (bufferOrArray, start, length); + this.length = byteLength; + + } + + } + + + public function set (bufferOrArray:Dynamic, offset:Int = 0) { + + if (Std.is(bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + + for (i in 0...ints.length) { + + setInt8 (i + offset, ints[i]); + + } + + } else if (Std.is (bufferOrArray, Int8Array)) { + + var ints:Int8Array = bufferOrArray; + + for (i in 0...ints.length) { + + setInt8 (i + offset, ints[i]); + + } + + } else { + + throw "Invalid input buffer"; + + } + + } + + + public function subarray (start:Int, end:Null = null):Int8Array { + + end = (end == null) ? length : end; + return new Int8Array (buffer, start, end - start); + + } + + + @:noCompletion @:keep inline public function __get (index:Int):Int { return getInt8 (index); } + @:noCompletion @:keep inline public function __set (index:Int, value:Int) { setInt8 (index, value); } + + +} - public var BYTES_PER_ELEMENT (default, null) : Int; - public var length (default, null) : Int; - - public function new( bufferOrArray:Dynamic, start:Int = 0, length:Null = null ) { - - BYTES_PER_ELEMENT = 1; - - if (Std.is(bufferOrArray, Int)) { - - super(Std.int(bufferOrArray)); - this.length = bufferOrArray; - - } else if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_byte(bytes, i, ints[i + start]); - #else - buffer.writeByte(ints[i + start]); - #end - - } - - } else if (Std.is(bufferOrArray, Int8Array)) { - - var ints:Int8Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_byte(bytes, i, ints[i + start]); - #else - buffer.writeByte(ints[i + start]); - #end - - } - - } else { - - super(bufferOrArray, start, length); - this.length = byteLength; - - } - - } //new - - public function set( bufferOrArray:Dynamic, offset:Int = 0 ) { - - if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - - for (i in 0...ints.length) { - setInt8(i + offset, ints[i]); - } - - } else if (Std.is(bufferOrArray, Int8Array)) { - - var ints:Int8Array = bufferOrArray; - - for (i in 0...ints.length) { - setInt8(i + offset, ints[i]); - } - - } else { - - throw "Invalid input buffer"; - - } - - } //set - - public function subarray( start:Int, end:Null = null ) : Int8Array { - - end = (end == null) ? length : end; - return new Int8Array(buffer, start, end - start); - - } //subarray - - @:noCompletion @:keep inline public function __get( index:Int ):Int { return getInt8(index); } - @:noCompletion @:keep inline public function __set( index:Int, value:Int ) { setInt8(index, value); } - -} //Int8Array +#end \ No newline at end of file diff --git a/lime/utils/UInt16Array.hx b/lime/utils/UInt16Array.hx index 5fa4feaae..4697c23e6 100644 --- a/lime/utils/UInt16Array.hx +++ b/lime/utils/UInt16Array.hx @@ -1,115 +1,135 @@ package lime.utils; - +#if js +typedef UInt16Array = js.html.UInt16Array; +#else class UInt16Array extends ArrayBufferView implements ArrayAccess { - + + + public var BYTES_PER_ELEMENT (default, null) : Int; + public var length (default, null) : Int; + + + public function new (bufferOrArray:Dynamic, start:Int = 0, length:Null = null) { + + BYTES_PER_ELEMENT = 2; + + if (Std.is (bufferOrArray, Int)) { + + super (Std.int (bufferOrArray) << 1); + + this.length = bufferOrArray; + + } else if (Std.is (bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length << 1); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_ui16 (bytes, (i << 1), ints[i + start]); + #else + buffer.writeShort (ints[i + start]); + #end + + } + + } else if (Std.is (bufferOrArray, UInt16Array)) { + + var ints:UInt16Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length << 1); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_i16 (bytes, (i << 1), ints[i + start]); + #else + buffer.writeShort (ints[i + start]); + #end + + } + + } else { + + super (bufferOrArray, start, (length != null) ? length << 1 : null); + + if ((byteLength & 0x01) > 0) { + + throw "Invalid array size"; + + } + + this.length = byteLength >> 1; + + if ((this.length << 1) != byteLength) { + + throw "Invalid length multiple"; + + } + + } + + } + + + public function set (bufferOrArray:Dynamic, offset:Int = 0) { + + if (Std.is (bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + + for (i in 0...ints.length) { + + setUInt16 ((i + offset) << 1, ints[i]); + + } + + } else if (Std.is (bufferOrArray, UInt16Array)) { - public var BYTES_PER_ELEMENT (default, null) : Int; - public var length (default, null) : Int; - + var ints:UInt16Array = bufferOrArray; - public function new( bufferOrArray:Dynamic, start:Int = 0, length:Null = null ) { - - BYTES_PER_ELEMENT = 2; - - if (Std.is(bufferOrArray, Int)) { - - super(Std.int(bufferOrArray) << 1); - this.length = bufferOrArray; - - } else if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length << 1); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_ui16(bytes, (i << 1), ints[i + start]); - #else - buffer.writeShort(ints[i + start]); - #end - - } - - } else if (Std.is(bufferOrArray, UInt16Array)) { - - var ints:UInt16Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length << 1); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_i16(bytes, (i << 1), ints[i + start]); - #else - buffer.writeShort(ints[i + start]); - #end - - } - - } else { - - super(bufferOrArray, start, (length != null) ? length << 1 : null); - - if ((byteLength & 0x01) > 0) { - throw "Invalid array size"; - } - - this.length = byteLength >> 1; - - if ((this.length << 1) != byteLength) { - throw "Invalid length multiple"; - } + for (i in 0...ints.length) { + + setUInt16 ((i + offset) << 1, ints[i]); + + } + + } else { + + throw "Invalid input buffer"; + + } + + } + + + public function subarray (start:Int, end:Null = null):UInt16Array { + + end = (end == null) ? length : end; + return new UInt16Array (buffer, start << 1, end - start); + + } + + + @:noCompletion @:keep inline public function __get (index:Int):Int { return getUInt16 (index << 1); } + @:noCompletion @:keep inline public function __set (index:Int, value:Int) { setUInt16 (index << 1, value); } + + +} - } - } //new - - public function set( bufferOrArray:Dynamic, offset:Int = 0 ) { - - if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - - for (i in 0...ints.length) { - setUInt16((i + offset) << 1, ints[i]); - } - - } else if (Std.is(bufferOrArray, UInt16Array)) { - - var ints:UInt16Array = bufferOrArray; - - for (i in 0...ints.length) { - setUInt16((i + offset) << 1, ints[i]); - } - - } else { - - throw "Invalid input buffer"; - - } - - } //set - - public function subarray( start:Int, end:Null = null ) : UInt16Array { - - end = (end == null) ? length : end; - return new UInt16Array(buffer, start << 1, end - start); - - } //subarray - - @:noCompletion @:keep inline public function __get( index:Int ):Int { return getUInt16(index << 1); } - @:noCompletion @:keep inline public function __set( index:Int, value:Int ) { setUInt16(index << 1, value); } - -} //UInt16Array +#end \ No newline at end of file diff --git a/lime/utils/UInt32Array.hx b/lime/utils/UInt32Array.hx index c0a9a61ec..762b56286 100644 --- a/lime/utils/UInt32Array.hx +++ b/lime/utils/UInt32Array.hx @@ -1,114 +1,135 @@ package lime.utils; +#if js +typedef UInt32Array = js.html.UInt32Array; +#else class UInt32Array extends ArrayBufferView implements ArrayAccess { - + + + public var BYTES_PER_ELEMENT (default, null) : Int; + public var length (default, null) : Int; + + + public function new (bufferOrArray:Dynamic, start:Int = 0, length:Null = null) { + + BYTES_PER_ELEMENT = 4; + + if (Std.is (bufferOrArray, Int)) { + + super (Std.int (bufferOrArray) << 2); + + this.length = bufferOrArray; + + } else if (Std.is (bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length << 2); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_ui32 (bytes, (i << 2), ints[i + start]); + #else + buffer.writeInt (ints[i + start]); + #end + + } + + } else if (Std.is (bufferOrArray, UInt32Array)) { + + var ints:UInt32Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length << 2); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_ui32 (bytes, (i << 2), ints[i + start]); + #else + buffer.writeInt (ints[i + start]); + #end + + } + + } else { + + super (bufferOrArray, start, (length != null) ? length << 2 : null); + + if ((byteLength & 0x03) > 0) { + + throw "Invalid array size"; + + } + + this.length = byteLength >> 2; + + if ((this.length << 2) != byteLength) { + + throw "Invalid length multiple"; + + } + + } + + } + + + public function set (bufferOrArray:Dynamic, offset:Int = 0) { + + if (Std.is (bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + + for (i in 0...ints.length) { + + setUInt32 ((i + offset) << 2, ints[i]); + + } + + } else if (Std.is (bufferOrArray, UInt32Array)) { + + var ints:UInt32Array = bufferOrArray; + + for (i in 0...ints.length) { + + setUInt32 ((i + offset) << 2, ints[i]); + + } + + } else { + + throw "Invalid input buffer"; + + } + + } + + + public function subarray (start:Int, end:Null = null):UInt32Array { + + end = (end == null) ? length : end; + return new UInt32Array (buffer, start << 2, end - start); + + } + + + @:noCompletion @:keep inline public function __get (index:Int):Int { return getUInt32 (index << 2); } + @:noCompletion @:keep inline public function __set (index:Int, value:Int) { setUInt32 (index << 2, value); } + + +} - public var BYTES_PER_ELEMENT (default, null) : Int; - public var length (default, null) : Int; - - public function new( bufferOrArray:Dynamic, start:Int = 0, length:Null = null ) { - - BYTES_PER_ELEMENT = 4; - - if (Std.is(bufferOrArray, Int)) { - - super(Std.int(bufferOrArray) << 2); - this.length = bufferOrArray; - - } else if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length << 2); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_ui32(bytes, (i << 2), ints[i + start]); - #else - buffer.writeInt(ints[i + start]); - #end - - } - - } else if (Std.is(bufferOrArray, UInt32Array)) { - - var ints:UInt32Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length << 2); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_ui32(bytes, (i << 2), ints[i + start]); - #else - buffer.writeInt(ints[i + start]); - #end - - } - - } else { - - super(bufferOrArray, start, (length != null) ? length << 2 : null); - - if ((byteLength & 0x03) > 0) { - throw "Invalid array size"; - } - - this.length = byteLength >> 2; - - if ((this.length << 2) != byteLength) { - throw "Invalid length multiple"; - } - - } - - } //new - - public function set( bufferOrArray:Dynamic, offset:Int = 0 ) { - - if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - - for (i in 0...ints.length) { - setUInt32((i + offset) << 2, ints[i]); - } - - } else if (Std.is(bufferOrArray, UInt32Array)) { - - var ints:UInt32Array = bufferOrArray; - - for (i in 0...ints.length) { - setUInt32((i + offset) << 2, ints[i]); - } - - } else { - - throw "Invalid input buffer"; - - } - - } //set - - public function subarray( start:Int, end:Null = null ) : UInt32Array { - - end = (end == null) ? length : end; - return new UInt32Array(buffer, start << 2, end - start); - - } //subarray - - @:noCompletion @:keep inline public function __get( index:Int ):Int { return getUInt32(index << 2); } - @:noCompletion @:keep inline public function __set( index:Int, value:Int ) { setUInt32(index << 2, value); } - -} //UInt32Array +#end \ No newline at end of file diff --git a/lime/utils/UInt8Array.hx b/lime/utils/UInt8Array.hx index dd004ab36..b71c7fe49 100644 --- a/lime/utils/UInt8Array.hx +++ b/lime/utils/UInt8Array.hx @@ -1,106 +1,123 @@ package lime.utils; - +#if js +typedef UInt8Array = js.html.UInt8Array; +#else class UInt8Array extends ArrayBufferView implements ArrayAccess { - - - public var BYTES_PER_ELEMENT (default, null) : Int; - public var length (default, null) : Int; - - - public function new( bufferOrArray:Dynamic, start:Int = 0, length:Null = null ) { - - BYTES_PER_ELEMENT = 1; - - if (Std.is(bufferOrArray, Int)) { - - super(Std.int(bufferOrArray)); - this.length = bufferOrArray; - - } else if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_byte(bytes, i, ints[i + start]); - #else - buffer.writeByte(ints[i + start]); - #end - - } - - } else if (Std.is(bufferOrArray, UInt8Array)) { + + + public var BYTES_PER_ELEMENT (default, null) : Int; + public var length (default, null) : Int; + + + public function new (bufferOrArray:Dynamic, start:Int = 0, length:Null = null) { + + BYTES_PER_ELEMENT = 1; + + if (Std.is (bufferOrArray, Int)) { + + super (Std.int (bufferOrArray)); + + this.length = bufferOrArray; + + } else if (Std.is (bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_byte (bytes, i, ints[i + start]); + #else + buffer.writeByte (ints[i + start]); + #end + + } + + } else if (Std.is (bufferOrArray, UInt8Array)) { + + var ints:UInt8Array = bufferOrArray; + this.length = (length != null) ? length : ints.length - start; + + super (this.length); + + #if !cpp + buffer.position = 0; + #end + + for (i in 0...this.length) { + + #if cpp + untyped __global__.__hxcpp_memory_set_byte (bytes, i, ints[i + start]); + #else + buffer.writeByte (ints[i + start]); + #end + + } + + } else { + + super (bufferOrArray, start, length); + + this.length = byteLength; + + } + + } + + + public function set (bufferOrArray:Dynamic, offset:Int = 0) { + + if (Std.is (bufferOrArray, Array)) { + + var ints:Array = bufferOrArray; + + for (i in 0...ints.length) { + + setUInt8 (i + offset, ints[i]); + + } + + } else if (Std.is (bufferOrArray, UInt8Array)) { + + var ints:UInt8Array = bufferOrArray; + + for (i in 0...ints.length) { + + setUInt8 (i + offset, ints[i]); + + } + + } else { + + throw "Invalid input buffer"; + + } + + } + + + public function subarray (start:Int, end:Null = null):UInt8Array { + + end = (end == null) ? length : end; + return new UInt8Array (buffer, start, end - start); + + } + + + @:noCompletion @:keep inline public function __get (index:Int):Int { return getUInt8 (index); } + @:noCompletion @:keep inline public function __set (index:Int, value:Int) { setUInt8 (index, value); } + + +} - var ints:UInt8Array = bufferOrArray; - this.length = (length != null) ? length : ints.length - start; - super(this.length); - - #if !cpp - buffer.position = 0; - #end - - for (i in 0...this.length) { - - #if cpp - untyped __global__.__hxcpp_memory_set_byte(bytes, i, ints[i + start]); - #else - buffer.writeByte(ints[i + start]); - #end - - } - } else { - - super(bufferOrArray, start, length); - this.length = byteLength; - - } - - } //new - - public function set( bufferOrArray:Dynamic, offset:Int = 0 ) { - - if (Std.is(bufferOrArray, Array)) { - - var ints:Array = bufferOrArray; - - for (i in 0...ints.length) { - setUInt8(i + offset, ints[i]); - } - - } else if (Std.is(bufferOrArray, UInt8Array)) { - - var ints:UInt8Array = bufferOrArray; - - for (i in 0...ints.length) { - setUInt8(i + offset, ints[i]); - } - - } else { - - throw "Invalid input buffer"; - - } - - } //set - - public function subarray( start:Int, end:Null = null ) : UInt8Array { - - end = (end == null) ? length : end; - return new UInt8Array(buffer, start, end - start); - - } //subarray - - @:noCompletion @:keep inline public function __get( index:Int ):Int { return getUInt8(index); } - @:noCompletion @:keep inline public function __set( index:Int, value:Int ) { setUInt8(index, value); } - -} //UInt8Array +#end \ No newline at end of file diff --git a/templates/html5/haxe/ApplicationMain.hx b/templates/html5/haxe/ApplicationMain.hx old mode 100755 new mode 100644 index 7088df2b8..9a78e2ae5 --- a/templates/html5/haxe/ApplicationMain.hx +++ b/templates/html5/haxe/ApplicationMain.hx @@ -1,39 +1,119 @@ -#if lime_html5 - - import ::APP_MAIN_PACKAGE::::APP_MAIN_CLASS::; - import lime.Lime; - - class ApplicationMain { - - public static function main () { - - //Create the game class, give it the runtime - var _main_ = Type.createInstance (::APP_MAIN::, []); - //Create an instance of lime - var _lime = new Lime(); - - //Create the config from the project.nmml info - var config : LimeConfig = { - host : _main_, - fullscreen : ::WIN_FULLSCREEN::, - resizable : ::WIN_RESIZABLE::, - borderless : ::WIN_BORDERLESS::, - antialiasing : Std.int(::WIN_ANTIALIASING::), - stencil_buffer : ::WIN_STENCIL_BUFFER::, - depth_buffer : ::WIN_DEPTH_BUFFER::, - vsync : ::WIN_VSYNC::, - fps : Std.int(::WIN_FPS::), - width : Std.int(::WIN_WIDTH::), - height : Std.int(::WIN_HEIGHT::), - orientation : "::WIN_ORIENTATION::", - title : "::APP_TITLE::", - }; - - //Start up - _lime.init( _main_, config ); - - } //main - } //ApplicationMain +import ::APP_MAIN::; -#end //lime_html5 +class ApplicationMain { + + + private var app:lime.app.Application; + + + @:keep @:expose("lime.embed") + public static function embed (elementName:String, width:Null = null, height:Null = null, background:String = null) { + + var element:js.html.HtmlElement = null; + + if (elementName != null) { + + element = cast js.Browser.document.getElementById (elementName); + + } + + var color = null; + + if (background != null) { + + background = StringTools.replace (background, "#", ""); + + if (background.indexOf ("0x") > -1) { + + color = Std.parseInt (background); + + } else { + + color = Std.parseInt ("0x" + background); + + } + + } + + if (width == null) { + + width = 0; + + } + + if (height == null) { + + height = 0; + + } + + untyped __js__ (" + var lastTime = 0; + var vendors = ['ms', 'moz', 'webkit', 'o']; + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] + || window[vendors[x]+'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function() { callback(currTime + timeToCall); }, + timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + if (!window.cancelAnimationFrame) + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; + + window.requestAnimFrame = window.requestAnimationFrame; + "); + + var app = new ::APP_MAIN:: (); + + var config:lime.app.Config = { + + antialiasing: Std.int (::WIN_ANTIALIASING::), + background: color, + borderless: ::WIN_BORDERLESS::, + depthBuffer: ::WIN_DEPTH_BUFFER::, + element: element, + fps: Std.int (::WIN_FPS::), + fullscreen: ::WIN_FULLSCREEN::, + height: height, + orientation: "::WIN_ORIENTATION::", + resizable: ::WIN_RESIZABLE::, + stencilBuffer: ::WIN_STENCIL_BUFFER::, + title: "::APP_TITLE::", + vsync: ::WIN_VSYNC::, + width: width, + + } + + app.create (config); + + var result = app.exec (); + + //#if sys + //Sys.exit (result); + //#end + + } + + + public static function main () { + + #if munit + embed (null, ::WIN_WIDTH::, ::WIN_HEIGHT::, "::WIN_FLASHBACKGROUND::"); + #end + + } + + +} \ No newline at end of file diff --git a/templates/html5/haxe/NMEPreloader.hx b/templates/html5/haxe/NMEPreloader.hx deleted file mode 100644 index e1bab587f..000000000 --- a/templates/html5/haxe/NMEPreloader.hx +++ /dev/null @@ -1,113 +0,0 @@ -// import flash.display.Sprite; -// import flash.events.Event; - - -class NMEPreloader // extends Sprite -{ - // private var outline:Sprite; - // private var progress:Sprite; - - public function new() - { - // super(); - - // var backgroundColor = getBackgroundColor (); - // var r = backgroundColor >> 16 & 0xFF; - // var g = backgroundColor >> 8 & 0xFF; - // var b = backgroundColor & 0xFF; - // var perceivedLuminosity = (0.299 * r + 0.587 * g + 0.114 * b); - // var color = 0x000000; - - // if (perceivedLuminosity < 70) { - - // color = 0xFFFFFF; - - // } - - // var x = 30; - // var height = 9; - // var y = getHeight () / 2 - height / 2; - // var width = getWidth () - x * 2; - - // var padding = 3; - - // outline = new Sprite (); - // outline.graphics.lineStyle (1, color, 0.15, true); - // outline.graphics.drawRoundRect (0, 0, width, height, padding * 2, padding * 2); - // outline.x = x; - // outline.y = y; - // addChild (outline); - - // progress = new Sprite (); - // progress.graphics.beginFill (color, 0.35); - // progress.graphics.drawRect (0, 0, width - padding * 2, height - padding * 2); - // progress.x = x + padding; - // progress.y = y + padding; - // progress.scaleX = 0; - // addChild (progress); - } - - - public function getBackgroundColor():Int - { - return ::WIN_BACKGROUND::; - } - - - public function getHeight():Float - { - var height = ::WIN_HEIGHT::; - - if (height > 0) { - - return height; - - } else { - - return 640;// flash.Lib.current.stage.stageHeight; - - } - } - - - public function getWidth():Float - { - var width = ::WIN_WIDTH::; - - if (width > 0) { - - return width; - - } else { - - return 960;// todo flash.Lib.current.stage.stageWidth; - - } - } - - - public function onInit() - { - - } - - - public function onLoaded() { - // dispatchEvent (new Event (Event.COMPLETE)); - } - - - public function onUpdate(bytesLoaded:Int, bytesTotal:Int) { - - var percentLoaded = bytesLoaded / bytesTotal; - - if (percentLoaded > 1) - { - percentLoaded == 1; - } - - progress.scaleX = percentLoaded; - } - - -} \ No newline at end of file diff --git a/templates/html5/haxe/lime/AssetData.hx b/templates/html5/haxe/lime/AssetData.hx deleted file mode 100644 index 3f88c8e81..000000000 --- a/templates/html5/haxe/lime/AssetData.hx +++ /dev/null @@ -1,36 +0,0 @@ -package lime; - - -import lime.utils.Assets; - - -class AssetData { - - private static var initialized:Bool = false; - - public static var className = new Map (); - public static var library = new Map (); - public static var path = new Map (); - public static var type = new Map (); - - public static function initialize():Void { - - if (!initialized) { - - ::if (assets != null)::::foreach assets::::if (type == "font")::className.set ("::id::", nme.lime_::flatName::);::else::path.set ("::id::", "::resourceName::");::end:: - type.set ("::id::", Reflect.field (AssetType, "::type::".toUpperCase ())); - ::end::::end:: - ::if (libraries != null)::::foreach libraries::library.set ("::name::", Reflect.field (LibraryType, "::type::".toUpperCase ())); - ::end::::end:: - initialized = true; - - } //initialized - - } //initialize - - -} //AssetData - - -::foreach assets::::if (type == "font")::class lime_::flatName:: extends flash.text.Font { }::end:: -::end:: \ No newline at end of file diff --git a/templates/html5/hxml/debug.hxml b/templates/html5/hxml/debug.hxml index 75decfb4f..122945e1f 100755 --- a/templates/html5/hxml/debug.hxml +++ b/templates/html5/hxml/debug.hxml @@ -3,5 +3,4 @@ -cp ::OUTPUT_DIR::/haxe -D html5 -D html ---remap flash:lime -debug \ No newline at end of file diff --git a/templates/html5/hxml/final.hxml b/templates/html5/hxml/final.hxml index f1006e814..26efad104 100644 --- a/templates/html5/hxml/final.hxml +++ b/templates/html5/hxml/final.hxml @@ -3,5 +3,4 @@ -cp ::OUTPUT_DIR::/haxe -D html5 -D html ---remap flash:lime -D final \ No newline at end of file diff --git a/templates/html5/hxml/release.hxml b/templates/html5/hxml/release.hxml index eadc13f32..35c7cec78 100755 --- a/templates/html5/hxml/release.hxml +++ b/templates/html5/hxml/release.hxml @@ -2,5 +2,4 @@ -js ::OUTPUT_FILE:: -cp ::OUTPUT_DIR::/haxe -D html5 --D html ---remap flash:lime \ No newline at end of file +-D html \ No newline at end of file diff --git a/templates/html5/template/index.html b/templates/html5/template/index.html index 688d016c5..4a6dcfeb4 100755 --- a/templates/html5/template/index.html +++ b/templates/html5/template/index.html @@ -1,38 +1,53 @@ - - - - - - - ::APP_TITLE:: - - - - - - - - - - - ::if linkedLibraries::::foreach (linkedLibraries):: - ::end::::end:: - - - - - - - + + + + + + + + ::APP_TITLE:: + + + + + ::if linkedLibraries::::foreach (linkedLibraries):: + ::end::::end:: + + + + + + + + + ::foreach assets::::if (type == "font"):: + ::end::::end:: + +
+ + + + + \ No newline at end of file diff --git a/templates/html5/template/lib/modernizr.js b/templates/html5/template/lib/modernizr.js deleted file mode 100644 index f645852f1..000000000 --- a/templates/html5/template/lib/modernizr.js +++ /dev/null @@ -1,4 +0,0 @@ -/* Modernizr 2.7.1 (Custom Build) | MIT & BSD - * Build: http://modernizr.com/download/#-audio-video-localstorage-sessionstorage-websockets-webworkers-geolocation-touch-webgl-shiv-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-gamepad-load - */ -;window.Modernizr=function(a,b,c){function z(a){i.cssText=a}function A(a,b){return z(l.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a){var e=a[d];if(!C(e,"-")&&i[e]!==c)return b=="pfx"?e:!0}return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+n.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+o.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.7.1",e={},f=b.documentElement,g="modernizr",h=b.createElement(g),i=h.style,j,k={}.toString,l=" -webkit- -moz- -o- -ms- ".split(" "),m="Webkit Moz O ms",n=m.split(" "),o=m.toLowerCase().split(" "),p={},q={},r={},s=[],t=s.slice,u,v=function(a,c,d,e){var h,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:g+(d+1),l.appendChild(j);return h=["­",'"].join(""),l.id=g,(m?l:n).innerHTML+=h,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=f.style.overflow,f.style.overflow="hidden",f.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),f.style.overflow=k),!!i},w=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=B(e[d],"function"),B(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=t.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(t.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(t.call(arguments)))};return e}),p.webgl=function(){return!!a.WebGLRenderingContext},p.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:v(["@media (",l.join("touch-enabled),("),g,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},p.geolocation=function(){return"geolocation"in navigator},p.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},p.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},p.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},p.localstorage=function(){try{return localStorage.setItem(g,g),localStorage.removeItem(g),!0}catch(a){return!1}},p.sessionstorage=function(){try{return sessionStorage.setItem(g,g),sessionStorage.removeItem(g),!0}catch(a){return!1}},p.webworkers=function(){return!!a.Worker};for(var G in p)y(p,G)&&(u=G.toLowerCase(),e[u]=p[G](),s.push((e[u]?"":"no-")+u));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof enableClasses!="undefined"&&enableClasses&&(f.className+=" "+(b?"":"no-")+a),e[a]=b}return e},z(""),h=j=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=l,e._domPrefixes=o,e._cssomPrefixes=n,e.hasEvent=w,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=v,e.prefixed=function(a,b,c){return b?F(a,b,c):F(a,"pfx")},e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;fopera.version()?new Audio(null):new Audio).canPlayType!==k}catch(ib){Ia=!1}this.hasHTML5=Ia;this.setup=function(b){var e=!c.url;b!==k&&p&&u&&c.ok();oa(b);b&& -(e&&(N&&b.url!==k)&&c.beginDelayedInit(),!N&&(b.url!==k&&"complete"===n.readyState)&&setTimeout(G,1));return c};this.supported=this.ok=function(){return u?p&&!y:c.useHTML5Audio&&c.hasHTML5};this.getMovie=function(b){return W(b)||n[b]||g[b]};this.createSound=function(b,e){function d(){a=aa(a);c.sounds[a.id]=new Ja(a);c.soundIDs.push(a.id);return c.sounds[a.id]}var a,f=null;if(!p||!c.ok())return!1;e!==k&&(b={id:b,url:e});a=w(b);a.url=da(a.url);void 0===a.id&&(a.id=c.setupOptions.idPrefix+Ya++);if(r(a.id, -!0))return c.sounds[a.id];if(ea(a))f=d(),f._setup_html5(a);else{if(c.html5Only||c.html5.usingFlash&&a.url&&a.url.match(/data\:/i))return d();8a.instanceCount?(n(),f=a._setup_html5(),a.setPosition(a._iO.position),f.play()):(h=new Audio(a._iO.url),g=function(){t.remove(h,"ended",g);a._onfinish(a);fa(h);h=null},J=function(){t.remove(h,"canplay",J);try{h.currentTime=a._iO.position/1E3}catch(b){}h.play()},t.add(h,"ended",g),void 0!==a._iO.volume&&(h.volume=Math.max(0,Math.min(1,a._iO.volume/100))),a.muted&&(h.muted=!0),a._iO.position? -t.add(h,"canplay",J):h.play()):(f=l._start(a.id,a._iO.loops||1,9===m?a.position:a.position/1E3,a._iO.multiShot||!1),9===m&&!f&&a._iO.onplayerror&&a._iO.onplayerror.apply(a))}return a};this.stop=function(b){var c=a._iO;1===a.playState&&(a._onbufferchange(0),a._resetOnPosition(0),a.paused=!1,a.isHTML5||(a.playState=0),x(),c.to&&a.clearOnPosition(c.to),a.isHTML5?a._a&&(b=a.position,a.setPosition(0),a.position=b,a._a.pause(),a.playState=0,a._onTimer(),g()):(l._stop(a.id,b),c.serverURL&&a.unload()),a.instanceCount= -0,a._iO={},c.onstop&&c.onstop.apply(a));return a};this.setAutoPlay=function(b){a._iO.autoPlay=b;a.isHTML5||(l._setAutoPlay(a.id,b),b&&!a.instanceCount&&1===a.readyState&&a.instanceCount++)};this.getAutoPlay=function(){return a._iO.autoPlay};this.setPosition=function(b){b===k&&(b=0);var c=a.isHTML5?Math.max(b,0):Math.min(a.duration||a._iO.duration,Math.max(b,0));a.position=c;b=a.position/1E3;a._resetOnPosition(a.position);a._iO.position=c;if(a.isHTML5){if(a._a){if(a._html5_canplay){if(a._a.currentTime!== -b)try{a._a.currentTime=b,(0===a.playState||a.paused)&&a._a.pause()}catch(e){}}else if(b)return a;a.paused&&a._onTimer(!0)}}else b=9===m?a.position:b,a.readyState&&2!==a.readyState&&l._setPosition(a.id,b,a.paused||!a.playState,a._iO.multiShot);return a};this.pause=function(b){if(a.paused||0===a.playState&&1!==a.readyState)return a;a.paused=!0;a.isHTML5?(a._setup_html5().pause(),g()):(b||b===k)&&l._pause(a.id,a._iO.multiShot);a._iO.onpause&&a._iO.onpause.apply(a);return a};this.resume=function(){var b= -a._iO;if(!a.paused)return a;a.paused=!1;a.playState=1;a.isHTML5?(a._setup_html5().play(),n()):(b.isMovieStar&&!b.serverURL&&a.setPosition(a.position),l._pause(a.id,b.multiShot));!s&&b.onplay?(b.onplay.apply(a),s=!0):b.onresume&&b.onresume.apply(a);return a};this.togglePause=function(){if(0===a.playState)return a.play({position:9===m&&!a.isHTML5?a.position:a.position/1E3}),a;a.paused?a.resume():a.pause();return a};this.setPan=function(b,c){b===k&&(b=0);c===k&&(c=!1);a.isHTML5||l._setPan(a.id,b);a._iO.pan= -b;c||(a.pan=b,a.options.pan=b);return a};this.setVolume=function(b,e){b===k&&(b=100);e===k&&(e=!1);a.isHTML5?a._a&&(c.muted&&!a.muted&&(a.muted=!0,a._a.muted=!0),a._a.volume=Math.max(0,Math.min(1,b/100))):l._setVolume(a.id,c.muted&&!a.muted||a.muted?0:b);a._iO.volume=b;e||(a.volume=b,a.options.volume=b);return a};this.mute=function(){a.muted=!0;a.isHTML5?a._a&&(a._a.muted=!0):l._setVolume(a.id,0);return a};this.unmute=function(){a.muted=!1;var b=a._iO.volume!==k;a.isHTML5?a._a&&(a._a.muted=!1):l._setVolume(a.id, -b?a._iO.volume:a.options.volume);return a};this.toggleMute=function(){return a.muted?a.unmute():a.mute()};this.onposition=this.onPosition=function(b,c,e){p.push({position:parseInt(b,10),method:c,scope:e!==k?e:a,fired:!1});return a};this.clearOnPosition=function(a,b){var c;a=parseInt(a,10);if(isNaN(a))return!1;for(c=0;c=b)return!1;for(b-= -1;0<=b;b--)c=p[b],!c.fired&&a.position>=c.position&&(c.fired=!0,u++,c.method.apply(c.scope,[c.position]));return!0};this._resetOnPosition=function(a){var b,c;b=p.length;if(!b)return!1;for(b-=1;0<=b;b--)c=p[b],c.fired&&a<=c.position&&(c.fired=!1,u--);return!0};y=function(){var b=a._iO,c=b.from,e=b.to,d,f;f=function(){a.clearOnPosition(e,f);a.stop()};d=function(){if(null!==e&&!isNaN(e))a.onPosition(e,f)};null!==c&&!isNaN(c)&&(b.position=c,b.multiShot=!1,d());return b};q=function(){var b,c=a._iO.onposition; -if(c)for(b in c)if(c.hasOwnProperty(b))a.onPosition(parseInt(b,10),c[b])};x=function(){var b,c=a._iO.onposition;if(c)for(b in c)c.hasOwnProperty(b)&&a.clearOnPosition(parseInt(b,10))};n=function(){a.isHTML5&&Ra(a)};g=function(){a.isHTML5&&Sa(a)};f=function(b){b||(p=[],u=0);s=!1;a._hasTimer=null;a._a=null;a._html5_canplay=!1;a.bytesLoaded=null;a.bytesTotal=null;a.duration=a._iO&&a._iO.duration?a._iO.duration:null;a.durationEstimate=null;a.buffered=[];a.eqData=[];a.eqData.left=[];a.eqData.right=[]; -a.failures=0;a.isBuffering=!1;a.instanceOptions={};a.instanceCount=0;a.loaded=!1;a.metadata={};a.readyState=0;a.muted=!1;a.paused=!1;a.peakData={left:0,right:0};a.waveformData={left:[],right:[]};a.playState=0;a.position=null;a.id3={}};f();this._onTimer=function(b){var c,f=!1,h={};if(a._hasTimer||b){if(a._a&&(b||(0opera.version()?new Audio(null):new Audio,c=a._a,c._called_load=!1,A&&(Ka=c);a.isHTML5=!0;a._a=c;c._s=a;h();a._apply_loop(c,b.loops);b.autoLoad||b.autoPlay?a.load():(c.autobuffer=!1,c.preload="auto");return c};h=function(){if(a._a._added_events)return!1;var b;a._a._added_events=!0;for(b in B)B.hasOwnProperty(b)&&a._a&&a._a.addEventListener(b,B[b],!1);return!0};J=function(){var b;a._a._added_events= -!1;for(b in B)B.hasOwnProperty(b)&&a._a&&a._a.removeEventListener(b,B[b],!1)};this._onload=function(b){var c=!!b||!a.isHTML5&&8===m&&a.duration;a.loaded=c;a.readyState=c?3:2;a._onbufferchange(0);a._iO.onload&&ga(a,function(){a._iO.onload.apply(a,[c])});return!0};this._onbufferchange=function(b){if(0===a.playState||b&&a.isBuffering||!b&&!a.isBuffering)return!1;a.isBuffering=1===b;a._iO.onbufferchange&&a._iO.onbufferchange.apply(a);return!0};this._onsuspend=function(){a._iO.onsuspend&&a._iO.onsuspend.apply(a); -return!0};this._onfailure=function(b,c,e){a.failures++;if(a._iO.onfailure&&1===a.failures)a._iO.onfailure(a,b,c,e)};this._onfinish=function(){var b=a._iO.onfinish;a._onbufferchange(0);a._resetOnPosition(0);a.instanceCount&&(a.instanceCount--,a.instanceCount||(x(),a.playState=0,a.paused=!1,a.instanceCount=0,a.instanceOptions={},a._iO={},g(),a.isHTML5&&(a.position=0)),(!a.instanceCount||a._iO.multiShotEvents)&&b&&ga(a,function(){b.apply(a)}))};this._whileloading=function(b,c,e,d){var f=a._iO;a.bytesLoaded= -b;a.bytesTotal=c;a.duration=Math.floor(e);a.bufferLength=d;a.durationEstimate=!a.isHTML5&&!f.isMovieStar?f.duration?a.duration>f.duration?a.duration:f.duration:parseInt(a.bytesTotal/a.bytesLoaded*a.duration,10):a.duration;a.isHTML5||(a.buffered=[{start:0,end:a.duration}]);(3!==a.readyState||a.isHTML5)&&f.whileloading&&f.whileloading.apply(a)};this._whileplaying=function(b,c,e,d,f){var h=a._iO;if(isNaN(b)||null===b)return!1;a.position=Math.max(0,b);a._processOnPosition();!a.isHTML5&&8opera.version()?new Audio(null):new Audio:null,d,a,f={},h,g;h=c.audioFormats;for(d in h)if(h.hasOwnProperty(d)&&(a="audio/"+d,f[d]=b(h[d].type),f[a]=f[d],d.match(bb)?(c.flash[d]=!0,c.flash[a]=!0):(c.flash[d]=!1,c.flash[a]=!1),h[d]&&h[d].related))for(g=h[d].related.length-1;0<=g;g--)f["audio/"+h[d].related[g]]=f[d],c.html5[h[d].related[g]]=f[d],c.flash[h[d].related[g]]=f[d];f.canPlayType=e?b:null;c.html5=w(c.html5,f);c.html5.usingFlash= -Va();u=c.html5.usingFlash;return!0};sa={};P=function(){};aa=function(b){8===m&&(1m)&&(c.flashVersion=m=9);c.version=c.versionNumber+(c.html5Only?" (HTML5-only mode)":9===m?" (AS3/Flash 9)": -" (AS2/Flash 8)");8b&&(e=!0));setTimeout(function(){b=c.getMoviePercent();if(e)return Q=!1,g.setTimeout(F,1),!1;!p&&ab&&(null===b?c.useFlashBlock||0===c.flashLoadTimeout?c.useFlashBlock&&za():!c.useFlashBlock&&S?qa():D({type:"ontimeout",ignoreInit:!0,error:{type:"INIT_FLASHBLOCK"}}):0!==c.flashLoadTimeout&&(!c.useFlashBlock&&S?qa():xa(!0)))},c.flashLoadTimeout)};Y=function(){if(Ga||!ja)return t.remove(g,"focus", -Y),!0;Ga=ab=!0;Q=!1;F();t.remove(g,"focus",Y);return!0};M=function(b){if(p)return!1;if(c.html5Only)return p=!0,E(),!0;var e=!0,d;if(!c.useFlashBlock||!c.flashLoadTimeout||c.getMoviePercent())p=!0;d={type:!v&&u?"NO_FLASH":"INIT_TIMEOUT"};if(y||b)c.useFlashBlock&&c.oMC&&(c.oMC.className=I()+" "+(null===c.getMoviePercent()?"swf_timedout":"swf_error")),D({type:"ontimeout",error:d,ignoreInit:!0}),H(d),e=!1;y||(c.waitForWindowLoad&&!na?t.add(g,"load",E):E());return e};Ma=function(){var b,e=c.setupOptions; -for(b in e)e.hasOwnProperty(b)&&(c[b]===k?c[b]=e[b]:c[b]!==e[b]&&(c.setupOptions[b]=c[b]))};ma=function(){if(p)return!1;if(c.html5Only)return p||(t.remove(g,"load",c.beginDelayedInit),c.enabled=!0,M()),!0;Z();try{l._externalInterfaceTest(!1),Oa(!0,c.flashPollingInterval||(c.useHighPerformance?10:50)),c.debugMode||l._disableDebug(),c.enabled=!0,c.html5Only||t.add(g,"unload",la)}catch(b){return H({type:"JS_TO_FLASH_EXCEPTION",fatal:!0}),xa(!0),M(),!1}M();t.remove(g,"load",c.beginDelayedInit);return!0}; -G=function(){if(N)return!1;N=!0;Ma();wa();!v&&c.hasHTML5&&c.setup({useHTML5Audio:!0,preferFlash:!1});Wa();!v&&u&&(Ua.push(sa.needFlash),c.setup({flashLoadTimeout:1}));n.removeEventListener&&n.removeEventListener("DOMContentLoaded",G,!1);Z();return!0};Ba=function(){"complete"===n.readyState&&(G(),n.detachEvent("onreadystatechange",Ba));return!0};ua=function(){na=!0;t.remove(g,"load",ua)};ta=function(){if(Fa&&(c.setupOptions.useHTML5Audio=!0,c.setupOptions.preferFlash=!1,ha||Za&&!s.match(/android\s2\.3/i)))ha&& -(c.ignoreFlash=!0),A=!0};ta();Da();t.add(g,"focus",Y);t.add(g,"load",F);t.add(g,"load",ua);n.addEventListener?n.addEventListener("DOMContentLoaded",G,!1):n.attachEvent?n.attachEvent("onreadystatechange",Ba):H({type:"NO_DOM2_EVENTS",fatal:!0})}var ka=null;if(void 0===g.SM2_DEFER||!SM2_DEFER)ka=new U;g.SoundManager=U;g.soundManager=ka})(window); \ No newline at end of file diff --git a/templates/html5/template/lib/soundmanager/swf/soundmanager2.swf b/templates/html5/template/lib/soundmanager/swf/soundmanager2.swf deleted file mode 100755 index e900766a8250814f69718b07c18fa252ffd71bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2908 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 Gjdg9jBfGT# diff --git a/templates/html5/template/lib/soundmanager/swf/soundmanager2_debug.swf b/templates/html5/template/lib/soundmanager/swf/soundmanager2_debug.swf deleted file mode 100755 index a6809121ff0b315591d2f031302b9749497c5b2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3282 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 diff --git a/templates/html5/template/lib/soundmanager/swf/soundmanager2_flash9.swf b/templates/html5/template/lib/soundmanager/swf/soundmanager2_flash9.swf deleted file mode 100755 index 3d4222a345f039a12aad81b24c2b74017bc21074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8758 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 diff --git a/templates/html5/template/lib/soundmanager/swf/soundmanager2_flash9_debug.swf b/templates/html5/template/lib/soundmanager/swf/soundmanager2_flash9_debug.swf deleted file mode 100755 index c1a129d8871b60f8cc09f42c5c6ac7534f6d28e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17258 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