From a9630341c7dfb3834e00a43a6f24c871daf18550 Mon Sep 17 00:00:00 2001 From: Michele Santullo Date: Fri, 22 May 2015 14:50:10 +0200 Subject: [PATCH] Draw tiles. --- test/main.cpp | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/test/main.cpp b/test/main.cpp index d84a581..b2738eb 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -40,6 +40,7 @@ namespace { void addLayer ( dk::Tyler<2>& parTiler, LayerWithData& parLayerInfo, const char* parPath ); void printViewport ( const dk::Viewport<2>& parView, const dk::Layer& parLayer ); std::pair GetRenderingDriver ( void ); + void draw_tiles ( SDL_Renderer* parRenderer, SDL_Texture* parTile0, SDL_Texture* parTile1, const dk::Viewport<2>& parView, const dk::Layer& parLayer, int parYOffs ); } //unnamed namespace int main() { @@ -54,7 +55,7 @@ int main() { printWelcome(); SDLWindowUPtr sdl_window( - SDL_CreateWindow("DoorKeeper test", 100, 100, 320, 240, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE), + SDL_CreateWindow("DoorKeeper test", 100, 100, 128 * 6, 128 * 4, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE), &SDL_DestroyWindow ); const auto rendererDriver = GetRenderingDriver(); @@ -88,8 +89,18 @@ int main() { //Main loop bool running = true; + int y = 0; + dk::Viewport<2> viewport(tiler, coords2(6, 4), coords2(0)); do { + SDL_RenderClear(sdl_renderer.get()); + viewport.setFrom(coords2(0, y / 128)); + draw_tiles(sdl_renderer.get(), tile_0.get(), tile_1.get(), viewport, *bottomLayer.layer, -(y % 128)); + ++y; + if (128 * bottomLayer.layer->mapSize().y() == y) + y = 0; + SDL_RenderPresent(sdl_renderer.get()); + SDL_Delay(1000 / 60); SDL_Event eve; while (SDL_PollEvent(&eve)) { switch (eve.type) { @@ -198,4 +209,28 @@ namespace { return RetPairType(-1, "default"); } + + void draw_tiles (SDL_Renderer* parRenderer, SDL_Texture* parTile0, SDL_Texture* parTile1, const dk::Viewport<2>& parView, const dk::Layer& parLayer, int parYOffs) { + SDL_Rect rect_src; + rect_src.x = rect_src.y = 0; + SDL_QueryTexture(parTile0, nullptr, nullptr, &rect_src.w, &rect_src.h); + + int col = 0; + int row = 0; + const auto tilecount = parView.count(); + for (auto itTile = parView.begin(parLayer), itTileEND = parView.end(parLayer); itTile != itTileEND; ++itTile) { + if (col == tilecount.x()) { + col = 0; + ++row; + } + SDL_Rect rect_dst; + rect_dst.x = col * rect_src.w; + rect_dst.y = row * rect_src.h + parYOffs; + rect_dst.w = rect_src.w; + rect_dst.h = rect_src.h; + SDL_Texture* const curr_texture = (1 == *itTile ? parTile1 : parTile0); + SDL_RenderCopy(parRenderer, curr_texture, &rect_src, &rect_dst); + ++col; + } + } } //unnamed namespace