A 2D tile-based sandbox game.
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

Renderer.h 958B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #pragma once
  2. #include <memory>
  3. #include <vector>
  4. #include <stdint.h>
  5. #include <swan-common/constants.h>
  6. #include <swan-common/Vector2.h>
  7. #include "util.h"
  8. namespace Cygnet {
  9. struct RendererState;
  10. struct RenderChunk {
  11. GLuint tex;
  12. };
  13. struct RenderCamera {
  14. SwanCommon::Vec2 pos;
  15. float zoom;
  16. };
  17. class Renderer {
  18. public:
  19. using TileID = uint16_t;
  20. Renderer();
  21. ~Renderer();
  22. void drawChunk(SwanCommon::Vec2 pos, RenderChunk chunk);
  23. void draw(const RenderCamera &cam);
  24. void registerTileTexture(TileID tileId, const void *data, size_t len);
  25. void uploadTileTexture();
  26. RenderChunk createChunk(
  27. TileID tiles[SwanCommon::CHUNK_WIDTH * SwanCommon::CHUNK_HEIGHT]);
  28. void destroyChunk(RenderChunk chunk);
  29. private:
  30. std::unique_ptr<RendererState> state_;
  31. std::vector<std::pair<SwanCommon::Vec2, RenderChunk>> draw_chunks_;
  32. };
  33. inline void Renderer::drawChunk(SwanCommon::Vec2 pos, RenderChunk chunk) {
  34. draw_chunks_.emplace_back(pos, chunk);
  35. }
  36. }