346 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			346 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| package kha.html5worker;
 | |
| 
 | |
| import kha.arrays.Float32Array;
 | |
| import kha.Canvas;
 | |
| import kha.graphics4.IndexBuffer;
 | |
| import kha.graphics4.MipMapFilter;
 | |
| import kha.graphics4.PipelineState;
 | |
| import kha.graphics4.TextureAddressing;
 | |
| import kha.graphics4.TextureFilter;
 | |
| import kha.graphics4.Usage;
 | |
| import kha.graphics4.VertexBuffer;
 | |
| import kha.graphics4.VertexStructure;
 | |
| import kha.math.FastMatrix3;
 | |
| import kha.math.FastMatrix4;
 | |
| import kha.math.FastVector2;
 | |
| import kha.math.FastVector3;
 | |
| import kha.math.FastVector4;
 | |
| 
 | |
| class Graphics implements kha.graphics4.Graphics {
 | |
| 	var renderTarget: Image;
 | |
| 
 | |
| 	public function new(renderTarget: Canvas = null) {
 | |
| 		if (Std.isOfType(renderTarget, Image)) {
 | |
| 			this.renderTarget = cast renderTarget;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public function begin(additionalRenderTargets: Array<Canvas> = null): Void {
 | |
| 		Worker.postMessage({command: 'begin', renderTarget: renderTarget == null ? -1 : renderTarget._rtid});
 | |
| 	}
 | |
| 
 | |
| 	public function beginFace(face: Int): Void {}
 | |
| 
 | |
| 	public function beginEye(eye: Int): Void {}
 | |
| 
 | |
| 	public function end(): Void {
 | |
| 		Worker.postMessage({command: 'end'});
 | |
| 	}
 | |
| 
 | |
| 	public function flush(): Void {}
 | |
| 
 | |
| 	public function vsynced(): Bool {
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	public function refreshRate(): Int {
 | |
| 		return 60;
 | |
| 	}
 | |
| 
 | |
| 	public function clear(?color: Color, ?depth: Float, ?stencil: Int): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'clear',
 | |
| 			color: color == null ? null : color.value,
 | |
| 			hasDepth: depth != null,
 | |
| 			depth: depth,
 | |
| 			hasStencil: stencil != null,
 | |
| 			stencil: stencil
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function viewport(x: Int, y: Int, width: Int, height: Int): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'viewport',
 | |
| 			x: x,
 | |
| 			y: y,
 | |
| 			width: width,
 | |
| 			height: height
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function createVertexBuffer(vertexCount: Int, structure: VertexStructure, usage: Usage, canRead: Bool = false): kha.graphics4.VertexBuffer {
 | |
| 		return new VertexBuffer(vertexCount, structure, usage);
 | |
| 	}
 | |
| 
 | |
| 	public function setVertexBuffer(vertexBuffer: kha.graphics4.VertexBuffer): Void {
 | |
| 		Worker.postMessage({command: 'setVertexBuffer', id: vertexBuffer._id});
 | |
| 	}
 | |
| 
 | |
| 	public function setVertexBuffers(vertexBuffers: Array<kha.graphics4.VertexBuffer>): Void {
 | |
| 		var ids = new Array<Int>();
 | |
| 		for (buffer in vertexBuffers) {
 | |
| 			ids.push(buffer._id);
 | |
| 		}
 | |
| 		Worker.postMessage({command: 'setVertexBuffers', ids: ids});
 | |
| 	}
 | |
| 
 | |
| 	public function createIndexBuffer(indexCount: Int, usage: Usage, canRead: Bool = false): kha.graphics4.IndexBuffer {
 | |
| 		return new IndexBuffer(indexCount, usage);
 | |
| 	}
 | |
| 
 | |
| 	public function setIndexBuffer(indexBuffer: kha.graphics4.IndexBuffer): Void {
 | |
| 		Worker.postMessage({command: 'setIndexBuffer', id: indexBuffer._id});
 | |
| 	}
 | |
| 
 | |
| 	public function setTexture(stage: kha.graphics4.TextureUnit, texture: kha.Image): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setTexture',
 | |
| 			stage: cast(stage, kha.html5worker.TextureUnit)._id,
 | |
| 			texture: texture == null ? -1 : texture.id,
 | |
| 			renderTarget: texture == null ? -1 : texture._rtid
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setTextureDepth(stage: kha.graphics4.TextureUnit, texture: kha.Image): Void {}
 | |
| 
 | |
| 	public function setTextureArray(unit: kha.graphics4.TextureUnit, texture: kha.Image): Void {}
 | |
| 
 | |
| 	public function setVideoTexture(unit: kha.graphics4.TextureUnit, texture: kha.Video): Void {}
 | |
| 
 | |
| 	public function setImageTexture(unit: kha.graphics4.TextureUnit, texture: kha.Image): Void {}
 | |
| 
 | |
| 	public function setTextureParameters(texunit: kha.graphics4.TextureUnit, uAddressing: TextureAddressing, vAddressing: TextureAddressing,
 | |
| 			minificationFilter: TextureFilter, magnificationFilter: TextureFilter, mipmapFilter: MipMapFilter): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setTextureParameters',
 | |
| 			id: cast(texunit, kha.html5worker.TextureUnit)._id,
 | |
| 			uAddressing: uAddressing,
 | |
| 			vAddressing: vAddressing,
 | |
| 			minificationFilter: minificationFilter,
 | |
| 			magnificationFilter: magnificationFilter,
 | |
| 			mipmapFilter: mipmapFilter
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setTexture3DParameters(texunit: kha.graphics4.TextureUnit, uAddressing: TextureAddressing, vAddressing: TextureAddressing,
 | |
| 		wAddressing: TextureAddressing, minificationFilter: TextureFilter, magnificationFilter: TextureFilter, mipmapFilter: MipMapFilter): Void {}
 | |
| 
 | |
| 	public function setTextureCompareMode(texunit: kha.graphics4.TextureUnit, enabled: Bool): Void {}
 | |
| 
 | |
| 	public function setCubeMapCompareMode(texunit: kha.graphics4.TextureUnit, enabled: Bool): Void {}
 | |
| 
 | |
| 	public function setCubeMap(stage: kha.graphics4.TextureUnit, cubeMap: kha.graphics4.CubeMap): Void {}
 | |
| 
 | |
| 	public function setCubeMapDepth(stage: kha.graphics4.TextureUnit, cubeMap: kha.graphics4.CubeMap): Void {}
 | |
| 
 | |
| 	public function setPipeline(pipe: PipelineState): Void {
 | |
| 		Worker.postMessage({command: 'setPipeline', id: pipe._id});
 | |
| 	}
 | |
| 
 | |
| 	public function setStencilReferenceValue(value: Int): Void {}
 | |
| 
 | |
| 	public function setBool(location: kha.graphics4.ConstantLocation, value: Bool): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setBool',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			value: value
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setInt(location: kha.graphics4.ConstantLocation, value: Int): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setInt',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			value: value
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setInt2(location: kha.graphics4.ConstantLocation, value1: Int, value2: Int): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setInt2',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			_0: value1,
 | |
| 			_1: value2
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setInt3(location: kha.graphics4.ConstantLocation, value1: Int, value2: Int, value3: Int): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setInt3',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			_0: value1,
 | |
| 			_1: value2,
 | |
| 			_2: value3
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setInt4(location: kha.graphics4.ConstantLocation, value1: Int, value2: Int, value3: Int, value4: Int): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setInt4',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			_0: value1,
 | |
| 			_1: value2,
 | |
| 			_2: value3,
 | |
| 			_3: value4
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setInts(location: kha.graphics4.ConstantLocation, values: kha.arrays.Int32Array): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setInts',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			values: values
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setFloat(location: kha.graphics4.ConstantLocation, value: FastFloat): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setFloat',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			value: value
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setFloat2(location: kha.graphics4.ConstantLocation, value1: FastFloat, value2: FastFloat): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setFloat2',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			_0: value1,
 | |
| 			_1: value2
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setFloat3(location: kha.graphics4.ConstantLocation, value1: FastFloat, value2: FastFloat, value3: FastFloat): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setFloat3',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			_0: value1,
 | |
| 			_1: value2,
 | |
| 			_2: value3
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setFloat4(location: kha.graphics4.ConstantLocation, value1: FastFloat, value2: FastFloat, value3: FastFloat, value4: FastFloat): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setFloat4',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			_0: value1,
 | |
| 			_1: value2,
 | |
| 			_2: value3,
 | |
| 			_3: value4
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setFloats(location: kha.graphics4.ConstantLocation, values: Float32Array): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setFloats',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			values: values
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setVector2(location: kha.graphics4.ConstantLocation, value: FastVector2): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setVector2',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			x: value.x,
 | |
| 			y: value.y
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setVector3(location: kha.graphics4.ConstantLocation, value: FastVector3): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setVector3',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			x: value.x,
 | |
| 			y: value.y,
 | |
| 			z: value.z
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function setVector4(location: kha.graphics4.ConstantLocation, value: FastVector4): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setVector4',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			x: value.x,
 | |
| 			y: value.y,
 | |
| 			z: value.z,
 | |
| 			w: value.w
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public inline function setMatrix(location: kha.graphics4.ConstantLocation, matrix: FastMatrix4): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setMatrix4',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			_00: matrix._00,
 | |
| 			_01: matrix._01,
 | |
| 			_02: matrix._02,
 | |
| 			_03: matrix._03,
 | |
| 			_10: matrix._10,
 | |
| 			_11: matrix._11,
 | |
| 			_12: matrix._12,
 | |
| 			_13: matrix._13,
 | |
| 			_20: matrix._20,
 | |
| 			_21: matrix._21,
 | |
| 			_22: matrix._22,
 | |
| 			_23: matrix._23,
 | |
| 			_30: matrix._30,
 | |
| 			_31: matrix._31,
 | |
| 			_32: matrix._32,
 | |
| 			_33: matrix._33
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public inline function setMatrix3(location: kha.graphics4.ConstantLocation, matrix: FastMatrix3): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'setMatrix3',
 | |
| 			location: cast(location, kha.html5worker.ConstantLocation)._id,
 | |
| 			_00: matrix._00,
 | |
| 			_01: matrix._01,
 | |
| 			_02: matrix._02,
 | |
| 			_10: matrix._10,
 | |
| 			_11: matrix._11,
 | |
| 			_12: matrix._12,
 | |
| 			_20: matrix._20,
 | |
| 			_21: matrix._21,
 | |
| 			_22: matrix._22
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function drawIndexedVertices(start: Int = 0, count: Int = -1): Void {
 | |
| 		Worker.postMessage({command: 'drawIndexedVertices', start: start, count: count});
 | |
| 	}
 | |
| 
 | |
| 	public function scissor(x: Int, y: Int, width: Int, height: Int): Void {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'scissor',
 | |
| 			x: x,
 | |
| 			y: y,
 | |
| 			width: width,
 | |
| 			height: height
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function disableScissor(): Void {
 | |
| 		Worker.postMessage({command: 'disableScissor'});
 | |
| 	}
 | |
| 
 | |
| 	public function drawIndexedVerticesInstanced(instanceCount: Int, start: Int = 0, count: Int = -1) {
 | |
| 		Worker.postMessage({
 | |
| 			command: 'drawIndexedVerticesInstanced',
 | |
| 			instanceCount: instanceCount,
 | |
| 			start: start,
 | |
| 			count: count
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public function instancedRenderingAvailable(): Bool {
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	public function maxBoundTextures(): Int {
 | |
| 		return 16;
 | |
| 	}
 | |
| }
 |