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