Pioneer
Loading...
Searching...
No Matches
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
24namespace Graphics {
25
26 class RendererOGL;
27
28 namespace OGL {
29
30 class CommandList;
31 class Shader;
32 class Program;
33 class UniformBuffer;
34
36 public:
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:
58 friend class OGL::CommandList;
59 void Copy(OGL::Material *to) const;
61 void UpdateDrawData();
62
66
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 const Shader * GetShader() const
Definition MaterialGL.h:41
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
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