mirror of
https://github.com/love2d/love.git
synced 2026-08-16 16:20:42 +02:00
vulkan: clean up glslang objects properly
By using smart pointers we don't want to worry about explicitely deleting.
This commit is contained in:
@@ -734,9 +734,9 @@ void Shader::compileShaders()
|
||||
using namespace glslang;
|
||||
using namespace spirv_cross;
|
||||
|
||||
std::vector<TShader*> glslangShaders;
|
||||
std::vector<std::unique_ptr<TShader>> glslangShaders;
|
||||
|
||||
auto program = new TProgram();
|
||||
auto program = std::make_unique<TProgram>();
|
||||
|
||||
device = vgfx->getDevice();
|
||||
|
||||
@@ -753,7 +753,7 @@ void Shader::compileShaders()
|
||||
isCompute = true;
|
||||
|
||||
auto glslangShaderStage = getGlslShaderType(stage);
|
||||
auto tshader = new TShader(glslangShaderStage);
|
||||
auto tshader = std::make_unique<TShader>(glslangShaderStage);
|
||||
|
||||
tshader->setEnvInput(EShSourceGlsl, glslangShaderStage, EShClientVulkan, 450);
|
||||
tshader->setEnvClient(EShClientVulkan, EShTargetVulkan_1_2);
|
||||
@@ -779,14 +779,18 @@ void Shader::compileShaders()
|
||||
|
||||
if (!tshader->parse(&defaultTBuiltInResource, defaultVersion, defaultProfile, forceDefault, forwardCompat, EShMsgSuppressWarnings))
|
||||
{
|
||||
const char *msg1 = tshader->getInfoLog();
|
||||
const char *msg2 = tshader->getInfoDebugLog();
|
||||
const char *stageName = "unknown";
|
||||
ShaderStage::getConstant(stage, stageName);
|
||||
|
||||
throw love::Exception("error while parsing shader");
|
||||
std::string err = "Error parsing " + std::string(stageName) + " shader:\n\n"
|
||||
+ std::string(tshader->getInfoLog()) + "\n"
|
||||
+ std::string(tshader->getInfoDebugLog());
|
||||
|
||||
throw love::Exception("%s", err.c_str());
|
||||
}
|
||||
|
||||
program->addShader(tshader);
|
||||
glslangShaders.push_back(tshader);
|
||||
program->addShader(tshader.get());
|
||||
glslangShaders.push_back(std::move(tshader));
|
||||
}
|
||||
|
||||
if (!program->link(EShMsgDefault))
|
||||
@@ -996,10 +1000,6 @@ void Shader::compileShaders()
|
||||
|
||||
shaderStages.push_back(shaderStageInfo);
|
||||
}
|
||||
|
||||
delete program;
|
||||
for (auto shader : glslangShaders)
|
||||
delete shader;
|
||||
}
|
||||
|
||||
void Shader::createDescriptorSetLayout()
|
||||
|
||||
Reference in New Issue
Block a user