Pioneer
MaterialGL.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _OGL_MATERIAL_H
5 #define _OGL_MATERIAL_H
6 /*
7  * Multi-purpose OGL material.
8  *
9  * Generally, the idea is that a Program contains uniforms but
10  * a material sets them, using the standard parameters of Graphics::Material
11  * or whatever necessary to achieve an effect
12  *
13  * Programs are owned by the renderer, since they are shared between materials.
14  */
15 #include "OpenGLLibs.h"
16 #include "graphics/Material.h"
17 #include "graphics/Types.h"
19 
20 #include <memory>
21 #include <string>
22 #include <vector>
23 
24 namespace Graphics {
25 
26  class RendererOGL;
27 
28  namespace OGL {
29 
30  class CommandList;
31  class Shader;
32  class Program;
33  class UniformBuffer;
34 
35  class Material : public Graphics::Material {
36  public:
37  Material() {}
38 
39  virtual bool IsProgramLoaded() const override final;
40  virtual void SetShader(Shader *p);
41  virtual const Shader *GetShader() const { return m_shader; }
42 
43  virtual bool SetTexture(size_t name, Texture *tex) override;
44 
45  virtual bool SetBufferDynamic(size_t name, void *buffer, size_t size) override;
46  virtual bool SetBuffer(size_t name, BufferBinding<Graphics::UniformBuffer> ub) override;
47 
48  virtual bool SetPushConstant(size_t name, int i) override;
49  virtual bool SetPushConstant(size_t name, float f) override;
50  virtual bool SetPushConstant(size_t name, vector3f v3) override;
51  virtual bool SetPushConstant(size_t name, vector3f v4, float f4) override;
52  virtual bool SetPushConstant(size_t name, Color c) override;
53  virtual bool SetPushConstant(size_t name, matrix3x3f mat3) override;
54  virtual bool SetPushConstant(size_t name, matrix4x4f mat4) override;
55 
56  protected:
57  friend class Graphics::RendererOGL;
58  friend class OGL::CommandList;
59  void Copy(OGL::Material *to) const;
61  void UpdateDrawData();
62 
66 
67  uint32_t m_perDrawBinding;
68 
69  std::unique_ptr<char[]> m_pushConstants;
70  std::unique_ptr<Texture *[]> m_textureBindings;
71  std::unique_ptr<BufferBinding<UniformBuffer>[]> m_bufferBindings;
72  };
73  } // namespace OGL
74 } // namespace Graphics
75 #endif
Definition: Material.h:148
Definition: CommandBufferGL.h:35
Definition: MaterialGL.h:35
virtual bool SetTexture(size_t name, Texture *tex) override
Definition: MaterialGL.cpp:184
std::unique_ptr< char[]> m_pushConstants
Definition: MaterialGL.h:69
void Copy(OGL::Material *to) const
Definition: MaterialGL.cpp:139
std::unique_ptr< Texture *[]> m_textureBindings
Definition: MaterialGL.h:70
virtual bool IsProgramLoaded() const override final
Definition: MaterialGL.cpp:133
virtual bool SetBufferDynamic(size_t name, void *buffer, size_t size) override
Definition: MaterialGL.cpp:194
virtual void SetShader(Shader *p)
Definition: MaterialGL.cpp:41
Program * EvaluateVariant()
Definition: MaterialGL.cpp:72
virtual bool SetPushConstant(size_t name, int i) override
Definition: MaterialGL.cpp:242
virtual const Shader * GetShader() const
Definition: MaterialGL.h:41
uint32_t m_perDrawBinding
Definition: MaterialGL.h:67
RendererOGL * m_renderer
Definition: MaterialGL.h:65
void UpdateDrawData()
Definition: MaterialGL.cpp:95
Material()
Definition: MaterialGL.h:37
Shader * m_shader
Definition: MaterialGL.h:63
virtual bool SetBuffer(size_t name, BufferBinding< Graphics::UniformBuffer > ub) override
Definition: MaterialGL.cpp:210
std::unique_ptr< BufferBinding< UniformBuffer >[]> m_bufferBindings
Definition: MaterialGL.h:71
Program * m_activeVariant
Definition: MaterialGL.h:64
Definition: Program.h:25
Definition: Shader.h:67
Definition: RendererGL.h:37
Definition: Texture.h:106
Definition: Background.h:14
Definition: Color.h:66
Definition: BufferCommon.h:63