118 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			118 lines
		
	
	
		
			2.8 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 {
							 | 
						||
| 
								 | 
							
									static var lastId: Int = -1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public var _id: Int;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									var textures: Array<String>;
							 | 
						||
| 
								 | 
							
									var textureValues: Array<Dynamic>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function new() {
							 | 
						||
| 
								 | 
							
										super();
							 | 
						||
| 
								 | 
							
										_id = ++lastId;
							 | 
						||
| 
								 | 
							
										textures = new Array<String>();
							 | 
						||
| 
								 | 
							
										textureValues = new Array<Dynamic>();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function delete(): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function compile(): Void {
							 | 
						||
| 
								 | 
							
										var index = 0;
							 | 
						||
| 
								 | 
							
										for (structure in inputLayout) {
							 | 
						||
| 
								 | 
							
											for (element in structure.elements) {
							 | 
						||
| 
								 | 
							
												if (element.data == VertexData.Float4x4) {
							 | 
						||
| 
								 | 
							
													index += 4;
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												else {
							 | 
						||
| 
								 | 
							
													++index;
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										var layout = new Array<Dynamic>();
							 | 
						||
| 
								 | 
							
										for (input in inputLayout) {
							 | 
						||
| 
								 | 
							
											var elements = new Array<Dynamic>();
							 | 
						||
| 
								 | 
							
											for (element in input.elements) {
							 | 
						||
| 
								 | 
							
												elements.push({
							 | 
						||
| 
								 | 
							
													name: element.name,
							 | 
						||
| 
								 | 
							
													data: element.data
							 | 
						||
| 
								 | 
							
												});
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											layout.push({
							 | 
						||
| 
								 | 
							
												elements: elements
							 | 
						||
| 
								 | 
							
											});
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										var stencilValue = -1;
							 | 
						||
| 
								 | 
							
										switch (stencilReferenceValue) {
							 | 
						||
| 
								 | 
							
											case Static(value):
							 | 
						||
| 
								 | 
							
												stencilValue = value;
							 | 
						||
| 
								 | 
							
											case Dynamic:
							 | 
						||
| 
								 | 
							
												stencilValue = -1;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										var state = {
							 | 
						||
| 
								 | 
							
											cullMode: cullMode,
							 | 
						||
| 
								 | 
							
											depthWrite: depthWrite,
							 | 
						||
| 
								 | 
							
											depthMode: depthMode,
							 | 
						||
| 
								 | 
							
											stencilFrontMode: stencilFrontMode,
							 | 
						||
| 
								 | 
							
											stencilFrontBothPass: stencilFrontBothPass,
							 | 
						||
| 
								 | 
							
											stencilFrontDepthFail: stencilFrontDepthFail,
							 | 
						||
| 
								 | 
							
											stencilFrontFail: stencilFrontFail,
							 | 
						||
| 
								 | 
							
											stencilBackMode: stencilBackMode,
							 | 
						||
| 
								 | 
							
											stencilBackBothPass: stencilBackBothPass,
							 | 
						||
| 
								 | 
							
											stencilBackDepthFail: stencilBackDepthFail,
							 | 
						||
| 
								 | 
							
											stencilBackFail: stencilBackFail,
							 | 
						||
| 
								 | 
							
											stencilReferenceValue: stencilValue,
							 | 
						||
| 
								 | 
							
											stencilReadMask: stencilReadMask,
							 | 
						||
| 
								 | 
							
											stencilWriteMask: stencilWriteMask,
							 | 
						||
| 
								 | 
							
											blendSource: blendSource,
							 | 
						||
| 
								 | 
							
											blendDestination: blendDestination,
							 | 
						||
| 
								 | 
							
											alphaBlendSource: alphaBlendSource,
							 | 
						||
| 
								 | 
							
											alphaBlendDestination: alphaBlendDestination,
							 | 
						||
| 
								 | 
							
											colorWriteMaskRed: colorWriteMaskRed,
							 | 
						||
| 
								 | 
							
											colorWriteMaskGreen: colorWriteMaskGreen,
							 | 
						||
| 
								 | 
							
											colorWriteMaskBlue: colorWriteMaskBlue,
							 | 
						||
| 
								 | 
							
											colorWriteMaskAlpha: colorWriteMaskAlpha,
							 | 
						||
| 
								 | 
							
											conservativeRasterization: conservativeRasterization
							 | 
						||
| 
								 | 
							
										};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										Worker.postMessage({
							 | 
						||
| 
								 | 
							
											command: 'compilePipeline',
							 | 
						||
| 
								 | 
							
											id: _id,
							 | 
						||
| 
								 | 
							
											frag: fragmentShader.files[0],
							 | 
						||
| 
								 | 
							
											vert: vertexShader.files[0],
							 | 
						||
| 
								 | 
							
											layout: layout,
							 | 
						||
| 
								 | 
							
											state: state
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function getConstantLocation(name: String): kha.graphics4.ConstantLocation {
							 | 
						||
| 
								 | 
							
										var loc = new kha.html5worker.ConstantLocation();
							 | 
						||
| 
								 | 
							
										Worker.postMessage({
							 | 
						||
| 
								 | 
							
											command: 'createConstantLocation',
							 | 
						||
| 
								 | 
							
											id: loc._id,
							 | 
						||
| 
								 | 
							
											name: name,
							 | 
						||
| 
								 | 
							
											pipeline: _id
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
										return loc;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function getTextureUnit(name: String): kha.graphics4.TextureUnit {
							 | 
						||
| 
								 | 
							
										var unit = new kha.html5worker.TextureUnit();
							 | 
						||
| 
								 | 
							
										Worker.postMessage({
							 | 
						||
| 
								 | 
							
											command: 'createTextureUnit',
							 | 
						||
| 
								 | 
							
											id: unit._id,
							 | 
						||
| 
								 | 
							
											name: name,
							 | 
						||
| 
								 | 
							
											pipeline: _id
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
										return unit;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |