forked from LeenkxTeam/LNXSDK
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;
|
|
}
|
|
}
|