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