UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

158 lines (141 loc) 4.63 kB
// Class: openfl.display._internal.Context3DBuffer var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../../hxClasses_stub").default; var $hxEnums = require("./../../../hxEnums_stub").default; var $import = require("./../../../import_stub").default; function Std() {return require("./../../../Std");} function lime_utils__$Float32Array_Float32Array_$Impl_$() {return require("./../../../lime/utils/_Float32Array/Float32Array_Impl_");} // Constructor var Context3DBuffer = function(context3D,elementType,elementCount,dataPerVertex) { this.context3D = context3D; this.elementType = elementType; this.dataPerVertex = dataPerVertex; this.indexCount = 0; this.vertexCount = 0; this.resize(elementCount); } // Meta Context3DBuffer.__name__ = "openfl.display._internal.Context3DBuffer"; Context3DBuffer.__isInterface__ = false; Context3DBuffer.prototype = { drawElements: function(start,length) { if(length == null) { length = -1; } if(this.indexCount == 0 || this.vertexCount == 0) { return; } if(this.elementType._hx_index == 0) { if(length == -1) { length = this.elementCount * 2; } if(start < 10922 && length - start < 10922) { this.context3D.drawTriangles(this.indexBuffers[0],start,length * 2); } else { var end = start + length; while(start < end) { var arrayBufferIndex = Math.floor(start / 10922); length = (Std().default).int(Math.min(end - start,10922)); if(length <= 0) { break; } this.context3D.drawTriangles(this.indexBuffers[arrayBufferIndex],(start - arrayBufferIndex * 10922) * 3,length * 2); start += length; } } } }, flushVertexBufferData: function() { if(this.vertexBufferData.length > this.vertexCount) { this.vertexCount = this.vertexBufferData.length; this.vertexBuffer = this.context3D.createVertexBuffer(this.vertexCount,this.dataPerVertex,"dynamicDraw"); } this.vertexBuffer.uploadFromTypedArray((lime_utils__$Float32Array_Float32Array_$Impl_$().default).toArrayBufferView(this.vertexBufferData)); }, resize: function(elementCount,dataPerVertex) { if(dataPerVertex == null) { dataPerVertex = -1; } this.elementCount = elementCount; if(dataPerVertex == -1) { dataPerVertex = this.dataPerVertex; } if(dataPerVertex != this.dataPerVertex) { this.vertexBuffer = null; this.vertexCount = 0; this.dataPerVertex = dataPerVertex; } var numVertices = 0; switch(this.elementType._hx_index) { case 0: numVertices = elementCount * 4; break; case 1: numVertices = elementCount * 3; break; case 2: numVertices = elementCount * 3; break; } var vertexLength = numVertices * dataPerVertex; if(this.vertexBufferData == null) { var array = null; var view = null; var buffer = null; var len = null; var this1; if(vertexLength != null) { this1 = new Float32Array(vertexLength); } else if(array != null) { this1 = new Float32Array(array); } else if(view != null) { this1 = new Float32Array(view); } else if(buffer != null) { if(len == null) { this1 = new Float32Array(buffer,0); } else { this1 = new Float32Array(buffer,0,len); } } else { this1 = null; } this.vertexBufferData = this1; } else if(vertexLength > this.vertexBufferData.length) { var cacheBufferData = this.vertexBufferData; var array1 = null; var view1 = null; var buffer1 = null; var len1 = null; var this2; if(vertexLength != null) { this2 = new Float32Array(vertexLength); } else if(array1 != null) { this2 = new Float32Array(array1); } else if(view1 != null) { this2 = new Float32Array(view1); } else if(buffer1 != null) { if(len1 == null) { this2 = new Float32Array(buffer1,0); } else { this2 = new Float32Array(buffer1,0,len1); } } else { this2 = null; } this.vertexBufferData = this2; this.vertexBufferData.set(cacheBufferData); } } }; Context3DBuffer.prototype.__class__ = Context3DBuffer.prototype.constructor = $hxClasses["openfl.display._internal.Context3DBuffer"] = Context3DBuffer; // Init // Statics Context3DBuffer.__meta__ = { obj : { SuppressWarnings : ["checkstyle:FieldDocComment"]}} Context3DBuffer.MAX_INDEX_BUFFER_LENGTH = 65535 Context3DBuffer.MAX_QUADS_PER_INDEX_BUFFER = 10922 Context3DBuffer.MAX_QUAD_INDEX_BUFFER_LENGTH = 65532 // Export exports.default = Context3DBuffer;