ShaderProgramImpl.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Gr/ShaderProgram.h>
  7. #include <AnKi/Gr/gl/GlObject.h>
  8. namespace anki {
  9. /// @addtogroup opengl
  10. /// @{
  11. class ShaderProgramImplReflection
  12. {
  13. public:
  14. struct Uniform
  15. {
  16. I32 m_location;
  17. U32 m_pushConstantOffset;
  18. ShaderVariableDataType m_type;
  19. U8 m_arrSize;
  20. };
  21. DynamicArray<Uniform> m_uniforms;
  22. U32 m_uniformDataSize = 0;
  23. };
  24. /// Shader program implementation.
  25. class ShaderProgramImpl final : public ShaderProgram, public GlObject
  26. {
  27. public:
  28. ShaderProgramImpl(GrManager* manager, CString name)
  29. : ShaderProgram(manager, name)
  30. {
  31. }
  32. ~ShaderProgramImpl();
  33. ANKI_USE_RESULT Error initGraphics(ShaderPtr vert, ShaderPtr tessc, ShaderPtr tesse, ShaderPtr geom,
  34. ShaderPtr frag);
  35. ANKI_USE_RESULT Error initCompute(ShaderPtr comp);
  36. // Do that only when is needed to avoid serializing the thread the driver is using for compilation.
  37. const ShaderProgramImplReflection& getReflection();
  38. private:
  39. Array<ShaderPtr, U(ShaderType::COUNT)> m_shaders;
  40. ShaderProgramImplReflection m_refl;
  41. Bool m_reflInitialized = false;
  42. ANKI_USE_RESULT Error link(GLuint vert, GLuint frag);
  43. };
  44. /// @}
  45. } // end namespace anki