forked from LeenkxTeam/LNXSDK
Update Files
This commit is contained in:
345
Kha/Backends/HTML5-Worker/kha/html5worker/Graphics.hx
Normal file
345
Kha/Backends/HTML5-Worker/kha/html5worker/Graphics.hx
Normal file
@ -0,0 +1,345 @@
|
||||
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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user