BsCoreRenderer.cpp 1.5 KB

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