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) { // 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 }