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