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