58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package iron.object; | ||
|  | 
 | ||
|  | import kha.graphics4.Graphics; | ||
|  | import iron.data.MaterialData; | ||
|  | import iron.data.ConstData; | ||
|  | import iron.object.Uniforms; | ||
|  | 
 | ||
|  | class DecalObject extends Object { | ||
|  | 
 | ||
|  | #if rp_decals | ||
|  | 
 | ||
|  | 	public var material: MaterialData; | ||
|  | 
 | ||
|  | 	public function new(material: MaterialData) { | ||
|  | 		super(); | ||
|  | 		this.material = material; | ||
|  | 		Scene.active.decals.push(this); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public override function remove() { | ||
|  | 		if (Scene.active != null) Scene.active.decals.remove(this); | ||
|  | 		super.remove(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Called before rendering decal in render path | ||
|  | 	public function render(g: Graphics, context: String, bindParams: Array<String>) { | ||
|  | 
 | ||
|  | 		// Check context skip | ||
|  | 		if (material.raw.skip_context != null && | ||
|  | 			material.raw.skip_context == context) { | ||
|  | 			return; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		transform.update(); | ||
|  | 
 | ||
|  | 		var materialContext: MaterialContext = null; | ||
|  | 		for (i in 0...material.raw.contexts.length) { | ||
|  | 			if (material.raw.contexts[i].name == context) { | ||
|  | 				materialContext = material.contexts[i]; // Single material decals | ||
|  | 				break; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		var shaderContext = material.shader.getContext(context); | ||
|  | 
 | ||
|  | 		g.setPipeline(shaderContext.pipeState); | ||
|  | 
 | ||
|  | 		Uniforms.setContextConstants(g, shaderContext, bindParams); | ||
|  | 		Uniforms.setObjectConstants(g, shaderContext, this); | ||
|  | 		Uniforms.setMaterialConstants(g, shaderContext, materialContext); | ||
|  | 
 | ||
|  | 		g.setVertexBuffer(ConstData.boxVB); | ||
|  | 		g.setIndexBuffer(ConstData.boxIB); | ||
|  | 		g.drawIndexedVertices(); | ||
|  | 	} | ||
|  | 
 | ||
|  | #end | ||
|  | } |