render_world.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * Copyright (c) 2012-2015 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/taylor001/crown/blob/master/LICENSE
  4. */
  5. #include "render_world.h"
  6. #include "memory.h"
  7. #include "camera.h"
  8. #include "log.h"
  9. #include "sprite_resource.h"
  10. #include "sprite.h"
  11. #include "material.h"
  12. #include "config.h"
  13. #include "gui.h"
  14. #include "mesh_resource.h"
  15. #include "scene_graph.h"
  16. #include <bgfx.h>
  17. namespace crown
  18. {
  19. RenderWorld::RenderWorld()
  20. : m_sprite_pool(default_allocator(), MAX_SPRITES, sizeof(Sprite), CE_ALIGNOF(Sprite))
  21. , m_gui_pool(default_allocator(), MAX_GUIS, sizeof(Gui), CE_ALIGNOF(Gui))
  22. {
  23. }
  24. RenderWorld::~RenderWorld()
  25. {
  26. }
  27. SpriteId RenderWorld::create_sprite(SpriteResource* sr, SceneGraph& sg, UnitId id)
  28. {
  29. Sprite* sprite = CE_NEW(m_sprite_pool, Sprite)(*this, sg, id, sr);
  30. return id_array::create(m_sprite, sprite);
  31. }
  32. void RenderWorld::destroy_sprite(SpriteId id)
  33. {
  34. CE_DELETE(m_sprite_pool, id_array::get(m_sprite, id));
  35. id_array::destroy(m_sprite, id);
  36. }
  37. Sprite* RenderWorld::get_sprite(SpriteId id)
  38. {
  39. return id_array::get(m_sprite, id);
  40. }
  41. GuiId RenderWorld::create_gui(uint16_t width, uint16_t height, const char* material)
  42. {
  43. Gui* gui = CE_NEW(m_gui_pool, Gui)(width, height, material);
  44. GuiId id = id_array::create(m_guis, gui);
  45. gui->set_id(id);
  46. return id;
  47. }
  48. void RenderWorld::destroy_gui(GuiId id)
  49. {
  50. CE_DELETE(m_gui_pool, id_array::get(m_guis, id));
  51. id_array::destroy(m_guis, id);
  52. }
  53. Gui* RenderWorld::get_gui(GuiId id)
  54. {
  55. return id_array::get(m_guis, id);
  56. }
  57. void RenderWorld::update(const Matrix4x4& view, const Matrix4x4& projection, uint16_t x, uint16_t y, uint16_t width, uint16_t height)
  58. {
  59. // Set view 0 clear state.
  60. bgfx::setViewClear(0
  61. , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH
  62. , 0x353839FF
  63. , 1.0f
  64. , 0);
  65. // Set view and projection matrix for view 0.
  66. bgfx::setViewTransform(0, matrix4x4::to_float_ptr(view), matrix4x4::to_float_ptr(projection));
  67. bgfx::setViewRect(0, 0, 0, width, height);
  68. // This dummy draw call is here to make sure that view 0 is cleared
  69. // if no other draw calls are submitted to view 0.
  70. bgfx::submit(0);
  71. // Draw all sprites
  72. for (uint32_t s = 0; s < id_array::size(m_sprite); s++)
  73. {
  74. m_sprite[s]->render();
  75. }
  76. }
  77. } // namespace crown