LNXSDK/Kha/Backends/Krom/kha/graphics4/PipelineState.hx

96 lines
3.0 KiB
Haxe
Raw Normal View History

2025-01-22 16:18:30 +01:00
package kha.graphics4;
import kha.graphics4.FragmentShader;
import kha.graphics4.VertexData;
import kha.graphics4.VertexShader;
import kha.graphics4.VertexStructure;
class PipelineState extends PipelineStateBase {
var pipeline: Dynamic;
public function new() {
super();
pipeline = Krom.createPipeline();
}
public function delete() {
Krom.deletePipeline(pipeline);
pipeline = null;
}
public function compile(): Void {
var structure0 = inputLayout.length > 0 ? inputLayout[0] : null;
var structure1 = inputLayout.length > 1 ? inputLayout[1] : null;
var structure2 = inputLayout.length > 2 ? inputLayout[2] : null;
var structure3 = inputLayout.length > 3 ? inputLayout[3] : null;
var gs = geometryShader != null ? geometryShader.shader : null;
var tcs = tessellationControlShader != null ? tessellationControlShader.shader : null;
var tes = tessellationEvaluationShader != null ? tessellationEvaluationShader.shader : null;
var stencilReferenceValue = 0;
switch (this.stencilReferenceValue) {
case Static(value):
stencilReferenceValue = value;
default:
}
Krom.compilePipeline(pipeline, structure0, structure1, structure2, structure3, inputLayout.length, vertexShader.shader, fragmentShader.shader, gs,
tcs, tes, {
cullMode: cullMode,
depthWrite: this.depthWrite,
depthMode: depthMode,
stencilMode: stencilFrontMode,
stencilBothPass: stencilFrontBothPass,
stencilDepthFail: stencilFrontDepthFail,
stencilFail: stencilFrontFail,
stencilReferenceValue: stencilReferenceValue,
stencilReadMask: stencilReadMask,
stencilWriteMask: stencilWriteMask,
blendSource: convertBlendingFactor(blendSource),
blendDestination: convertBlendingFactor(blendDestination),
alphaBlendSource: convertBlendingFactor(alphaBlendSource),
alphaBlendDestination: convertBlendingFactor(alphaBlendDestination),
colorWriteMaskRed: colorWriteMasksRed,
colorWriteMaskGreen: colorWriteMasksGreen,
colorWriteMaskBlue: colorWriteMasksBlue,
colorWriteMaskAlpha: colorWriteMasksAlpha,
conservativeRasterization: conservativeRasterization
});
}
public function set(): Void {
Krom.setPipeline(pipeline);
}
public function getConstantLocation(name: String): kha.graphics4.ConstantLocation {
return Krom.getConstantLocation(pipeline, name);
}
public function getTextureUnit(name: String): kha.graphics4.TextureUnit {
return Krom.getTextureUnit(pipeline, name);
}
static function convertBlendingFactor(factor: BlendingFactor): Int {
switch (factor) {
case Undefined, BlendOne:
return 0;
case BlendZero:
return 1;
case SourceAlpha:
return 2;
case DestinationAlpha:
return 3;
case InverseSourceAlpha:
return 4;
case InverseDestinationAlpha:
return 5;
case SourceColor:
return 6;
case DestinationColor:
return 7;
case InverseSourceColor:
return 8;
case InverseDestinationColor:
return 9;
}
}
}