From 213b9b3c3076afd1d5a8ec7a04d1e5277a8a2623 Mon Sep 17 00:00:00 2001 From: assiduous Date: Tue, 24 Nov 2020 21:41:27 -0800 Subject: GLTF loader: fixed crash when texture is missing --- AssetLoader/src/GLTFLoader.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'AssetLoader/src/GLTFLoader.cpp') diff --git a/AssetLoader/src/GLTFLoader.cpp b/AssetLoader/src/GLTFLoader.cpp index fc8422e..882589f 100644 --- a/AssetLoader/src/GLTFLoader.cpp +++ b/AssetLoader/src/GLTFLoader.cpp @@ -38,6 +38,7 @@ #include "FileWrapper.hpp" #include "GraphicsAccessories.hpp" #include "TextureLoader.h" +#include "GraphicsUtilities.h" #define TINYGLTF_IMPLEMENTATION #define TINYGLTF_NO_STB_IMAGE @@ -722,7 +723,25 @@ void Model::LoadTextures(IRenderDevice* pDevice, } } - VERIFY_EXPR(pTexture); + if (!pTexture) + { + // Create stub texture + TextureDesc TexDesc; + TexDesc.Name = "Checkerboard stub texture"; + TexDesc.Type = RESOURCE_DIM_TEX_2D; + TexDesc.Width = 32; + TexDesc.Height = 32; + TexDesc.Format = TEX_FORMAT_RGBA8_UNORM; + TexDesc.MipLevels = 1; + TexDesc.Usage = USAGE_IMMUTABLE; + TexDesc.BindFlags = BIND_SHADER_RESOURCE; + + std::vector Data(TexDesc.Width * TexDesc.Height * 4); + TextureSubResData Mip0Data{Data.data(), TexDesc.Width * 4}; + GenerateCheckerBoardPattern(TexDesc.Width, TexDesc.Height, TexDesc.Format, 4, 4, Data.data(), Mip0Data.Stride); + TextureData InitData{&Mip0Data, 1}; + pDevice->CreateTexture(TexDesc, &InitData, &pTexture); + } if (pTexture && pTextureCache != nullptr) { -- cgit v1.2.3