From a066bec3bb28d00439f61912d002925dfb3d6171 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Wed, 30 Jun 2010 22:54:13 +0000 Subject: [PATCH] Sort layers before rendering. --- src/test-map.cpp | 2 +- src/tiler.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/test-map.cpp b/src/test-map.cpp index 305d9790..7220e45c 100644 --- a/src/test-map.cpp +++ b/src/test-map.cpp @@ -54,7 +54,7 @@ void DrawScene() /* Test stuff */ int playerx, playery; SDL_GetMouseState(&playerx, &playery); - tiler->AddTile(50, playerx, playery, nlayers); + tiler->AddTile(50, playerx, playery, 1); tiler->Render(); video->Refresh(33.33333f); diff --git a/src/tiler.cpp b/src/tiler.cpp index a1f40822..f30cc3b0 100644 --- a/src/tiler.cpp +++ b/src/tiler.cpp @@ -27,6 +27,14 @@ class TilerData friend class Tiler; private: + static int Compare(void const *p1, void const *p2) + { + int const *n1 = (int const *)p1; + int const *n2 = (int const *)p2; + + return n1[2] + 32 * n1[3] - (n2[2] + 32 * n2[3]); + } + int *tiles; int ntiles; @@ -90,6 +98,9 @@ void Tiler::AddTile(int n, int x, int y, int z) void Tiler::Render() { + /* Sort tiles */ + qsort(data->tiles, data->ntiles, 4 * sizeof(int), TilerData::Compare); + /* Texture coord buffer */ float uvs[8 * data->ntiles]; for (int n = 0; n < data->ntiles; n++)