BsRendererParams.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsGpuProgram.h"
  4. #include "BsUtil.h"
  5. #include "BsGpuParamDesc.h"
  6. namespace BansheeEngine
  7. {
  8. // TODO UNDOCUMENTED
  9. enum RendererBlockSemantic
  10. {
  11. RBS_Occassional,
  12. RBS_PerFrame,
  13. RBS_PerObject
  14. };
  15. enum RendererParamSemantic
  16. {
  17. RPS_WorldViewProjTfrm,
  18. RPS_ViewProjTfrm,
  19. RPS_WorldTfrm
  20. };
  21. enum RendererPass
  22. {
  23. RP_AnyPass = 0xFFFFFFFF
  24. };
  25. enum RendererBlock
  26. {
  27. RB_NoBlock = 0xFFFFFFFF
  28. };
  29. struct BS_CORE_EXPORT RendererMaterialParam
  30. {
  31. RendererMaterialParam(UINT32 semantic, GpuProgramType program, bool isObject, UINT32 passIdx = RP_AnyPass, UINT32 blockSemantic = RB_NoBlock);
  32. virtual ~RendererMaterialParam() {}
  33. UINT32 semantic;
  34. GpuProgramType program;
  35. UINT32 passIdx; /**< 0xFFFFFFFF any pass. */
  36. UINT32 blockSemantic; /**< 0xFFFFFFFF no block. */
  37. bool isObject;
  38. };
  39. struct BS_CORE_EXPORT RendererMaterialDataParam : public RendererMaterialParam
  40. {
  41. RendererMaterialDataParam(UINT32 semantic, GpuProgramType program, GpuParamDataType type, UINT32 elementSize,
  42. UINT32 arraySize, UINT32 arrayElementStride, UINT32 cpuOffset, UINT32 gpuOffset,
  43. UINT32 passIdx = RP_AnyPass, UINT32 blockSemantic = RB_NoBlock);
  44. GpuParamDataType type;
  45. UINT32 elementSize;
  46. UINT32 arraySize;
  47. UINT32 arrayElementStride;
  48. UINT32 cpuOffset;
  49. UINT32 gpuOffset;
  50. };
  51. struct BS_CORE_EXPORT RendererMaterialObjectParam : public RendererMaterialParam
  52. {
  53. RendererMaterialObjectParam(UINT32 semantic, GpuProgramType program, GpuParamObjectType type,
  54. UINT32 slot, UINT32 passIdx = RP_AnyPass, UINT32 blockSemantic = RB_NoBlock);
  55. GpuParamObjectType type;
  56. UINT32 slot;
  57. };
  58. class BS_CORE_EXPORT RendererMaterialParams
  59. {
  60. public:
  61. RendererMaterialParams(const String& renderSystem, UINT32 renderableType);
  62. ~RendererMaterialParams();
  63. bool operator== (const RendererMaterialParams& params) const;
  64. void addDataParam(UINT32 semantic, GpuProgramType program, GpuParamDataType type, UINT32 elementSize,
  65. UINT32 cpuOffset, UINT32 gpuOffset, UINT32 passIdx = RP_AnyPass, UINT32 blockSemantic = RB_NoBlock);
  66. void addArrayDataParam(UINT32 semantic, GpuProgramType program, GpuParamDataType type, UINT32 elementSize,
  67. UINT32 arraySize, UINT32 arrayElementStride, UINT32 cpuOffset, UINT32 gpuOffset, UINT32 passIdx = RP_AnyPass,
  68. UINT32 blockSemantic = RB_NoBlock);
  69. void addObjectParam(UINT32 semantic, GpuProgramType program, GpuParamObjectType type,
  70. UINT32 slot, UINT32 passIdx = RP_AnyPass, UINT32 blockSemantic = RB_NoBlock);
  71. private:
  72. friend struct std::hash<RendererMaterialParams>;
  73. Vector<RendererMaterialParam*> mParams;
  74. String mRenderSystem;
  75. UINT32 mRenderableType;
  76. };
  77. }
  78. template<>
  79. struct std::hash<BansheeEngine::RendererMaterialParams>
  80. {
  81. size_t operator()(const BansheeEngine::RendererMaterialParams& params) const
  82. {
  83. size_t hash = 0;
  84. BansheeEngine::hash_combine(hash, params.mRenderSystem);
  85. BansheeEngine::hash_combine(hash, params.mRenderableType);
  86. return hash;
  87. }
  88. };