BsRenderer.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsRenderer.h"
  4. #include "BsCoreThread.h"
  5. #include "BsRenderAPI.h"
  6. #include "BsMesh.h"
  7. #include "BsMaterial.h"
  8. #include "BsRendererExtension.h"
  9. #include "BsRendererManager.h"
  10. namespace bs { namespace ct
  11. {
  12. Renderer::Renderer()
  13. :mCallbacks(&compareCallback)
  14. { }
  15. SPtr<RendererMeshData> Renderer::_createMeshData(UINT32 numVertices, UINT32 numIndices, VertexLayout layout, IndexType indexType)
  16. {
  17. return bs_shared_ptr<RendererMeshData>(new (bs_alloc<RendererMeshData>())
  18. RendererMeshData(numVertices, numIndices, layout, indexType));
  19. }
  20. SPtr<RendererMeshData> Renderer::_createMeshData(const SPtr<MeshData>& meshData)
  21. {
  22. return bs_shared_ptr<RendererMeshData>(new (bs_alloc<RendererMeshData>())
  23. RendererMeshData(meshData));
  24. }
  25. bool Renderer::compareCallback(const RendererExtension* a, const RendererExtension* b)
  26. {
  27. // Sort by alpha setting first, then by cull mode, then by index
  28. if (a->getLocation() == b->getLocation())
  29. {
  30. if (a->getPriority() == b->getPriority())
  31. return a > b; // Use address, at this point it doesn't matter, but std::set requires us to differentiate
  32. else
  33. return a->getPriority() > b->getPriority();
  34. }
  35. else
  36. return (UINT32)a->getLocation() < (UINT32)b->getLocation();
  37. }
  38. SPtr<Renderer> gRenderer()
  39. {
  40. return std::static_pointer_cast<Renderer>(RendererManager::instance().getActive());
  41. }
  42. }}