forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.0 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 {
 | 
						|
	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;
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |