Skip to content

[#124]: Use tinygltf instead of assimp#125

Merged
JacobDomagala merged 13 commits intomasterfrom
124-consider-dropping-assimp-for-tinygltf
Mar 1, 2026
Merged

[#124]: Use tinygltf instead of assimp#125
JacobDomagala merged 13 commits intomasterfrom
124-consider-dropping-assimp-for-tinygltf

Conversation

@JacobDomagala
Copy link
Copy Markdown
Owner

Fixes #124

@JacobDomagala JacobDomagala self-assigned this May 21, 2025
@JacobDomagala JacobDomagala linked an issue May 21, 2025 that may be closed by this pull request
@github-actions
Copy link
Copy Markdown

github-actions bot commented May 21, 2025

✅ WINDOWS COMPILE RESULT - SUCCESS! ✅

@JacobDomagala JacobDomagala force-pushed the 124-consider-dropping-assimp-for-tinygltf branch 6 times, most recently from a11fd78 to cb6576e Compare May 21, 2025 13:17
@github-actions
Copy link
Copy Markdown

github-actions bot commented May 21, 2025

✅ UBUNTU COMPILE RESULT - SUCCESS! ✅

@JacobDomagala JacobDomagala force-pushed the 124-consider-dropping-assimp-for-tinygltf branch from cb6576e to 60844c5 Compare May 21, 2025 13:38
@github-actions
Copy link
Copy Markdown

github-actions bot commented May 21, 2025

⚡ Static analysis result ⚡

🔴 cppcheck found 10 issues! Click here to see details.

CopyDataWithStaging(void* data, size_t dataSize);
static void
CopyDataToImageWithStaging(VkImage image, void* data, size_t dataSize,
const std::vector< VkBufferImageCopy >& copyRegions);

!Line: 40 - style: inconclusive: Technically the member function 'shady::render::Buffer::CopyDataWithStaging' can be const. [functionConst]

!Line: 36 - note: Technically the member function 'shady::render::Buffer::CopyDataWithStaging' can be const.
!Line: 40 - note: Technically the member function 'shady::render::Buffer::CopyDataWithStaging' can be const.

Buffer::CopyDataWithStaging(void* data, size_t dataSize)
{
VkBuffer stagingBuffer{};
VkDeviceMemory stagingBufferMemory{};
Buffer::CreateBuffer(dataSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,

!Line: 36 - style: Parameter 'data' can be declared as pointer to const [constParameterPointer]

Buffer::CopyDataToImageWithStaging(VkImage image, void* data, size_t dataSize,
const std::vector< VkBufferImageCopy >& copyRegions)
{
VkBuffer stagingBuffer{};
VkDeviceMemory stagingBufferMemory{};
Buffer::CreateBuffer(dataSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT,

!Line: 53 - style: Parameter 'data' can be declared as pointer to const [constParameterPointer]

TransitionImageLayout(VkImageLayout oldLayout, VkImageLayout newLayout, uint32_t mipLevels);
void
CopyBufferToImage(uint8_t* data);
private:

!Line: 64 - style: inconclusive: Technically the member function 'shady::render::Texture::TransitionImageLayout' can be const. [functionConst]

!Line: 382 - note: Technically the member function 'shady::render::Texture::TransitionImageLayout' can be const.
!Line: 64 - note: Technically the member function 'shady::render::Texture::TransitionImageLayout' can be const.

CopyBufferToImage(uint8_t* data);
private:
TextureType m_type = {};
VkImage m_textureImage = {};
VkDeviceMemory m_textureImageMemory = {};

!Line: 67 - style: inconclusive: Technically the member function 'shady::render::Texture::CopyBufferToImage' can be const. [functionConst]

!Line: 326 - note: Technically the member function 'shady::render::Texture::CopyBufferToImage' can be const.
!Line: 67 - note: Technically the member function 'shady::render::Texture::CopyBufferToImage' can be const.

GetName() const;
private:
void
TransitionImageLayout(VkImageLayout oldLayout, VkImageLayout newLayout, uint32_t mipLevels);

!Line: 60 - performance: Function 'GetName()' should return member 'm_name' by const reference. [returnByReference]

Shady/src/scene/mesh.hpp

Lines 22 to 27 in 8ea4c20

Submit();
void
Draw(const std::string& modelName, const glm::mat4& modelMat, const glm::vec4& tintColor);
void

!Line: 22 - style: inconclusive: Technically the member function 'shady::scene::Mesh::Submit' can be const. [functionConst]

!Line: 24 - note: Technically the member function 'shady::scene::Mesh::Submit' can be const.
!Line: 22 - note: Technically the member function 'shady::scene::Mesh::Submit' can be const.

Shady/src/scene/mesh.hpp

Lines 25 to 30 in 8ea4c20

Draw(const std::string& modelName, const glm::mat4& modelMat, const glm::vec4& tintColor);
void
Scale(const glm::vec3& scale);
void

!Line: 25 - style: inconclusive: Technically the member function 'shady::scene::Mesh::Draw' can be const. [functionConst]

!Line: 30 - note: Technically the member function 'shady::scene::Mesh::Draw' can be const.
!Line: 25 - note: Technically the member function 'shady::scene::Mesh::Draw' can be const.

Model::LoadModel(const std::string& file)
{
tinygltf::Model model;
tinygltf::TinyGLTF loader;
std::string err, warn;

!Line: 56 - style: inconclusive: Function 'LoadModel' argument 1 names different: declaration 'path' definition 'file'. [funcArgNamesDifferent]

!Line: 54 - note: Function 'LoadModel' argument 1 names different: declaration 'path' definition 'file'.
!Line: 56 - note: Function 'LoadModel' argument 1 names different: declaration 'path' definition 'file'.

UpdateBuffers(const scene::Camera* camera);
private:
void
CreatePipeline();

!Line: 45 - style: inconclusive: Technically the member function 'shady::scene::Skybox::UpdateBuffers' can be const. [functionConst]

!Line: 122 - note: Technically the member function 'shady::scene::Skybox::UpdateBuffers' can be const.
!Line: 45 - note: Technically the member function 'shady::scene::Skybox::UpdateBuffers' can be const.

🔴 clang-tidy found 186 issues! Click here to see details.

#include "trace/logger.hpp"
#include <glm/gtc/matrix_transform.hpp>
namespace shady::scene {

!Line: 2 - error: included header logger.hpp is not used directly [misc-include-cleaner,-warnings-as-errors]

#include <glm/gtc/matrix_transform.hpp>
namespace shady::scene {
Light::Light(const glm::vec3& position, const glm::vec3& color, LightType type)
: position_(position), color_(color)

!Line: 4 - error: included header matrix_transform.hpp is not used directly [misc-include-cleaner,-warnings-as-errors]

Light::Light(const glm::vec3& position, const glm::vec3& color, LightType type)
: position_(position), color_(color)
{
// auto buffer_type = render::FrameBufferType::SINGLE;
switch (type)
{

!Line: 8 - error: no header providing "glm::vec3" is directly included [misc-include-cleaner,-warnings-as-errors]

projectionMatrix_ = glm::ortho(-200.0f, 200.0f, -200.0f, 200.0f, 1.0f, 500.0f);
// projectionMatrix_ = glm::perspective(70.0f, 16.0f / 9.0f, 0.1f, 500.0f);
}
break;
case LightType::POINT_LIGHT:

!Line: 15 - error: no header providing "glm::ortho" is directly included [misc-include-cleaner,-warnings-as-errors]

projectionMatrix_ = glm::ortho(-200.0f, 200.0f, -200.0f, 200.0f, 1.0f, 500.0f);
// projectionMatrix_ = glm::perspective(70.0f, 16.0f / 9.0f, 0.1f, 500.0f);
}
break;
case LightType::POINT_LIGHT:

!Line: 15 - error: 200.0f is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

projectionMatrix_ = glm::ortho(-200.0f, 200.0f, -200.0f, 200.0f, 1.0f, 500.0f);
// projectionMatrix_ = glm::perspective(70.0f, 16.0f / 9.0f, 0.1f, 500.0f);
}
break;
case LightType::POINT_LIGHT:

!Line: 15 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

projectionMatrix_ = glm::ortho(-200.0f, 200.0f, -200.0f, 200.0f, 1.0f, 500.0f);
// projectionMatrix_ = glm::perspective(70.0f, 16.0f / 9.0f, 0.1f, 500.0f);
}
break;
case LightType::POINT_LIGHT:

!Line: 15 - error: 500.0f is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

projectionMatrix_ = glm::perspective(60.0f, 1.0f, 0.1f, 100.0f);
// buffer_type = render::FrameBufferType::CUBE;
}
break;
}

!Line: 22 - error: no header providing "glm::perspective" is directly included [misc-include-cleaner,-warnings-as-errors]

projectionMatrix_ = glm::perspective(60.0f, 1.0f, 0.1f, 100.0f);
// buffer_type = render::FrameBufferType::CUBE;
}
break;
}

!Line: 22 - error: 60.0f is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

projectionMatrix_ = glm::perspective(60.0f, 1.0f, 0.1f, 100.0f);
// buffer_type = render::FrameBufferType::CUBE;
}
break;
}

!Line: 22 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

projectionMatrix_ = glm::perspective(60.0f, 1.0f, 0.1f, 100.0f);
// buffer_type = render::FrameBufferType::CUBE;
}
break;
}

!Line: 22 - error: 0.1f is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

biasMatrix_ = glm::translate(glm::mat4(1.0f), glm::vec3(0.5f))
* glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
lookAt_ = glm::vec3(0.0f, -1.0f, 0.0f);
upVec_ = glm::vec3(0.0f, 0.0f, 0.5f);
// m_shadowBuffer->MakeTextureResident();

!Line: 30 - error: no header providing "glm::translate" is directly included [misc-include-cleaner,-warnings-as-errors]

biasMatrix_ = glm::translate(glm::mat4(1.0f), glm::vec3(0.5f))
* glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
lookAt_ = glm::vec3(0.0f, -1.0f, 0.0f);
upVec_ = glm::vec3(0.0f, 0.0f, 0.5f);
// m_shadowBuffer->MakeTextureResident();

!Line: 30 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

biasMatrix_ = glm::translate(glm::mat4(1.0f), glm::vec3(0.5f))
* glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
lookAt_ = glm::vec3(0.0f, -1.0f, 0.0f);
upVec_ = glm::vec3(0.0f, 0.0f, 0.5f);
// m_shadowBuffer->MakeTextureResident();

!Line: 30 - error: 0.5f is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

* glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
lookAt_ = glm::vec3(0.0f, -1.0f, 0.0f);
upVec_ = glm::vec3(0.0f, 0.0f, 0.5f);
// m_shadowBuffer->MakeTextureResident();
UpdateViewProjection();

!Line: 31 - error: no header providing "glm::scale" is directly included [misc-include-cleaner,-warnings-as-errors]

* glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
lookAt_ = glm::vec3(0.0f, -1.0f, 0.0f);
upVec_ = glm::vec3(0.0f, 0.0f, 0.5f);
// m_shadowBuffer->MakeTextureResident();
UpdateViewProjection();

!Line: 31 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

* glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
lookAt_ = glm::vec3(0.0f, -1.0f, 0.0f);
upVec_ = glm::vec3(0.0f, 0.0f, 0.5f);
// m_shadowBuffer->MakeTextureResident();
UpdateViewProjection();

!Line: 31 - error: 0.5f is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

lookAt_ = glm::vec3(0.0f, -1.0f, 0.0f);
upVec_ = glm::vec3(0.0f, 0.0f, 0.5f);
// m_shadowBuffer->MakeTextureResident();
UpdateViewProjection();
}

!Line: 32 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

upVec_ = glm::vec3(0.0f, 0.0f, 0.5f);
// m_shadowBuffer->MakeTextureResident();
UpdateViewProjection();
}

!Line: 33 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

upVec_ = glm::vec3(0.0f, 0.0f, 0.5f);
// m_shadowBuffer->MakeTextureResident();
UpdateViewProjection();
}

!Line: 33 - error: 0.5f is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

glm::tvec2< uint32_t >
Light::GetLightmapSize() const
{
return {shadowTextureWidth_, shadowTextureHeight_};
}

!Line: 75 - error: no header providing "glm::tvec2" is directly included [misc-include-cleaner,-warnings-as-errors]

glm::tvec2< uint32_t >
Light::GetLightmapSize() const
{
return {shadowTextureWidth_, shadowTextureHeight_};
}

!Line: 75 - error: no header providing "uint32_t" is directly included [misc-include-cleaner,-warnings-as-errors]

viewMatrix_ = glm::lookAt(position_, lookAt_, upVec_);
lightSpaceMatrix_ = projectionMatrix_ * viewMatrix_;
shadowMatrix_ = biasMatrix_ * lightSpaceMatrix_;
}
} // namespace shady::scene

!Line: 93 - error: no header providing "glm::lookAt" is directly included [misc-include-cleaner,-warnings-as-errors]

#include "scene/perspective_camera.hpp"
#include "shader.hpp"
#include "texture.hpp"
#include "vertex.hpp"
#include <algorithm>

!Line: 4 - error: included header perspective_camera.hpp is not used directly [misc-include-cleaner,-warnings-as-errors]

#include <fmt/format.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
namespace shady::render {

!Line: 11 - error: included header format.h is not used directly [misc-include-cleaner,-warnings-as-errors]

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
namespace shady::render {

!Line: 12 - error: included header glm.hpp is not used directly [misc-include-cleaner,-warnings-as-errors]

#include <glm/gtc/matrix_transform.hpp>
namespace shady::render {
float timer = 0.0f;

!Line: 13 - error: included header matrix_transform.hpp is not used directly [misc-include-cleaner,-warnings-as-errors]

float timer = 0.0f;
// Depth bias (and slope) are used to avoid shadowing artifacts
constexpr float depthBiasConstant = 1.25f;
constexpr float depthBiasSlope = 1.75f;
struct Light

!Line: 18 - error: variable 'timer' is non-const and globally accessible, consider making it const [cppcoreguidelines-avoid-non-const-global-variables,-warnings-as-errors]

float timer = 0.0f;
// Depth bias (and slope) are used to avoid shadowing artifacts
constexpr float depthBiasConstant = 1.25f;
constexpr float depthBiasSlope = 1.75f;
struct Light

!Line: 18 - error: variable 'timer' can be made static or moved into an anonymous namespace to enforce internal linkage [misc-use-internal-linkage,-warnings-as-errors]

float timer = 0.0f;
// Depth bias (and slope) are used to avoid shadowing artifacts
constexpr float depthBiasConstant = 1.25f;
constexpr float depthBiasSlope = 1.75f;
struct Light

!Line: 18 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

constexpr float depthBiasConstant = 1.25f;
constexpr float depthBiasSlope = 1.75f;
struct Light
{
glm::vec4 position = {};

!Line: 20 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

constexpr float depthBiasSlope = 1.75f;
struct Light
{
glm::vec4 position = {};
glm::vec4 target = {};

!Line: 21 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

glm::vec4 position = {};
glm::vec4 target = {};
glm::vec4 color = {};
glm::mat4 viewMatrix = {};
};

!Line: 25 - error: no header providing "glm::vec4" is directly included [misc-include-cleaner,-warnings-as-errors]

glm::mat4 viewMatrix = {};
};
struct UboOffscreenVS
{
glm::mat4 projection = {};

!Line: 28 - error: no header providing "glm::mat4" is directly included [misc-include-cleaner,-warnings-as-errors]

DebugData debugData = {};
};
VkDescriptorSet&
DeferredPipeline::GetDescriptorSet()
{

!Line: 42 - error: no header providing "shady::render::DebugData" is directly included [misc-include-cleaner,-warnings-as-errors]

VkDescriptorSet&
DeferredPipeline::GetDescriptorSet()
{
return m_descriptorSet;
}

!Line: 45 - error: no header providing "VkDescriptorSet" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipeline
DeferredPipeline::GetCompositionPipeline()
{
return m_compositionPipeline;
}

!Line: 51 - error: no header providing "VkPipeline" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipelineLayout
DeferredPipeline::GetPipelineLayout()
{
return m_pipelineLayout;
}

!Line: 57 - error: no header providing "VkPipelineLayout" is directly included [misc-include-cleaner,-warnings-as-errors]

VkSemaphore&
DeferredPipeline::GetOffscreenSemaphore()
{
return m_offscreenSemaphore;
}

!Line: 63 - error: no header providing "VkSemaphore" is directly included [misc-include-cleaner,-warnings-as-errors]

uboOffscreenVS.model = glm::mat4(1.0f);
m_offscreenBuffer.CopyData(&uboOffscreenVS);
m_skybox.UpdateBuffers(camera);
}

!Line: 76 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

VkCommandBuffer&
DeferredPipeline::GetOffscreenCmdBuffer()
{
return m_offscreenCommandBuffer;
}

!Line: 82 - error: no header providing "VkCommandBuffer" is directly included [misc-include-cleaner,-warnings-as-errors]

uboComposition.light.position = glm::vec4(camera->GetPosition(), 1.0f);
uboComposition.light.target = glm::vec4(light->GetLookAt(), 1.0);
uboComposition.light.color = glm::vec4{light->GetColor(), 1.0f};
uboComposition.light.viewMatrix = light->GetLightSpaceMat();
uboComposition.viewPos = glm::vec4(camera->GetPosition(), 0.0f);
uboComposition.debugData = Data::m_debugData;

!Line: 94 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

uboComposition.light.color = glm::vec4{light->GetColor(), 1.0f};
uboComposition.light.viewMatrix = light->GetLightSpaceMat();
uboComposition.viewPos = glm::vec4(camera->GetPosition(), 0.0f);
uboComposition.debugData = Data::m_debugData;
memcpy(m_compositionBuffer.GetMappedMemory(), &uboComposition, sizeof(uboComposition));

!Line: 96 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

uboComposition.viewPos = glm::vec4(camera->GetPosition(), 0.0f);
uboComposition.debugData = Data::m_debugData;
memcpy(m_compositionBuffer.GetMappedMemory(), &uboComposition, sizeof(uboComposition));
}

!Line: 98 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

memcpy(m_compositionBuffer.GetMappedMemory(), &uboComposition, sizeof(uboComposition));
}
void
DeferredPipeline::Initialize(VkRenderPass mainRenderPass,
const std::vector< VkImageView >& swapChainImageViews,

!Line: 101 - error: no header providing "memcpy" is directly included [misc-include-cleaner,-warnings-as-errors]

DeferredPipeline::Initialize(VkRenderPass mainRenderPass,
const std::vector< VkImageView >& swapChainImageViews,
VkPipelineCache pipelineCache)
{
m_pipelineCache = pipelineCache;
m_mainRenderPass = mainRenderPass;

!Line: 105 - error: no header providing "VkRenderPass" is directly included [misc-include-cleaner,-warnings-as-errors]

const std::vector< VkImageView >& swapChainImageViews,
VkPipelineCache pipelineCache)
{
m_pipelineCache = pipelineCache;
m_mainRenderPass = mainRenderPass;
ShadowSetup();

!Line: 106 - error: no header providing "std::vector" is directly included [misc-include-cleaner,-warnings-as-errors]

const std::vector< VkImageView >& swapChainImageViews,
VkPipelineCache pipelineCache)
{
m_pipelineCache = pipelineCache;
m_mainRenderPass = mainRenderPass;
ShadowSetup();

!Line: 106 - error: no header providing "VkImageView" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipelineCache pipelineCache)
{
m_pipelineCache = pipelineCache;
m_mainRenderPass = mainRenderPass;
ShadowSetup();
PrepareOffscreenFramebuffer();

!Line: 107 - error: no header providing "VkPipelineCache" is directly included [misc-include-cleaner,-warnings-as-errors]

m_shadowMap.CreateShadowMap(4096, 4096, 1);
}
void
DeferredPipeline::PrepareOffscreenFramebuffer()
{

!Line: 130 - error: 4096 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

m_offscreenFrameBuffer.Create(2048, 2048);
Data::m_deferredRenderPass = m_offscreenFrameBuffer.GetRenderPass();
Data::m_deferredExtent = {2048, 2048};
}
void

!Line: 136 - error: 2048 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

Data::m_deferredExtent = {2048, 2048};
}
void
DeferredPipeline::PrepareUniformBuffers()
{

!Line: 138 - error: use designated initializer list to initialize 'VkExtent2D' [modernize-use-designated-initializers,-warnings-as-errors]

!Line: 3068 - note: aggregate type is defined here

Data::m_deferredExtent = {2048, 2048};
}
void
DeferredPipeline::PrepareUniformBuffers()
{

!Line: 138 - error: 2048 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

sizeof(UboOffscreenVS), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
// Deferred fragment shader
m_compositionBuffer = Buffer::CreateBuffer(
sizeof(UboComposition), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,

!Line: 146 - error: no header providing "VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
// Deferred fragment shader
m_compositionBuffer = Buffer::CreateBuffer(
sizeof(UboComposition), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);

!Line: 147 - error: no header providing "VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
// Deferred fragment shader
m_compositionBuffer = Buffer::CreateBuffer(
sizeof(UboComposition), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);

!Line: 147 - error: no header providing "VK_MEMORY_PROPERTY_HOST_COHERENT_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

VkDescriptorSetLayoutBinding vertexShaderUniform{};
vertexShaderUniform.binding = 0;
vertexShaderUniform.descriptorCount = 1;
vertexShaderUniform.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
vertexShaderUniform.pImmutableSamplers = nullptr;
vertexShaderUniform.stageFlags = VK_SHADER_STAGE_VERTEX_BIT /*| VK_SHADER_STAGE_GEOMETRY_BIT*/;

!Line: 163 - error: no header providing "VkDescriptorSetLayoutBinding" is directly included [misc-include-cleaner,-warnings-as-errors]

vertexShaderUniform.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
vertexShaderUniform.pImmutableSamplers = nullptr;
vertexShaderUniform.stageFlags = VK_SHADER_STAGE_VERTEX_BIT /*| VK_SHADER_STAGE_GEOMETRY_BIT*/;
// Binding 1 : Per object buffer (mrt.vert)
VkDescriptorSetLayoutBinding perInstanceBinding{};

!Line: 166 - error: no header providing "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER" is directly included [misc-include-cleaner,-warnings-as-errors]

vertexShaderUniform.stageFlags = VK_SHADER_STAGE_VERTEX_BIT /*| VK_SHADER_STAGE_GEOMETRY_BIT*/;
// Binding 1 : Per object buffer (mrt.vert)
VkDescriptorSetLayoutBinding perInstanceBinding{};
perInstanceBinding.binding = 1;
perInstanceBinding.descriptorCount = 1;

!Line: 168 - error: no header providing "VK_SHADER_STAGE_VERTEX_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

perInstanceBinding.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
perInstanceBinding.pImmutableSamplers = nullptr;
perInstanceBinding.stageFlags = VK_SHADER_STAGE_VERTEX_BIT;
// Binding 2 : Texture sampler (mrt.frag)
VkDescriptorSetLayoutBinding sampler{};

!Line: 174 - error: no header providing "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER" is directly included [misc-include-cleaner,-warnings-as-errors]

sampler.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER;
sampler.pImmutableSamplers = nullptr;
sampler.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
// Binding 3 : Texture sampler (mrt.frag)
VkDescriptorSetLayoutBinding textures{};

!Line: 182 - error: no header providing "VK_DESCRIPTOR_TYPE_SAMPLER" is directly included [misc-include-cleaner,-warnings-as-errors]

sampler.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
// Binding 3 : Texture sampler (mrt.frag)
VkDescriptorSetLayoutBinding textures{};
textures.binding = 3;
textures.descriptorCount = static_cast< uint32_t >(Data::textures.size());

!Line: 184 - error: no header providing "VK_SHADER_STAGE_FRAGMENT_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

textures.descriptorCount = static_cast< uint32_t >(Data::textures.size());
textures.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE;
textures.pImmutableSamplers = nullptr;
textures.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
// Binding 4 : Sampler Albedo (deferred.frag)

!Line: 189 - error: no header providing "uint32_t" is directly included [misc-include-cleaner,-warnings-as-errors]

textures.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE;
textures.pImmutableSamplers = nullptr;
textures.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
// Binding 4 : Sampler Albedo (deferred.frag)
VkDescriptorSetLayoutBinding albedoTexture{};

!Line: 190 - error: no header providing "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE" is directly included [misc-include-cleaner,-warnings-as-errors]

albedoTexture.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
albedoTexture.pImmutableSamplers = nullptr;
albedoTexture.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
// Binding 5 : Sampler Position (deferred.frag)
VkDescriptorSetLayoutBinding positionsTexture{};

!Line: 198 - error: no header providing "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER" is directly included [misc-include-cleaner,-warnings-as-errors]

positionsTexture.binding = 5;
positionsTexture.descriptorCount = 1;
positionsTexture.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
positionsTexture.pImmutableSamplers = nullptr;
positionsTexture.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;

!Line: 204 - error: 5 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

normalsTexture.binding = 6;
normalsTexture.descriptorCount = 1;
normalsTexture.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
normalsTexture.pImmutableSamplers = nullptr;
normalsTexture.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;

!Line: 212 - error: 6 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

fragmentShaderUniform.binding = 7;
fragmentShaderUniform.descriptorCount = 1;
fragmentShaderUniform.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
fragmentShaderUniform.pImmutableSamplers = nullptr;
fragmentShaderUniform.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;

!Line: 220 - error: 7 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

shadowmapTexture.binding = 8;
shadowmapTexture.descriptorCount = 1;
shadowmapTexture.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
shadowmapTexture.pImmutableSamplers = nullptr;
shadowmapTexture.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;

!Line: 228 - error: 8 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

std::array< VkDescriptorSetLayoutBinding, 9 > bindings = {
vertexShaderUniform, perInstanceBinding, sampler, textures,
albedoTexture, positionsTexture, normalsTexture, fragmentShaderUniform,
shadowmapTexture};
VkDescriptorSetLayoutCreateInfo layoutInfo{};

!Line: 234 - error: no header providing "std::array" is directly included [misc-include-cleaner,-warnings-as-errors]

std::array< VkDescriptorSetLayoutBinding, 9 > bindings = {
vertexShaderUniform, perInstanceBinding, sampler, textures,
albedoTexture, positionsTexture, normalsTexture, fragmentShaderUniform,
shadowmapTexture};
VkDescriptorSetLayoutCreateInfo layoutInfo{};

!Line: 234 - error: 9 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

VkDescriptorSetLayoutCreateInfo layoutInfo{};
layoutInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
layoutInfo.bindingCount = static_cast< uint32_t >(bindings.size());
layoutInfo.pBindings = bindings.data();
VK_CHECK(

!Line: 239 - error: no header providing "VkDescriptorSetLayoutCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

layoutInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
layoutInfo.bindingCount = static_cast< uint32_t >(bindings.size());
layoutInfo.pBindings = bindings.data();
VK_CHECK(
vkCreateDescriptorSetLayout(Data::vk_device, &layoutInfo, nullptr, &m_descriptorSetLayout),

!Line: 240 - error: no header providing "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCreateDescriptorSetLayout(Data::vk_device, &layoutInfo, nullptr, &m_descriptorSetLayout),
"");
// Shared pipeline layout used by all pipelines
VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo{};
pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;

!Line: 245 - error: no header providing "vkCreateDescriptorSetLayout" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo{};
pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
pipelineLayoutCreateInfo.setLayoutCount = 1;
pipelineLayoutCreateInfo.pSetLayouts = &m_descriptorSetLayout;
VK_CHECK(vkCreatePipelineLayout(Data::vk_device, &pipelineLayoutCreateInfo, nullptr,

!Line: 249 - error: no header providing "VkPipelineLayoutCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
pipelineLayoutCreateInfo.setLayoutCount = 1;
pipelineLayoutCreateInfo.pSetLayouts = &m_descriptorSetLayout;
VK_CHECK(vkCreatePipelineLayout(Data::vk_device, &pipelineLayoutCreateInfo, nullptr,
&m_pipelineLayout),

!Line: 250 - error: no header providing "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

VK_CHECK(vkCreatePipelineLayout(Data::vk_device, &pipelineLayoutCreateInfo, nullptr,
&m_pipelineLayout),
"");
}
void

!Line: 254 - error: no header providing "vkCreatePipelineLayout" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipelineInputAssemblyStateCreateInfo inputAssembly{};
inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
inputAssembly.primitiveRestartEnable = VK_FALSE;
VkPipelineRasterizationStateCreateInfo rasterizer{};

!Line: 262 - error: no header providing "VkPipelineInputAssemblyStateCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
inputAssembly.primitiveRestartEnable = VK_FALSE;
VkPipelineRasterizationStateCreateInfo rasterizer{};
rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;

!Line: 263 - error: no header providing "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
inputAssembly.primitiveRestartEnable = VK_FALSE;
VkPipelineRasterizationStateCreateInfo rasterizer{};
rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
rasterizer.depthClampEnable = VK_FALSE;

!Line: 264 - error: no header providing "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST" is directly included [misc-include-cleaner,-warnings-as-errors]

inputAssembly.primitiveRestartEnable = VK_FALSE;
VkPipelineRasterizationStateCreateInfo rasterizer{};
rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
rasterizer.depthClampEnable = VK_FALSE;
rasterizer.rasterizerDiscardEnable = VK_FALSE;

!Line: 265 - error: no header providing "VK_FALSE" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipelineRasterizationStateCreateInfo rasterizer{};
rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
rasterizer.depthClampEnable = VK_FALSE;
rasterizer.rasterizerDiscardEnable = VK_FALSE;
rasterizer.polygonMode = VK_POLYGON_MODE_FILL;
rasterizer.lineWidth = 1.0f;

!Line: 267 - error: no header providing "VkPipelineRasterizationStateCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
rasterizer.depthClampEnable = VK_FALSE;
rasterizer.rasterizerDiscardEnable = VK_FALSE;
rasterizer.polygonMode = VK_POLYGON_MODE_FILL;
rasterizer.lineWidth = 1.0f;

!Line: 268 - error: no header providing "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

rasterizer.polygonMode = VK_POLYGON_MODE_FILL;
rasterizer.lineWidth = 1.0f;
rasterizer.cullMode = VK_CULL_MODE_BACK_BIT;
rasterizer.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE;
rasterizer.depthBiasEnable = VK_FALSE;

!Line: 271 - error: no header providing "VK_POLYGON_MODE_FILL" is directly included [misc-include-cleaner,-warnings-as-errors]

rasterizer.lineWidth = 1.0f;
rasterizer.cullMode = VK_CULL_MODE_BACK_BIT;
rasterizer.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE;
rasterizer.depthBiasEnable = VK_FALSE;

!Line: 272 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

rasterizer.cullMode = VK_CULL_MODE_BACK_BIT;
rasterizer.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE;
rasterizer.depthBiasEnable = VK_FALSE;
VkPipelineColorBlendAttachmentState colorBlendAttachment{};
colorBlendAttachment.colorWriteMask = 0xf;

!Line: 274 - error: no header providing "VK_CULL_MODE_BACK_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

rasterizer.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE;
rasterizer.depthBiasEnable = VK_FALSE;
VkPipelineColorBlendAttachmentState colorBlendAttachment{};
colorBlendAttachment.colorWriteMask = 0xf;
colorBlendAttachment.blendEnable = VK_FALSE;

!Line: 275 - error: no header providing "VK_FRONT_FACE_COUNTER_CLOCKWISE" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipelineColorBlendAttachmentState colorBlendAttachment{};
colorBlendAttachment.colorWriteMask = 0xf;
colorBlendAttachment.blendEnable = VK_FALSE;
VkPipelineColorBlendStateCreateInfo colorBlending{};
colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;

!Line: 278 - error: no header providing "VkPipelineColorBlendAttachmentState" is directly included [misc-include-cleaner,-warnings-as-errors]

colorBlendAttachment.colorWriteMask = 0xf;
colorBlendAttachment.blendEnable = VK_FALSE;
VkPipelineColorBlendStateCreateInfo colorBlending{};
colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
/*colorBlending.logicOpEnable = VK_FALSE;

!Line: 279 - error: 0xf is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

VkPipelineColorBlendStateCreateInfo colorBlending{};
colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
/*colorBlending.logicOpEnable = VK_FALSE;
colorBlending.logicOp = VK_LOGIC_OP_COPY;*/
colorBlending.attachmentCount = 1;
colorBlending.pAttachments = &colorBlendAttachment;

!Line: 282 - error: no header providing "VkPipelineColorBlendStateCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
/*colorBlending.logicOpEnable = VK_FALSE;
colorBlending.logicOp = VK_LOGIC_OP_COPY;*/
colorBlending.attachmentCount = 1;
colorBlending.pAttachments = &colorBlendAttachment;

!Line: 283 - error: no header providing "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipelineDepthStencilStateCreateInfo depthStencil{};
depthStencil.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
depthStencil.depthTestEnable = VK_TRUE;
depthStencil.depthWriteEnable = VK_TRUE;
depthStencil.depthCompareOp = VK_COMPARE_OP_LESS_OR_EQUAL;

!Line: 289 - error: no header providing "VkPipelineDepthStencilStateCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

depthStencil.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
depthStencil.depthTestEnable = VK_TRUE;
depthStencil.depthWriteEnable = VK_TRUE;
depthStencil.depthCompareOp = VK_COMPARE_OP_LESS_OR_EQUAL;
VkPipelineViewportStateCreateInfo viewportState{};

!Line: 290 - error: no header providing "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

depthStencil.depthTestEnable = VK_TRUE;
depthStencil.depthWriteEnable = VK_TRUE;
depthStencil.depthCompareOp = VK_COMPARE_OP_LESS_OR_EQUAL;
VkPipelineViewportStateCreateInfo viewportState{};
viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;

!Line: 291 - error: no header providing "VK_TRUE" is directly included [misc-include-cleaner,-warnings-as-errors]

depthStencil.depthCompareOp = VK_COMPARE_OP_LESS_OR_EQUAL;
VkPipelineViewportStateCreateInfo viewportState{};
viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
viewportState.viewportCount = 1;
viewportState.scissorCount = 1;

!Line: 293 - error: no header providing "VK_COMPARE_OP_LESS_OR_EQUAL" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipelineViewportStateCreateInfo viewportState{};
viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
viewportState.viewportCount = 1;
viewportState.scissorCount = 1;
VkPipelineMultisampleStateCreateInfo multisampling{};

!Line: 295 - error: no header providing "VkPipelineViewportStateCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
viewportState.viewportCount = 1;
viewportState.scissorCount = 1;
VkPipelineMultisampleStateCreateInfo multisampling{};
multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;

!Line: 296 - error: no header providing "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipelineMultisampleStateCreateInfo multisampling{};
multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT;
std::vector< VkDynamicState > dynamicStateEnables = {VK_DYNAMIC_STATE_VIEWPORT,

!Line: 300 - error: no header providing "VkPipelineMultisampleStateCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT;
std::vector< VkDynamicState > dynamicStateEnables = {VK_DYNAMIC_STATE_VIEWPORT,
VK_DYNAMIC_STATE_SCISSOR};

!Line: 301 - error: no header providing "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT;
std::vector< VkDynamicState > dynamicStateEnables = {VK_DYNAMIC_STATE_VIEWPORT,
VK_DYNAMIC_STATE_SCISSOR};

!Line: 302 - error: no header providing "VK_SAMPLE_COUNT_1_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

std::vector< VkDynamicState > dynamicStateEnables = {VK_DYNAMIC_STATE_VIEWPORT,
VK_DYNAMIC_STATE_SCISSOR};
VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo{};
pipelineDynamicStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
pipelineDynamicStateCreateInfo.pDynamicStates = dynamicStateEnables.data();

!Line: 305 - error: no header providing "VkDynamicState" is directly included [misc-include-cleaner,-warnings-as-errors]

std::vector< VkDynamicState > dynamicStateEnables = {VK_DYNAMIC_STATE_VIEWPORT,
VK_DYNAMIC_STATE_SCISSOR};
VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo{};
pipelineDynamicStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
pipelineDynamicStateCreateInfo.pDynamicStates = dynamicStateEnables.data();

!Line: 305 - error: no header providing "VK_DYNAMIC_STATE_VIEWPORT" is directly included [misc-include-cleaner,-warnings-as-errors]

VK_DYNAMIC_STATE_SCISSOR};
VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo{};
pipelineDynamicStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
pipelineDynamicStateCreateInfo.pDynamicStates = dynamicStateEnables.data();
pipelineDynamicStateCreateInfo.dynamicStateCount =

!Line: 306 - error: no header providing "VK_DYNAMIC_STATE_SCISSOR" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo{};
pipelineDynamicStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
pipelineDynamicStateCreateInfo.pDynamicStates = dynamicStateEnables.data();
pipelineDynamicStateCreateInfo.dynamicStateCount =
static_cast< uint32_t >(dynamicStateEnables.size());
pipelineDynamicStateCreateInfo.flags = 0;

!Line: 308 - error: no header providing "VkPipelineDynamicStateCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

pipelineDynamicStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
pipelineDynamicStateCreateInfo.pDynamicStates = dynamicStateEnables.data();
pipelineDynamicStateCreateInfo.dynamicStateCount =
static_cast< uint32_t >(dynamicStateEnables.size());
pipelineDynamicStateCreateInfo.flags = 0;

!Line: 309 - error: no header providing "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

std::array< VkPipelineShaderStageCreateInfo, 2 > shaderStages{};
auto [vertexInfo, fragmentInfo] = Shader::CreateShader(
Data::vk_device, "default/deferred.vert.spv", "default/deferred.frag.spv");
VkSpecializationMapEntry specializationEntry{};
specializationEntry.constantID = 0;

!Line: 315 - error: no header providing "VkPipelineShaderStageCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

VkSpecializationMapEntry specializationEntry{};
specializationEntry.constantID = 0;
specializationEntry.offset = 0;
specializationEntry.size = sizeof(uint32_t);
uint32_t specializationData = Data::m_msaaSamples;

!Line: 319 - error: no header providing "VkSpecializationMapEntry" is directly included [misc-include-cleaner,-warnings-as-errors]

VkSpecializationInfo specializationInfo;
specializationInfo.mapEntryCount = 1;
specializationInfo.pMapEntries = &specializationEntry;
specializationInfo.dataSize = sizeof(specializationData);
specializationInfo.pData = &specializationData;

!Line: 326 - error: no header providing "VkSpecializationInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

VkGraphicsPipelineCreateInfo pipelineInfo{};
pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
pipelineInfo.stageCount = static_cast< uint32_t >(shaderStages.size());
pipelineInfo.pStages = shaderStages.data();
pipelineInfo.pInputAssemblyState = &inputAssembly;
pipelineInfo.pViewportState = &viewportState;

!Line: 336 - error: no header providing "VkGraphicsPipelineCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
pipelineInfo.stageCount = static_cast< uint32_t >(shaderStages.size());
pipelineInfo.pStages = shaderStages.data();
pipelineInfo.pInputAssemblyState = &inputAssembly;
pipelineInfo.pViewportState = &viewportState;
pipelineInfo.pRasterizationState = &rasterizer;

!Line: 337 - error: no header providing "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

pipelineInfo.basePipelineHandle = VK_NULL_HANDLE;
// Final fullscreen composition pass pipeline
rasterizer.cullMode = VK_CULL_MODE_FRONT_BIT;

!Line: 351 - error: no header providing "VK_NULL_HANDLE" is directly included [misc-include-cleaner,-warnings-as-errors]

rasterizer.cullMode = VK_CULL_MODE_FRONT_BIT;
// Empty vertex input state, vertices are generated by the vertex shader
VkPipelineVertexInputStateCreateInfo emptyInputState{};
emptyInputState.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;

!Line: 354 - error: no header providing "VK_CULL_MODE_FRONT_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

VkPipelineVertexInputStateCreateInfo emptyInputState{};
emptyInputState.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
pipelineInfo.pVertexInputState = &emptyInputState;
VK_CHECK(vkCreateGraphicsPipelines(Data::vk_device, m_pipelineCache, 1, &pipelineInfo, nullptr,
&m_compositionPipeline),

!Line: 358 - error: no header providing "VkPipelineVertexInputStateCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

emptyInputState.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
pipelineInfo.pVertexInputState = &emptyInputState;
VK_CHECK(vkCreateGraphicsPipelines(Data::vk_device, m_pipelineCache, 1, &pipelineInfo, nullptr,
&m_compositionPipeline),
"");

!Line: 359 - error: no header providing "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

VK_CHECK(vkCreateGraphicsPipelines(Data::vk_device, m_pipelineCache, 1, &pipelineInfo, nullptr,
&m_compositionPipeline),
"");
// Vertex input state from glTF model for pipeline rendering models
pipelineInfo.pInputAssemblyState = &inputAssembly;

!Line: 362 - error: no header providing "vkCreateGraphicsPipelines" is directly included [misc-include-cleaner,-warnings-as-errors]

rasterizer.frontFace = VK_FRONT_FACE_CLOCKWISE;
// Offscreen pipeline
std::tie(vertexInfo, fragmentInfo) =
Shader::CreateShader(Data::vk_device, "default/mrt.vert.spv", "default/mrt.frag.spv");

!Line: 387 - error: no header providing "VK_FRONT_FACE_CLOCKWISE" is directly included [misc-include-cleaner,-warnings-as-errors]

std::tie(vertexInfo, fragmentInfo) =
Shader::CreateShader(Data::vk_device, "default/mrt.vert.spv", "default/mrt.frag.spv");
multisampling.rasterizationSamples = Data::m_msaaSamples;
specializationData = static_cast< uint32_t >(Data::textures.size());

!Line: 390 - error: no header providing "std::tie" is directly included [misc-include-cleaner,-warnings-as-errors]

firstColorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT
| VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;
firstColorBlendAttachment.blendEnable = VK_FALSE;
VkPipelineColorBlendAttachmentState secondColorBlendAttachment{};
secondColorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT

!Line: 416 - error: no header providing "VK_COLOR_COMPONENT_R_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

firstColorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT
| VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;
firstColorBlendAttachment.blendEnable = VK_FALSE;
VkPipelineColorBlendAttachmentState secondColorBlendAttachment{};
secondColorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT

!Line: 416 - error: no header providing "VK_COLOR_COMPONENT_G_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

| VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;
firstColorBlendAttachment.blendEnable = VK_FALSE;
VkPipelineColorBlendAttachmentState secondColorBlendAttachment{};
secondColorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT
| VK_COLOR_COMPONENT_B_BIT

!Line: 417 - error: no header providing "VK_COLOR_COMPONENT_B_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

| VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;
firstColorBlendAttachment.blendEnable = VK_FALSE;
VkPipelineColorBlendAttachmentState secondColorBlendAttachment{};
secondColorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT
| VK_COLOR_COMPONENT_B_BIT

!Line: 417 - error: no header providing "VK_COLOR_COMPONENT_A_BIT" is directly included [misc-include-cleaner,-warnings-as-errors]

dynamicStateEnables.push_back(VK_DYNAMIC_STATE_DEPTH_BIAS);
pipelineDynamicStateCreateInfo.pDynamicStates = dynamicStateEnables.data();
pipelineDynamicStateCreateInfo.dynamicStateCount =
static_cast< uint32_t >(dynamicStateEnables.size());
pipelineDynamicStateCreateInfo.flags = 0;

!Line: 467 - error: no header providing "VK_DYNAMIC_STATE_DEPTH_BIAS" is directly included [misc-include-cleaner,-warnings-as-errors]

std::array< VkDescriptorPoolSize, 5 > poolSizes{};
poolSizes[0].type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
poolSizes[0].descriptorCount = 8; // 3 * numfrabuffers in swapchain?
poolSizes[1].type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
poolSizes[1].descriptorCount = 9; // 3 * numfrabuffers in swapchain?
poolSizes[2].type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;

!Line: 483 - error: no header providing "VkDescriptorPoolSize" is directly included [misc-include-cleaner,-warnings-as-errors]

std::array< VkDescriptorPoolSize, 5 > poolSizes{};
poolSizes[0].type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
poolSizes[0].descriptorCount = 8; // 3 * numfrabuffers in swapchain?
poolSizes[1].type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
poolSizes[1].descriptorCount = 9; // 3 * numfrabuffers in swapchain?
poolSizes[2].type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;

!Line: 483 - error: 5 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

poolSizes[0].descriptorCount = 8; // 3 * numfrabuffers in swapchain?
poolSizes[1].type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
poolSizes[1].descriptorCount = 9; // 3 * numfrabuffers in swapchain?
poolSizes[2].type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
poolSizes[2].descriptorCount = 3; // 1 * numfrabuffers in swapchain?
poolSizes[3].type = VK_DESCRIPTOR_TYPE_SAMPLER;

!Line: 485 - error: 8 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

poolSizes[1].descriptorCount = 9; // 3 * numfrabuffers in swapchain?
poolSizes[2].type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
poolSizes[2].descriptorCount = 3; // 1 * numfrabuffers in swapchain?
poolSizes[3].type = VK_DESCRIPTOR_TYPE_SAMPLER;
poolSizes[3].descriptorCount = 3; // 1 * numfrabuffers in swapchain?
poolSizes[4].type = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE;

!Line: 487 - error: 9 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

VkDescriptorPoolCreateInfo poolInfo{};
poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
poolInfo.poolSizeCount = static_cast< uint32_t >(poolSizes.size());
poolInfo.pPoolSizes = poolSizes.data();
poolInfo.maxSets = 4; // Should be 1?

!Line: 496 - error: no header providing "VkDescriptorPoolCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
poolInfo.poolSizeCount = static_cast< uint32_t >(poolSizes.size());
poolInfo.pPoolSizes = poolSizes.data();
poolInfo.maxSets = 4; // Should be 1?
VK_CHECK(vkCreateDescriptorPool(Data::vk_device, &poolInfo, nullptr, &m_descriptorPool), "");

!Line: 497 - error: no header providing "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

VK_CHECK(vkCreateDescriptorPool(Data::vk_device, &poolInfo, nullptr, &m_descriptorPool), "");
}
void
DeferredPipeline::SetupDescriptorSet()
{

!Line: 502 - error: no header providing "vkCreateDescriptorPool" is directly included [misc-include-cleaner,-warnings-as-errors]

std::array< VkWriteDescriptorSet, 5 > descriptorWrites{};
VkDescriptorSetAllocateInfo allocInfo{};
allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
allocInfo.descriptorPool = m_descriptorPool;
allocInfo.descriptorSetCount = 1;

!Line: 508 - error: no header providing "VkWriteDescriptorSet" is directly included [misc-include-cleaner,-warnings-as-errors]

std::array< VkWriteDescriptorSet, 5 > descriptorWrites{};
VkDescriptorSetAllocateInfo allocInfo{};
allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
allocInfo.descriptorPool = m_descriptorPool;
allocInfo.descriptorSetCount = 1;

!Line: 508 - error: 5 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

VkDescriptorSetAllocateInfo allocInfo{};
allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
allocInfo.descriptorPool = m_descriptorPool;
allocInfo.descriptorSetCount = 1;
allocInfo.pSetLayouts = &m_descriptorSetLayout;

!Line: 510 - error: no header providing "VkDescriptorSetAllocateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
allocInfo.descriptorPool = m_descriptorPool;
allocInfo.descriptorSetCount = 1;
allocInfo.pSetLayouts = &m_descriptorSetLayout;
// Image descriptors for the offscreen color attachments

!Line: 511 - error: no header providing "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

VkDescriptorImageInfo positionsImageInfo{};
positionsImageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
positionsImageInfo.imageView = m_offscreenFrameBuffer.GetPositionsImageView();
positionsImageInfo.sampler = m_offscreenFrameBuffer.GetSampler();
VkDescriptorImageInfo normalsImageInfo{};

!Line: 517 - error: no header providing "VkDescriptorImageInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

positionsImageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
positionsImageInfo.imageView = m_offscreenFrameBuffer.GetPositionsImageView();
positionsImageInfo.sampler = m_offscreenFrameBuffer.GetSampler();
VkDescriptorImageInfo normalsImageInfo{};
normalsImageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;

!Line: 518 - error: no header providing "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL" is directly included [misc-include-cleaner,-warnings-as-errors]

shadowMapInfo.imageLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL;
shadowMapInfo.imageView = m_shadowMap.GetShadowMapView();
shadowMapInfo.sampler = m_shadowMap.GetSampler();
// Deferred composition
VK_CHECK(vkAllocateDescriptorSets(Data::vk_device, &allocInfo, &m_descriptorSet), "");

!Line: 533 - error: no header providing "VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL" is directly included [misc-include-cleaner,-warnings-as-errors]

VK_CHECK(vkAllocateDescriptorSets(Data::vk_device, &allocInfo, &m_descriptorSet), "");
// Binding 5 : Position texture target
descriptorWrites[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
descriptorWrites[0].dstSet = m_descriptorSet;
descriptorWrites[0].dstBinding = 5;

!Line: 538 - error: no header providing "vkAllocateDescriptorSets" is directly included [misc-include-cleaner,-warnings-as-errors]

descriptorWrites[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
descriptorWrites[0].dstSet = m_descriptorSet;
descriptorWrites[0].dstBinding = 5;
descriptorWrites[0].dstArrayElement = 0;
descriptorWrites[0].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
descriptorWrites[0].descriptorCount = 1;

!Line: 541 - error: no header providing "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET" is directly included [misc-include-cleaner,-warnings-as-errors]

descriptorWrites[0].dstBinding = 5;
descriptorWrites[0].dstArrayElement = 0;
descriptorWrites[0].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
descriptorWrites[0].descriptorCount = 1;
descriptorWrites[0].pImageInfo = &positionsImageInfo;

!Line: 543 - error: 5 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

descriptorWrites[1].dstBinding = 6;
descriptorWrites[1].dstArrayElement = 0;
descriptorWrites[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
descriptorWrites[1].descriptorCount = 1;
descriptorWrites[1].pImageInfo = &normalsImageInfo;

!Line: 552 - error: 6 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

descriptorWrites[3].dstBinding = 7;
descriptorWrites[3].dstArrayElement = 0;
descriptorWrites[3].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
descriptorWrites[3].descriptorCount = 1;
descriptorWrites[3].pBufferInfo = &m_compositionBuffer.GetDescriptor();

!Line: 570 - error: 7 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

descriptorWrites[4].dstBinding = 8;
descriptorWrites[4].dstArrayElement = 0;
descriptorWrites[4].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
descriptorWrites[4].descriptorCount = 1;
descriptorWrites[4].pImageInfo = &shadowMapInfo;

!Line: 579 - error: 8 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,-warnings-as-errors]

vkUpdateDescriptorSets(Data::vk_device, static_cast< uint32_t >(descriptorWrites.size()),
descriptorWrites.data(), 0, nullptr);
// Offscreen (scene)
const auto [imageView, sampler] =

!Line: 585 - error: no header providing "vkUpdateDescriptorSets" is directly included [misc-include-cleaner,-warnings-as-errors]

TextureLibrary::GetTexture(TextureType::DIFFUSE_MAP, "196.png").GetImageViewAndSampler();
VkDescriptorBufferInfo bufferInfo{};
bufferInfo.buffer = Data::m_uniformBuffers[0];
bufferInfo.offset = 0;
bufferInfo.range = sizeof(UniformBufferObject);

!Line: 591 - error: no header providing "shady::render::TextureType" is directly included [misc-include-cleaner,-warnings-as-errors]

VkDescriptorBufferInfo bufferInfo{};
bufferInfo.buffer = Data::m_uniformBuffers[0];
bufferInfo.offset = 0;
bufferInfo.range = sizeof(UniformBufferObject);

!Line: 593 - error: no header providing "VkDescriptorBufferInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

bufferInfo.range = sizeof(UniformBufferObject);
VkDescriptorBufferInfo instanceBufferInfo;
instanceBufferInfo.buffer = Data::m_ssbo[0];
instanceBufferInfo.offset = 0;

!Line: 596 - error: no header providing "shady::render::UniformBufferObject" is directly included [misc-include-cleaner,-warnings-as-errors]

instanceBufferInfo.range = Data::perInstance.size() * sizeof(PerInstanceBuffer);
std::vector< VkDescriptorImageInfo > descriptorImageInfos;
std::transform(Data::texturesVec.begin(), Data::texturesVec.end(),
std::back_inserter(descriptorImageInfos), [](const auto& texture) {

!Line: 602 - error: no header providing "shady::render::PerInstanceBuffer" is directly included [misc-include-cleaner,-warnings-as-errors]

std::transform(Data::texturesVec.begin(), Data::texturesVec.end(),
std::back_inserter(descriptorImageInfos), [](const auto& texture) {
VkDescriptorImageInfo descriptorInfo;
descriptorInfo.sampler = nullptr;
descriptorInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
descriptorInfo.imageView = texture;

!Line: 606 - error: use a boost version of this algorithm [boost-use-ranges,-warnings-as-errors]

std::transform(Data::texturesVec.begin(), Data::texturesVec.end(),
std::back_inserter(descriptorImageInfos), [](const auto& texture) {
VkDescriptorImageInfo descriptorInfo;
descriptorInfo.sampler = nullptr;
descriptorInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
descriptorInfo.imageView = texture;

!Line: 606 - error: use a ranges version of this algorithm [modernize-use-ranges,-warnings-as-errors]

VkCommandBufferAllocateInfo allocInfo{};
allocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
allocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
allocInfo.commandPool = Data::vk_commandPool;
allocInfo.commandBufferCount = static_cast< uint32_t >(m_commandBuffers.size());

!Line: 662 - error: no header providing "VkCommandBufferAllocateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

allocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
allocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
allocInfo.commandPool = Data::vk_commandPool;
allocInfo.commandBufferCount = static_cast< uint32_t >(m_commandBuffers.size());
VK_CHECK(vkAllocateCommandBuffers(Data::vk_device, &allocInfo, &m_offscreenCommandBuffer),

!Line: 663 - error: no header providing "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

allocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
allocInfo.commandPool = Data::vk_commandPool;
allocInfo.commandBufferCount = static_cast< uint32_t >(m_commandBuffers.size());
VK_CHECK(vkAllocateCommandBuffers(Data::vk_device, &allocInfo, &m_offscreenCommandBuffer),
"");

!Line: 664 - error: no header providing "VK_COMMAND_BUFFER_LEVEL_PRIMARY" is directly included [misc-include-cleaner,-warnings-as-errors]

VK_CHECK(vkAllocateCommandBuffers(Data::vk_device, &allocInfo, &m_offscreenCommandBuffer),
"");
}
// Create a semaphore used to synchronize offscreen rendering and usage
VkSemaphoreCreateInfo semaphoreCreateInfo{};

!Line: 668 - error: no header providing "vkAllocateCommandBuffers" is directly included [misc-include-cleaner,-warnings-as-errors]

VkSemaphoreCreateInfo semaphoreCreateInfo{};
semaphoreCreateInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
VK_CHECK(
vkCreateSemaphore(Data::vk_device, &semaphoreCreateInfo, nullptr, &m_offscreenSemaphore), "");

!Line: 673 - error: no header providing "VkSemaphoreCreateInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

semaphoreCreateInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
VK_CHECK(
vkCreateSemaphore(Data::vk_device, &semaphoreCreateInfo, nullptr, &m_offscreenSemaphore), "");
VkCommandBufferBeginInfo cmdBufInfo{};

!Line: 674 - error: no header providing "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCreateSemaphore(Data::vk_device, &semaphoreCreateInfo, nullptr, &m_offscreenSemaphore), "");
VkCommandBufferBeginInfo cmdBufInfo{};
cmdBufInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
// Clear values for all attachments written in the fragment shader

!Line: 677 - error: no header providing "vkCreateSemaphore" is directly included [misc-include-cleaner,-warnings-as-errors]

VkCommandBufferBeginInfo cmdBufInfo{};
cmdBufInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
// Clear values for all attachments written in the fragment shader
std::array< VkClearValue, 4 > clearValues{};

!Line: 679 - error: no header providing "VkCommandBufferBeginInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

cmdBufInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
// Clear values for all attachments written in the fragment shader
std::array< VkClearValue, 4 > clearValues{};
VkRenderPassBeginInfo renderPassBeginInfo = {};

!Line: 680 - error: no header providing "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

std::array< VkClearValue, 4 > clearValues{};
VkRenderPassBeginInfo renderPassBeginInfo = {};
renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
// First pass: Shadow map generation
// -------------------------------------------------------------------------------------------------------

!Line: 683 - error: no header providing "VkClearValue" is directly included [misc-include-cleaner,-warnings-as-errors]

VkRenderPassBeginInfo renderPassBeginInfo = {};
renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
// First pass: Shadow map generation
// -------------------------------------------------------------------------------------------------------
clearValues[0].depthStencil = {1.0f, 0};

!Line: 685 - error: no header providing "VkRenderPassBeginInfo" is directly included [misc-include-cleaner,-warnings-as-errors]

renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
// First pass: Shadow map generation
// -------------------------------------------------------------------------------------------------------
clearValues[0].depthStencil = {1.0f, 0};

!Line: 686 - error: no header providing "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO" is directly included [misc-include-cleaner,-warnings-as-errors]

clearValues[0].depthStencil = {1.0f, 0};
renderPassBeginInfo.renderPass = m_shadowMap.GetRenderPass();
renderPassBeginInfo.framebuffer = m_shadowMap.GetFramebuffer();
renderPassBeginInfo.renderArea.extent.width = static_cast< uint32_t >(m_shadowMap.GetSize().x);
renderPassBeginInfo.renderArea.extent.height = static_cast< uint32_t >(m_shadowMap.GetSize().y);

!Line: 690 - error: use designated initializer list to initialize 'VkClearDepthStencilValue' [modernize-use-designated-initializers,-warnings-as-errors]

!Line: 4138 - note: aggregate type is defined here

clearValues[0].depthStencil = {1.0f, 0};
renderPassBeginInfo.renderPass = m_shadowMap.GetRenderPass();
renderPassBeginInfo.framebuffer = m_shadowMap.GetFramebuffer();
renderPassBeginInfo.renderArea.extent.width = static_cast< uint32_t >(m_shadowMap.GetSize().x);
renderPassBeginInfo.renderArea.extent.height = static_cast< uint32_t >(m_shadowMap.GetSize().y);

!Line: 690 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

VK_CHECK(vkBeginCommandBuffer(m_offscreenCommandBuffer, &cmdBufInfo), "");
VkViewport viewport{};
viewport.width = static_cast< float >(m_shadowMap.GetSize().x);
viewport.height = static_cast< float >(m_shadowMap.GetSize().y);
viewport.minDepth = 0.0f;

!Line: 699 - error: no header providing "vkBeginCommandBuffer" is directly included [misc-include-cleaner,-warnings-as-errors]

VkViewport viewport{};
viewport.width = static_cast< float >(m_shadowMap.GetSize().x);
viewport.height = static_cast< float >(m_shadowMap.GetSize().y);
viewport.minDepth = 0.0f;
viewport.maxDepth = 1.0f;

!Line: 701 - error: no header providing "VkViewport" is directly included [misc-include-cleaner,-warnings-as-errors]

viewport.minDepth = 0.0f;
viewport.maxDepth = 1.0f;
vkCmdSetViewport(m_offscreenCommandBuffer, 0, 1, &viewport);
VkRect2D scissor{};

!Line: 704 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

viewport.maxDepth = 1.0f;
vkCmdSetViewport(m_offscreenCommandBuffer, 0, 1, &viewport);
VkRect2D scissor{};
scissor.extent.width = static_cast< uint32_t >(m_shadowMap.GetSize().x);

!Line: 705 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

vkCmdSetViewport(m_offscreenCommandBuffer, 0, 1, &viewport);
VkRect2D scissor{};
scissor.extent.width = static_cast< uint32_t >(m_shadowMap.GetSize().x);
scissor.extent.height = static_cast< uint32_t >(m_shadowMap.GetSize().y);
scissor.offset.x = 0;

!Line: 707 - error: no header providing "vkCmdSetViewport" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdSetScissor(m_offscreenCommandBuffer, 0, 1, &scissor);
// Set depth bias (aka "Polygon offset")
vkCmdSetDepthBias(m_offscreenCommandBuffer, depthBiasConstant, 0.0f, depthBiasSlope);
vkCmdBeginRenderPass(m_offscreenCommandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);

!Line: 715 - error: no header providing "vkCmdSetScissor" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdSetDepthBias(m_offscreenCommandBuffer, depthBiasConstant, 0.0f, depthBiasSlope);
vkCmdBeginRenderPass(m_offscreenCommandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
vkCmdBindPipeline(m_offscreenCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
m_shadowMapPipeline);

!Line: 718 - error: no header providing "vkCmdSetDepthBias" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdSetDepthBias(m_offscreenCommandBuffer, depthBiasConstant, 0.0f, depthBiasSlope);
vkCmdBeginRenderPass(m_offscreenCommandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
vkCmdBindPipeline(m_offscreenCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
m_shadowMapPipeline);

!Line: 718 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

vkCmdBeginRenderPass(m_offscreenCommandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
vkCmdBindPipeline(m_offscreenCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
m_shadowMapPipeline);
{
std::array< VkDeviceSize, 1 > offsets = {0};

!Line: 720 - error: no header providing "vkCmdBeginRenderPass" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdBeginRenderPass(m_offscreenCommandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
vkCmdBindPipeline(m_offscreenCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
m_shadowMapPipeline);
{
std::array< VkDeviceSize, 1 > offsets = {0};

!Line: 720 - error: no header providing "VK_SUBPASS_CONTENTS_INLINE" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdBindPipeline(m_offscreenCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
m_shadowMapPipeline);
{
std::array< VkDeviceSize, 1 > offsets = {0};
vkCmdBindVertexBuffers(m_offscreenCommandBuffer, 0, 1, &Data::m_vertexBuffer, offsets.data());

!Line: 721 - error: no header providing "vkCmdBindPipeline" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdBindPipeline(m_offscreenCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
m_shadowMapPipeline);
{
std::array< VkDeviceSize, 1 > offsets = {0};
vkCmdBindVertexBuffers(m_offscreenCommandBuffer, 0, 1, &Data::m_vertexBuffer, offsets.data());

!Line: 721 - error: no header providing "VK_PIPELINE_BIND_POINT_GRAPHICS" is directly included [misc-include-cleaner,-warnings-as-errors]

std::array< VkDeviceSize, 1 > offsets = {0};
vkCmdBindVertexBuffers(m_offscreenCommandBuffer, 0, 1, &Data::m_vertexBuffer, offsets.data());
vkCmdBindIndexBuffer(m_offscreenCommandBuffer, Data::m_indexBuffer, 0, VK_INDEX_TYPE_UINT32);
vkCmdBindDescriptorSets(m_offscreenCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,

!Line: 725 - error: no header providing "VkDeviceSize" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdBindVertexBuffers(m_offscreenCommandBuffer, 0, 1, &Data::m_vertexBuffer, offsets.data());
vkCmdBindIndexBuffer(m_offscreenCommandBuffer, Data::m_indexBuffer, 0, VK_INDEX_TYPE_UINT32);
vkCmdBindDescriptorSets(m_offscreenCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
m_pipelineLayout, 0, 1, &m_descriptorSet, 0, nullptr);

!Line: 726 - error: no header providing "vkCmdBindVertexBuffers" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdBindIndexBuffer(m_offscreenCommandBuffer, Data::m_indexBuffer, 0, VK_INDEX_TYPE_UINT32);
vkCmdBindDescriptorSets(m_offscreenCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
m_pipelineLayout, 0, 1, &m_descriptorSet, 0, nullptr);

!Line: 728 - error: no header providing "vkCmdBindIndexBuffer" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdBindIndexBuffer(m_offscreenCommandBuffer, Data::m_indexBuffer, 0, VK_INDEX_TYPE_UINT32);
vkCmdBindDescriptorSets(m_offscreenCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
m_pipelineLayout, 0, 1, &m_descriptorSet, 0, nullptr);

!Line: 728 - error: no header providing "VK_INDEX_TYPE_UINT32" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdBindDescriptorSets(m_offscreenCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
m_pipelineLayout, 0, 1, &m_descriptorSet, 0, nullptr);
vkCmdDrawIndexedIndirectCount(m_offscreenCommandBuffer, Data::m_indirectDrawsBuffer, 0,
Data::m_indirectDrawsBuffer,

!Line: 730 - error: no header providing "vkCmdBindDescriptorSets" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdDrawIndexedIndirectCount(m_offscreenCommandBuffer, Data::m_indirectDrawsBuffer, 0,
Data::m_indirectDrawsBuffer,
sizeof(VkDrawIndexedIndirectCommand) * Data::m_numMeshes,
Data::m_numMeshes, sizeof(VkDrawIndexedIndirectCommand));
}

!Line: 734 - error: no header providing "vkCmdDrawIndexedIndirectCount" is directly included [misc-include-cleaner,-warnings-as-errors]

sizeof(VkDrawIndexedIndirectCommand) * Data::m_numMeshes,
Data::m_numMeshes, sizeof(VkDrawIndexedIndirectCommand));
}
vkCmdEndRenderPass(m_offscreenCommandBuffer);

!Line: 736 - error: no header providing "VkDrawIndexedIndirectCommand" is directly included [misc-include-cleaner,-warnings-as-errors]

vkCmdEndRenderPass(m_offscreenCommandBuffer);
// Second pass: Deferred calculations
// -------------------------------------------------------------------------------------------------------
clearValues[0].color = {{0.0f, 0.0f, 0.0f, 0.0f}};

!Line: 740 - error: no header providing "vkCmdEndRenderPass" is directly included [misc-include-cleaner,-warnings-as-errors]

clearValues[0].color = {{0.0f, 0.0f, 0.0f, 0.0f}};
clearValues[1].color = {{0.0f, 0.0f, 0.0f, 0.0f}};
clearValues[2].color = {{0.0f, 0.0f, 0.0f, 0.0f}};
clearValues[3].depthStencil = {1.0f, 0};

!Line: 745 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

clearValues[1].color = {{0.0f, 0.0f, 0.0f, 0.0f}};
clearValues[2].color = {{0.0f, 0.0f, 0.0f, 0.0f}};
clearValues[3].depthStencil = {1.0f, 0};
renderPassBeginInfo.renderPass = m_offscreenFrameBuffer.GetRenderPass();

!Line: 746 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]

clearValues[2].color = {{0.0f, 0.0f, 0.0f, 0.0f}};
clearValues[3].depthStencil = {1.0f, 0};
renderPassBeginInfo.renderPass = m_offscreenFrameBuffer.GetRenderPass();
renderPassBeginInfo.framebuffer = m_offscreenFrameBuffer.GetFramebuffer();

!Line: 747 - error: floating point literal has suffix 'f', which is not uppercase [hicpp-uppercase-literal-suffix,-warnings-as-errors]


!Maximum character count per GitHub comment has been reached! Not all warnings/errors has been parsed!

@JacobDomagala JacobDomagala force-pushed the 124-consider-dropping-assimp-for-tinygltf branch from 1694522 to 6fe4a8e Compare March 1, 2026 18:14
@JacobDomagala JacobDomagala force-pushed the 124-consider-dropping-assimp-for-tinygltf branch 2 times, most recently from 780ec6d to 08351b1 Compare March 1, 2026 20:35
@JacobDomagala JacobDomagala merged commit ece40a0 into master Mar 1, 2026
2 of 3 checks passed
@JacobDomagala JacobDomagala deleted the 124-consider-dropping-assimp-for-tinygltf branch March 1, 2026 22:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Consider dropping Assimp for tinygltf

1 participant