public void AddObject( int renderOrder, IRenderObject renderObject, ShaderProgram vertProg, ShaderProgram fragProg, ShaderProgram shadowFragProg, string debugName = null) { IInternalRenderObject internalRenderObj = renderObject as IInternalRenderObject; if (internalRenderObj == null) { throw new Exception( $"[{nameof(RenderScene)}] Render objects have to be implemented at engine level"); } //Keep track of all objects objects.Add(internalRenderObj); //Add them to techniques for rendering gbufferTechnique.AddObject(internalRenderObj, vertProg, fragProg, renderOrder, debugName); if (shadowFragProg != null) { shadowTechnique.AddObject( internalRenderObj, vertProg, shadowFragProg, renderOrder, debugName); } dirty = true; }