GlistEngine
Loading...
Searching...
No Matches
gMaterial.h
Go to the documentation of this file.
1/*
2 * gMaterial.h
3 *
4 * Created on: Oct 29, 2020
5 * Author: noyan
6 */
7
8#pragma once
9
10#ifndef GRAPHICS_GMATERIAL_H_
11#define GRAPHICS_GMATERIAL_H_
12
13#include "gRenderObject.h"
14#include "gTexture.h"
15#include <array>
16
17
18class gMaterial : public gRenderObject {
19public:
21 gMaterial(const gMaterial& other);
24
25 bool isPBR() const;
26
27 // Texture slot stuff
28 void loadMap(gTexture::TextureType type, const std::string& texturePath);
32 void bindMap(gTexture::TextureType type, int slotNo) const;
34 void setMapEnabled(gTexture::TextureType type, bool enabled);
36
37 // Color properties
38 void setAmbientColor(int r, int g, int b, int a = 255);
39 void setAmbientColor(float r, float g, float b, float a = 1.0f);
40 void setAmbientColor(gColor* color);
42
43 void setDiffuseColor(int r, int g, int b, int a = 255);
44 void setDiffuseColor(float r, float g, float b, float a = 1.0f);
45 void setDiffuseColor(gColor* color);
47
48 void setSpecularColor(int r, int g, int b, int a = 255);
49 void setSpecularColor(float r, float g, float b, float a = 1.0f);
52
53 void setShininess(float shininess);
54 float getShininess() const;
55
56 // Backwards Compatability
57
58 void loadDiffuseMap(const std::string& texturePath) { loadMap(gTexture::TEXTURETYPE_DIFFUSE, texturePath); }
59 void setDiffuseMap(gTexture* diffuseMap) { setMap(gTexture::TEXTURETYPE_DIFFUSE, diffuseMap); }
65
66 void loadSpecularMap(const std::string& texturePath) { loadMap(gTexture::TEXTURETYPE_SPECULAR, texturePath); }
67 void setSpecularMap(gTexture* specularMap) { setMap(gTexture::TEXTURETYPE_SPECULAR, specularMap); }
73
74 void loadNormalMap(const std::string& texturePath) { loadMap(gTexture::TEXTURETYPE_NORMAL, texturePath); }
75 void setNormalMap(gTexture* normalMap) { setMap(gTexture::TEXTURETYPE_NORMAL, normalMap); }
81
82 void loadHeightMap(const std::string& texturePath) { loadMap(gTexture::TEXTURETYPE_HEIGHT, texturePath); }
83 void setHeightMap(gTexture* heightMap) { setMap(gTexture::TEXTURETYPE_HEIGHT, heightMap); }
89
90 void loadAlbedoMap(const std::string& texturePath) { loadMap(gTexture::TEXTURETYPE_PBR_ALBEDO, texturePath); }
93 void bindAlbedoMap(int slotNo = 3) const { bindMap(gTexture::TEXTURETYPE_PBR_ALBEDO, slotNo); }
97
98 void loadRoughnessMap(const std::string& texturePath) { loadMap(gTexture::TEXTURETYPE_PBR_ROUGHNESS, texturePath); }
101 void bindRoughnessMap(int slotNo = 6) const { bindMap(gTexture::TEXTURETYPE_PBR_ROUGHNESS, slotNo); }
105
106 void loadMetalnessMap(const std::string& texturePath) { loadMap(gTexture::TEXTURETYPE_PBR_METALNESS, texturePath); }
109 void bindMetalnessMap(int slotNo = 5) const { bindMap(gTexture::TEXTURETYPE_PBR_METALNESS, slotNo); }
113
114 void loadPbrNormalMap(const std::string& texturePath) { loadMap(gTexture::TEXTURETYPE_PBR_NORMAL, texturePath); }
115 void setPbrNormalMap(gTexture* pbrNormalMap) { setMap(gTexture::TEXTURETYPE_PBR_NORMAL, pbrNormalMap); }
117 void bindPbrNormalMap(int slotNo = 4) const { bindMap(gTexture::TEXTURETYPE_PBR_NORMAL, slotNo); }
121
122 void loadAOMap(const std::string& texturePath) { loadMap(gTexture::TEXTURETYPE_PBR_AO, texturePath); }
125 void bindAOMap(int slotNo = 7) const { bindMap(gTexture::TEXTURETYPE_PBR_AO, slotNo); }
129
130private:
131 struct TextureSlot {
132 gTexture* texture = nullptr;
133 bool enabled = false;
134 bool owned = false;
135 };
136
137 static bool isPBRType(gTexture::TextureType type);
138 void cleanupSlot(TextureSlot& slot);
139
140 std::array<TextureSlot, gTexture::TEXTURETYPE_COUNT> slots;
141 bool ispbr;
142
143 gColor ambient;
144 gColor diffuse;
145 gColor specular;
146 float shininess;
147};
148
149#endif /* GRAPHICS_GMATERIAL_H_ */
Definition gColor.h:17
Definition gMaterial.h:18
gTexture * getMetalnessMap()
Definition gMaterial.h:108
void setRoughnessMap(gTexture *roughnessMap)
Definition gMaterial.h:99
void setNormalMap(gTexture *normalMap)
Definition gMaterial.h:75
gColor * getAmbientColor()
gTexture * getRoughnessMap()
Definition gMaterial.h:100
void bindAlbedoMap(int slotNo=3) const
Definition gMaterial.h:93
void setDiffuseMap(gTexture *diffuseMap)
Definition gMaterial.h:59
void unbindRoughnessMap() const
Definition gMaterial.h:102
void bindRoughnessMap(int slotNo=6) const
Definition gMaterial.h:101
void loadHeightMap(const std::string &texturePath)
Definition gMaterial.h:82
bool isMapEnabled(gTexture::TextureType type) const
void setSpecularColor(int r, int g, int b, int a=255)
float getShininess() const
void unbindAOMap() const
Definition gMaterial.h:126
void bindMap(gTexture::TextureType type, int slotNo) const
void loadMap(gTexture::TextureType type, const std::string &texturePath)
void setMetalnessMapEnabled(bool enabled)
Definition gMaterial.h:111
void bindAOMap(int slotNo=7) const
Definition gMaterial.h:125
void loadRoughnessMap(const std::string &texturePath)
Definition gMaterial.h:98
bool isMetalnessMapEnabled() const
Definition gMaterial.h:112
bool isPBR() const
void unbindMap(gTexture::TextureType type) const
void loadMetalnessMap(const std::string &texturePath)
Definition gMaterial.h:106
void loadPbrNormalMap(const std::string &texturePath)
Definition gMaterial.h:114
void loadSpecularMap(const std::string &texturePath)
Definition gMaterial.h:66
void setSpecularColor(float r, float g, float b, float a=1.0f)
void setRoughnessMapEnabled(bool enabled)
Definition gMaterial.h:103
bool isAOMapEnabled() const
Definition gMaterial.h:128
bool isPbrNormalMapEnabled() const
Definition gMaterial.h:120
gTexture * getAlbedoMap()
Definition gMaterial.h:92
void bindHeightMap() const
Definition gMaterial.h:85
gTexture * getHeightMap()
Definition gMaterial.h:84
void setAmbientColor(float r, float g, float b, float a=1.0f)
void bindSpecularMap() const
Definition gMaterial.h:69
void unbindPbrNormalMap() const
Definition gMaterial.h:118
void setAmbientColor(gColor *color)
gTexture * getMap(gTexture::TextureType type) const
void loadAOMap(const std::string &texturePath)
Definition gMaterial.h:122
bool isSpecularMapEnabled() const
Definition gMaterial.h:72
void unbindAlbedoMap() const
Definition gMaterial.h:94
void loadNormalMap(const std::string &texturePath)
Definition gMaterial.h:74
void unbindDiffuseMap() const
Definition gMaterial.h:62
void bindMetalnessMap(int slotNo=5) const
Definition gMaterial.h:109
void unbindMetalnessMap() const
Definition gMaterial.h:110
void setAOMap(gTexture *map)
Definition gMaterial.h:123
void setDiffuseColor(int r, int g, int b, int a=255)
void setDiffuseColor(gColor *color)
void bindMap(gTexture::TextureType type) const
void bindNormalMap() const
Definition gMaterial.h:77
gColor * getDiffuseColor()
void setPbrNormalMap(gTexture *pbrNormalMap)
Definition gMaterial.h:115
gTexture * getPbrNormalMap()
Definition gMaterial.h:116
void setAlbedoMap(gTexture *albedoMap)
Definition gMaterial.h:91
bool isAlbedoMapEnabled() const
Definition gMaterial.h:96
gTexture * getAOMap()
Definition gMaterial.h:124
gMaterial & operator=(const gMaterial &other)
void setMap(gTexture::TextureType type, gTexture *texture)
void unbindHeightMap() const
Definition gMaterial.h:86
bool isHeightMapEnabled() const
Definition gMaterial.h:88
void setMetalnessMap(gTexture *metalnessMap)
Definition gMaterial.h:107
void setMapEnabled(gTexture::TextureType type, bool enabled)
void setShininess(float shininess)
bool isNormalMapEnabled() const
Definition gMaterial.h:80
void setSpecularMap(gTexture *specularMap)
Definition gMaterial.h:67
gTexture * getNormalMap()
Definition gMaterial.h:76
void setHeightMap(gTexture *heightMap)
Definition gMaterial.h:83
void setNormalMapEnabled(bool enabled)
Definition gMaterial.h:79
void loadAlbedoMap(const std::string &texturePath)
Definition gMaterial.h:90
void setAmbientColor(int r, int g, int b, int a=255)
void unbindSpecularMap() const
Definition gMaterial.h:70
gColor * getSpecularColor()
void setHeightMapEnabled(bool enabled)
Definition gMaterial.h:87
void setDiffuseMapEnabled(bool enabled)
Definition gMaterial.h:63
void setSpecularMapEnabled(bool enabled)
Definition gMaterial.h:71
gTexture * getDiffuseMap()
Definition gMaterial.h:60
void loadDiffuseMap(const std::string &texturePath)
Definition gMaterial.h:58
void setAOMapEnabled(bool enabled)
Definition gMaterial.h:127
bool isDiffuseMapEnabled() const
Definition gMaterial.h:64
void setAlbedoMapEnabled(bool enabled)
Definition gMaterial.h:95
void unbindNormalMap() const
Definition gMaterial.h:78
void setPbrNormalMapEnabled(bool enabled)
Definition gMaterial.h:119
gMaterial(const gMaterial &other)
void bindDiffuseMap() const
Definition gMaterial.h:61
void setDiffuseColor(float r, float g, float b, float a=1.0f)
void setSpecularColor(gColor *color)
void bindPbrNormalMap(int slotNo=4) const
Definition gMaterial.h:117
gTexture * getSpecularMap()
Definition gMaterial.h:68
bool isRoughnessMapEnabled() const
Definition gMaterial.h:104
Definition gRenderObject.h:25
Definition gTexture.h:17
TextureType
Definition gTexture.h:19
@ TEXTURETYPE_PBR_AO
Definition gTexture.h:28
@ TEXTURETYPE_HEIGHT
Definition gTexture.h:23
@ TEXTURETYPE_NORMAL
Definition gTexture.h:22
@ TEXTURETYPE_PBR_ALBEDO
Definition gTexture.h:24
@ TEXTURETYPE_PBR_METALNESS
Definition gTexture.h:26
@ TEXTURETYPE_DIFFUSE
Definition gTexture.h:20
@ TEXTURETYPE_PBR_ROUGHNESS
Definition gTexture.h:25
@ TEXTURETYPE_PBR_NORMAL
Definition gTexture.h:27
@ TEXTURETYPE_SPECULAR
Definition gTexture.h:21
float r
Definition gColor.h:22
float a
Definition gColor.h:22
float b
Definition gColor.h:22
float g
Definition gColor.h:22