• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Razakhel / RaZ / 24039719044

06 Apr 2026 03:59PM UTC coverage: 74.512% (-0.03%) from 74.537%
24039719044

push

github

Razakhel
[WIP] Added support for vertex colors

3 of 8 new or added lines in 3 files covered. (37.5%)

8700 of 11676 relevant lines covered (74.51%)

1809.2 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.15
/src/RaZ/Render/Material.cpp
1
#include "RaZ/Data/Color.hpp"
2
#include "RaZ/Render/Material.hpp"
3
#include "RaZ/Render/Renderer.hpp"
4

5
#include "tracy/Tracy.hpp"
6

7
namespace Raz {
8

9
namespace {
10

11
constexpr std::string_view vertShaderSource = {
12
#include "common.vert.embed"
13
};
14

15
constexpr std::string_view cookTorranceShaderSource = {
16
#include "cook-torrance.frag.embed"
17
};
18

19
constexpr std::string_view blinnPhongShaderSource = {
20
#include "blinn-phong.frag.embed"
21
};
22

23
constexpr std::string_view vertexColorShaderSource = {
24
#include "vertex_colors.frag.embed"
25
};
26

27
constexpr std::string_view singleTexture2DShaderSource = {
28
#include "single_texture_2d.frag.embed"
29
};
30

31
constexpr std::string_view singleTexture3DShaderSource = {
32
#include "single_texture_3d.frag.embed"
33
};
34

35
} // namespace
36

37
void Material::loadType(MaterialType type) {
29✔
38
  ZoneScopedN("Material::loadType");
39

40
  switch (type) {
29✔
41
    case MaterialType::COOK_TORRANCE:
19✔
42
      m_program.setShaders(VertexShader::loadFromSource(vertShaderSource), FragmentShader::loadFromSource(cookTorranceShaderSource));
19✔
43

44
      if (!m_program.hasAttribute(MaterialAttribute::BaseColor))
57✔
45
        m_program.setAttribute(Vec3f(1.f), MaterialAttribute::BaseColor);
33✔
46
      if (!m_program.hasAttribute(MaterialAttribute::Emissive))
57✔
47
        m_program.setAttribute(Vec3f(0.f), MaterialAttribute::Emissive);
36✔
48
      if (!m_program.hasAttribute(MaterialAttribute::Metallic))
57✔
49
        m_program.setAttribute(0.f, MaterialAttribute::Metallic);
36✔
50
      if (!m_program.hasAttribute(MaterialAttribute::Roughness))
57✔
51
        m_program.setAttribute(1.f, MaterialAttribute::Roughness);
36✔
52
      if (!m_program.hasAttribute(MaterialAttribute::Sheen))
57✔
53
        m_program.setAttribute(Vec4f(0.f), MaterialAttribute::Sheen);
48✔
54

55
      if (!m_program.hasTexture(MaterialTexture::BaseColor))
57✔
56
        m_program.setTexture(Texture2D::create(ColorPreset::White), MaterialTexture::BaseColor);
39✔
57
      if (!m_program.hasTexture(MaterialTexture::Emissive))
57✔
58
        m_program.setTexture(Texture2D::create(ColorPreset::White), MaterialTexture::Emissive);
45✔
59
      if (!m_program.hasTexture(MaterialTexture::Normal))
57✔
60
        m_program.setTexture(Texture2D::create(ColorPreset::MediumBlue), MaterialTexture::Normal); // Representing a [ 0; 0; 1 ] vector
45✔
61
      if (!m_program.hasTexture(MaterialTexture::Metallic))
57✔
62
        m_program.setTexture(Texture2D::create(ColorPreset::Red), MaterialTexture::Metallic);
45✔
63
      if (!m_program.hasTexture(MaterialTexture::Roughness))
57✔
64
        m_program.setTexture(Texture2D::create(ColorPreset::Red), MaterialTexture::Roughness);
45✔
65
      if (!m_program.hasTexture(MaterialTexture::Ambient))
57✔
66
        m_program.setTexture(Texture2D::create(ColorPreset::Red), MaterialTexture::Ambient);
45✔
67
      if (!m_program.hasTexture(MaterialTexture::Sheen))
57✔
68
        m_program.setTexture(Texture2D::create(ColorPreset::White), MaterialTexture::Sheen); // TODO: should be an RGBA texture with an alpha of 1
48✔
69

70
      break;
19✔
71

72
    case MaterialType::BLINN_PHONG:
8✔
73
      m_program.setShaders(VertexShader::loadFromSource(vertShaderSource), FragmentShader::loadFromSource(blinnPhongShaderSource));
8✔
74

75
      if (!m_program.hasAttribute(MaterialAttribute::BaseColor))
24✔
76
        m_program.setAttribute(Vec3f(1.f), MaterialAttribute::BaseColor);
15✔
77
      if (!m_program.hasAttribute(MaterialAttribute::Emissive))
24✔
78
        m_program.setAttribute(Vec3f(0.f), MaterialAttribute::Emissive);
15✔
79
      if (!m_program.hasAttribute(MaterialAttribute::Ambient))
24✔
80
        m_program.setAttribute(Vec3f(1.f), MaterialAttribute::Ambient);
15✔
81
      if (!m_program.hasAttribute(MaterialAttribute::Specular))
24✔
82
        m_program.setAttribute(Vec3f(1.f), MaterialAttribute::Specular);
15✔
83
      if (!m_program.hasAttribute(MaterialAttribute::Opacity))
24✔
84
        m_program.setAttribute(1.f, MaterialAttribute::Opacity);
15✔
85

86
      if (!m_program.hasTexture(MaterialTexture::BaseColor))
24✔
87
        m_program.setTexture(Texture2D::create(ColorPreset::White), MaterialTexture::BaseColor);
15✔
88
      if (!m_program.hasTexture(MaterialTexture::Emissive))
32✔
89
        m_program.setTexture(Texture2D::create(ColorPreset::White), MaterialTexture::Emissive);
15✔
90
      if (!m_program.hasTexture(MaterialTexture::Ambient))
24✔
91
        m_program.setTexture(Texture2D::create(ColorPreset::White), MaterialTexture::Ambient);
15✔
92
      if (!m_program.hasTexture(MaterialTexture::Specular))
24✔
93
        m_program.setTexture(Texture2D::create(ColorPreset::White), MaterialTexture::Specular);
15✔
94
      if (!m_program.hasTexture(MaterialTexture::Opacity)) {
24✔
95
        Texture2DPtr opacityMap = Texture2D::create(ColorPreset::White);
5✔
96
        opacityMap->setFilter(TextureFilter::NEAREST, TextureFilter::NEAREST, TextureFilter::NEAREST);
5✔
97
        m_program.setTexture(std::move(opacityMap), MaterialTexture::Opacity);
10✔
98
      }
5✔
99
      if (!m_program.hasTexture(MaterialTexture::Bump))
24✔
100
        m_program.setTexture(Texture2D::create(ColorPreset::White), MaterialTexture::Bump);
15✔
101

102
      break;
8✔
103

NEW
104
    case MaterialType::VERTEX_COLORS:
×
NEW
105
      m_program.setShaders(VertexShader::loadFromSource(vertShaderSource), FragmentShader::loadFromSource(vertexColorShaderSource));
×
NEW
106
      break;
×
107

108
    case MaterialType::SINGLE_TEXTURE_2D:
1✔
109
      m_program.setShaders(VertexShader::loadFromSource(vertShaderSource), FragmentShader::loadFromSource(singleTexture2DShaderSource));
1✔
110

111
      if (!m_program.hasTexture(MaterialTexture::BaseColor))
3✔
112
        m_program.setTexture(Texture2D::create(ColorPreset::White), MaterialTexture::BaseColor);
3✔
113

114
      break;
1✔
115

116
    case MaterialType::SINGLE_TEXTURE_3D:
1✔
117
      m_program.setShaders(VertexShader::loadFromSource(vertShaderSource), FragmentShader::loadFromSource(singleTexture3DShaderSource));
1✔
118

119
      if (!m_program.hasTexture(MaterialTexture::BaseColor))
3✔
120
        m_program.setTexture(Texture3D::create(ColorPreset::White), MaterialTexture::BaseColor);
3✔
121

122
      break;
1✔
123

124
    default:
×
125
      throw std::invalid_argument("Error: Unsupported material type");
×
126
  }
127
}
29✔
128

129
} // namespace Raz
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc