refactor: add [[nodiscard]] to shader/asset load functions, suppress warnings

Add [[nodiscard]] to VkShaderModule::loadFromFile, Shader::loadFromFile/
loadFromSource, AssetManifest::load, DbcLoader::load — all return bool
indicating success/failure that callers should check.

Suppress with (void) at 17 call sites where validity is checked via
isValid() after loading rather than the return value (m2_renderer
recreatePipelines, swim_effects recreatePipelines).
This commit is contained in:
Kelsi 2026-03-27 15:17:19 -07:00
parent b5b84fbc19
commit e805eae33c
6 changed files with 27 additions and 27 deletions

View file

@ -29,7 +29,7 @@ public:
* @param manifestPath Full path to manifest.json
* @return true if loaded successfully
*/
bool load(const std::string& manifestPath);
[[nodiscard]] bool load(const std::string& manifestPath);
/**
* Lookup an entry by normalized WoW path (lowercase, backslash)

View file

@ -26,7 +26,7 @@ public:
* @param dbcData Raw DBC file data
* @return true if loaded successfully
*/
bool load(const std::vector<uint8_t>& dbcData);
[[nodiscard]] bool load(const std::vector<uint8_t>& dbcData);
/**
* Check if DBC is loaded

View file

@ -13,8 +13,8 @@ public:
Shader() = default;
~Shader();
bool loadFromFile(const std::string& vertexPath, const std::string& fragmentPath);
bool loadFromSource(const std::string& vertexSource, const std::string& fragmentSource);
[[nodiscard]] bool loadFromFile(const std::string& vertexPath, const std::string& fragmentPath);
[[nodiscard]] bool loadFromSource(const std::string& vertexSource, const std::string& fragmentSource);
void use() const;
void unuse() const;

View file

@ -18,7 +18,7 @@ public:
VkShaderModule& operator=(VkShaderModule&& other) noexcept;
// Load a SPIR-V file from disk
bool loadFromFile(VkDevice device, const std::string& path);
[[nodiscard]] bool loadFromFile(VkDevice device, const std::string& path);
// Load from raw SPIR-V bytes
bool loadFromMemory(VkDevice device, const uint32_t* code, size_t sizeBytes);

View file

@ -463,12 +463,12 @@ bool M2Renderer::initialize(VkContext* ctx, VkDescriptorSetLayout perFrameLayout
rendering::VkShaderModule particleVert, particleFrag;
rendering::VkShaderModule smokeVert, smokeFrag;
m2Vert.loadFromFile(device, "assets/shaders/m2.vert.spv");
m2Frag.loadFromFile(device, "assets/shaders/m2.frag.spv");
particleVert.loadFromFile(device, "assets/shaders/m2_particle.vert.spv");
particleFrag.loadFromFile(device, "assets/shaders/m2_particle.frag.spv");
smokeVert.loadFromFile(device, "assets/shaders/m2_smoke.vert.spv");
smokeFrag.loadFromFile(device, "assets/shaders/m2_smoke.frag.spv");
(void)m2Vert.loadFromFile(device, "assets/shaders/m2.vert.spv");
(void)m2Frag.loadFromFile(device, "assets/shaders/m2.frag.spv");
(void)particleVert.loadFromFile(device, "assets/shaders/m2_particle.vert.spv");
(void)particleFrag.loadFromFile(device, "assets/shaders/m2_particle.frag.spv");
(void)smokeVert.loadFromFile(device, "assets/shaders/m2_smoke.vert.spv");
(void)smokeFrag.loadFromFile(device, "assets/shaders/m2_smoke.frag.spv");
if (!m2Vert.isValid() || !m2Frag.isValid()) {
LOG_ERROR("M2: Missing required shaders, cannot initialize");
@ -583,8 +583,8 @@ bool M2Renderer::initialize(VkContext* ctx, VkDescriptorSetLayout perFrameLayout
// Vertex format: pos(3) + color(3) + alpha(1) + uv(2) = 9 floats = 36 bytes
{
rendering::VkShaderModule ribVert, ribFrag;
ribVert.loadFromFile(device, "assets/shaders/m2_ribbon.vert.spv");
ribFrag.loadFromFile(device, "assets/shaders/m2_ribbon.frag.spv");
(void)ribVert.loadFromFile(device, "assets/shaders/m2_ribbon.vert.spv");
(void)ribFrag.loadFromFile(device, "assets/shaders/m2_ribbon.frag.spv");
if (ribVert.isValid() && ribFrag.isValid()) {
// Reuse particleTexLayout_ for set 1 (single texture sampler)
VkDescriptorSetLayout ribLayouts[] = {perFrameLayout, particleTexLayout_};
@ -4766,12 +4766,12 @@ void M2Renderer::recreatePipelines() {
rendering::VkShaderModule particleVert, particleFrag;
rendering::VkShaderModule smokeVert, smokeFrag;
m2Vert.loadFromFile(device, "assets/shaders/m2.vert.spv");
m2Frag.loadFromFile(device, "assets/shaders/m2.frag.spv");
particleVert.loadFromFile(device, "assets/shaders/m2_particle.vert.spv");
particleFrag.loadFromFile(device, "assets/shaders/m2_particle.frag.spv");
smokeVert.loadFromFile(device, "assets/shaders/m2_smoke.vert.spv");
smokeFrag.loadFromFile(device, "assets/shaders/m2_smoke.frag.spv");
(void)m2Vert.loadFromFile(device, "assets/shaders/m2.vert.spv");
(void)m2Frag.loadFromFile(device, "assets/shaders/m2.frag.spv");
(void)particleVert.loadFromFile(device, "assets/shaders/m2_particle.vert.spv");
(void)particleFrag.loadFromFile(device, "assets/shaders/m2_particle.frag.spv");
(void)smokeVert.loadFromFile(device, "assets/shaders/m2_smoke.vert.spv");
(void)smokeFrag.loadFromFile(device, "assets/shaders/m2_smoke.frag.spv");
if (!m2Vert.isValid() || !m2Frag.isValid()) {
LOG_ERROR("M2Renderer::recreatePipelines: missing required shaders");
@ -4882,8 +4882,8 @@ void M2Renderer::recreatePipelines() {
// --- Ribbon pipelines ---
{
rendering::VkShaderModule ribVert, ribFrag;
ribVert.loadFromFile(device, "assets/shaders/m2_ribbon.vert.spv");
ribFrag.loadFromFile(device, "assets/shaders/m2_ribbon.frag.spv");
(void)ribVert.loadFromFile(device, "assets/shaders/m2_ribbon.vert.spv");
(void)ribFrag.loadFromFile(device, "assets/shaders/m2_ribbon.frag.spv");
if (ribVert.isValid() && ribFrag.isValid()) {
VkVertexInputBindingDescription rBind{};
rBind.binding = 0;

View file

@ -348,9 +348,9 @@ void SwimEffects::recreatePipelines() {
// ---- Rebuild ripple pipeline ----
{
VkShaderModule vertModule;
vertModule.loadFromFile(device, "assets/shaders/swim_ripple.vert.spv");
(void)vertModule.loadFromFile(device, "assets/shaders/swim_ripple.vert.spv");
VkShaderModule fragModule;
fragModule.loadFromFile(device, "assets/shaders/swim_ripple.frag.spv");
(void)fragModule.loadFromFile(device, "assets/shaders/swim_ripple.frag.spv");
VkPipelineShaderStageCreateInfo vertStage = vertModule.stageInfo(VK_SHADER_STAGE_VERTEX_BIT);
VkPipelineShaderStageCreateInfo fragStage = fragModule.stageInfo(VK_SHADER_STAGE_FRAGMENT_BIT);
@ -375,9 +375,9 @@ void SwimEffects::recreatePipelines() {
// ---- Rebuild bubble pipeline ----
{
VkShaderModule vertModule;
vertModule.loadFromFile(device, "assets/shaders/swim_bubble.vert.spv");
(void)vertModule.loadFromFile(device, "assets/shaders/swim_bubble.vert.spv");
VkShaderModule fragModule;
fragModule.loadFromFile(device, "assets/shaders/swim_bubble.frag.spv");
(void)fragModule.loadFromFile(device, "assets/shaders/swim_bubble.frag.spv");
VkPipelineShaderStageCreateInfo vertStage = vertModule.stageInfo(VK_SHADER_STAGE_VERTEX_BIT);
VkPipelineShaderStageCreateInfo fragStage = fragModule.stageInfo(VK_SHADER_STAGE_FRAGMENT_BIT);
@ -402,9 +402,9 @@ void SwimEffects::recreatePipelines() {
// ---- Rebuild insect pipeline ----
{
VkShaderModule vertModule;
vertModule.loadFromFile(device, "assets/shaders/swim_ripple.vert.spv");
(void)vertModule.loadFromFile(device, "assets/shaders/swim_ripple.vert.spv");
VkShaderModule fragModule;
fragModule.loadFromFile(device, "assets/shaders/swim_insect.frag.spv");
(void)fragModule.loadFromFile(device, "assets/shaders/swim_insect.frag.spv");
VkPipelineShaderStageCreateInfo vertStage = vertModule.stageInfo(VK_SHADER_STAGE_VERTEX_BIT);
VkPipelineShaderStageCreateInfo fragStage = fragModule.stageInfo(VK_SHADER_STAGE_FRAGMENT_BIT);