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;
 | |
| 		}
 | |
| 	}
 | |
| }
 |