118 lines
2.8 KiB
Haxe
118 lines
2.8 KiB
Haxe
package kha.graphics4;
|
|
|
|
import kha.graphics4.FragmentShader;
|
|
import kha.graphics4.VertexData;
|
|
import kha.graphics4.VertexShader;
|
|
import kha.graphics4.VertexStructure;
|
|
|
|
class PipelineState extends PipelineStateBase {
|
|
static var lastId: Int = -1;
|
|
|
|
public var _id: Int;
|
|
|
|
var textures: Array<String>;
|
|
var textureValues: Array<Dynamic>;
|
|
|
|
public function new() {
|
|
super();
|
|
_id = ++lastId;
|
|
textures = new Array<String>();
|
|
textureValues = new Array<Dynamic>();
|
|
}
|
|
|
|
public function delete(): Void {}
|
|
|
|
public function compile(): Void {
|
|
var index = 0;
|
|
for (structure in inputLayout) {
|
|
for (element in structure.elements) {
|
|
if (element.data == VertexData.Float4x4) {
|
|
index += 4;
|
|
}
|
|
else {
|
|
++index;
|
|
}
|
|
}
|
|
}
|
|
|
|
var layout = new Array<Dynamic>();
|
|
for (input in inputLayout) {
|
|
var elements = new Array<Dynamic>();
|
|
for (element in input.elements) {
|
|
elements.push({
|
|
name: element.name,
|
|
data: element.data
|
|
});
|
|
}
|
|
layout.push({
|
|
elements: elements
|
|
});
|
|
}
|
|
|
|
var stencilValue = -1;
|
|
switch (stencilReferenceValue) {
|
|
case Static(value):
|
|
stencilValue = value;
|
|
case Dynamic:
|
|
stencilValue = -1;
|
|
}
|
|
|
|
var state = {
|
|
cullMode: cullMode,
|
|
depthWrite: depthWrite,
|
|
depthMode: depthMode,
|
|
stencilFrontMode: stencilFrontMode,
|
|
stencilFrontBothPass: stencilFrontBothPass,
|
|
stencilFrontDepthFail: stencilFrontDepthFail,
|
|
stencilFrontFail: stencilFrontFail,
|
|
stencilBackMode: stencilBackMode,
|
|
stencilBackBothPass: stencilBackBothPass,
|
|
stencilBackDepthFail: stencilBackDepthFail,
|
|
stencilBackFail: stencilBackFail,
|
|
stencilReferenceValue: stencilValue,
|
|
stencilReadMask: stencilReadMask,
|
|
stencilWriteMask: stencilWriteMask,
|
|
blendSource: blendSource,
|
|
blendDestination: blendDestination,
|
|
alphaBlendSource: alphaBlendSource,
|
|
alphaBlendDestination: alphaBlendDestination,
|
|
colorWriteMaskRed: colorWriteMaskRed,
|
|
colorWriteMaskGreen: colorWriteMaskGreen,
|
|
colorWriteMaskBlue: colorWriteMaskBlue,
|
|
colorWriteMaskAlpha: colorWriteMaskAlpha,
|
|
conservativeRasterization: conservativeRasterization
|
|
};
|
|
|
|
Worker.postMessage({
|
|
command: 'compilePipeline',
|
|
id: _id,
|
|
frag: fragmentShader.files[0],
|
|
vert: vertexShader.files[0],
|
|
layout: layout,
|
|
state: state
|
|
});
|
|
}
|
|
|
|
public function getConstantLocation(name: String): kha.graphics4.ConstantLocation {
|
|
var loc = new kha.html5worker.ConstantLocation();
|
|
Worker.postMessage({
|
|
command: 'createConstantLocation',
|
|
id: loc._id,
|
|
name: name,
|
|
pipeline: _id
|
|
});
|
|
return loc;
|
|
}
|
|
|
|
public function getTextureUnit(name: String): kha.graphics4.TextureUnit {
|
|
var unit = new kha.html5worker.TextureUnit();
|
|
Worker.postMessage({
|
|
command: 'createTextureUnit',
|
|
id: unit._id,
|
|
name: name,
|
|
pipeline: _id
|
|
});
|
|
return unit;
|
|
}
|
|
}
|