diff options
Diffstat (limited to 'renderer.cpp')
| -rw-r--r-- | renderer.cpp | 19 | 
1 files changed, 19 insertions, 0 deletions
diff --git a/renderer.cpp b/renderer.cpp index c7040ec..64c3795 100644 --- a/renderer.cpp +++ b/renderer.cpp @@ -5,6 +5,8 @@ extern "C" {  #include "memory.h"  } +#include <algorithm> +  struct VP_Cbuffer {  	m4f view_projection;  }; @@ -91,6 +93,21 @@ void Drawlist::render(  	}  } +void Drawlist::sort(const Renderer& r) { +	const Camera& cam = r.get_camera(camera); +	v3f far = cam.position + cam.far * cam.forward; +	/* ideally want to sort the meshes within each model as +	 * well but as long as the models are small it wont matter +	 * too much... */ +	std::sort( +		models, +		models + count, +		[&far](const Model_Instance* a, const Model_Instance* b) { +			return v3f::dot(a->centre, far) < v3f::dot(b->centre, far); +		} +	); +} +  void Renderer::update_globals(  	const Lighting* l,  	Device* d, @@ -136,6 +153,8 @@ void Renderer::render(  			.build_rp();  	} +	drawlists[FORWARD].sort(*this); +  	ctx.debug_push("depth prepass");  	drawlists[FORWARD].render(*this, dev, a, l, depth_prepass, 0);  	ctx.debug_pop();  |