build.sh fix

This commit is contained in:
Jorijn van der Graaf 2025-04-29 00:15:14 +02:00
commit cf08a52f42
14 changed files with 86 additions and 82 deletions

View file

@ -1,13 +1,14 @@
/*
Crafter.Build
Copyright (C) 2025 Catcrafts
Copyright (C) 2025 Catcrafts®
Catcrafts.net
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3.0 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
@ -35,65 +36,65 @@ Shader::Shader(fs::path path, std::string entrypoint, EShLanguage type): path(pa
}
void Shader::Compile(fs::path outputDir) {
// glslang::InitializeProcess();
// EShMessages messages = static_cast<EShMessages>(EShMsgDefault | EShMsgVulkanRules | EShMsgSpvRules);
// std::ifstream fileStream(path, std::ios::in | std::ios::binary);
// if (!fileStream) {
// throw std::ios_base::failure("Failed to open file: " + path.string());
// }
// std::ostringstream contents;
// contents << fileStream.rdbuf();
// std::string src = contents.str();
glslang::InitializeProcess();
EShMessages messages = static_cast<EShMessages>(EShMsgDefault | EShMsgVulkanRules | EShMsgSpvRules);
std::ifstream fileStream(path, std::ios::in | std::ios::binary);
if (!fileStream) {
throw std::ios_base::failure("Failed to open file: " + path.string());
}
std::ostringstream contents;
contents << fileStream.rdbuf();
std::string src = contents.str();
// const char *file_name_list[1] = {""};
// const char *shader_source = reinterpret_cast<const char *>(src.data());
const char *file_name_list[1] = {""};
const char *shader_source = reinterpret_cast<const char *>(src.data());
// glslang::TShader shader(type);
// shader.setStringsWithLengthsAndNames(&shader_source, nullptr, file_name_list, 1);
// shader.setEntryPoint(entrypoint.c_str());
// shader.setSourceEntryPoint(entrypoint.c_str());
// shader.setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_4);
// DirStackFileIncluder includeDir;
// includeDir.pushExternalLocalDirectory(path.parent_path().generic_string());
// std::string info_log;
// if (!shader.parse(GetDefaultResources(), 100, false, messages, includeDir))
// {
// info_log = std::string(shader.getInfoLog()) + std::string(shader.getInfoDebugLog());
// }
// // Add shader to new program object.
// glslang::TProgram program;
// program.addShader(&shader);
glslang::TShader shader(type);
shader.setStringsWithLengthsAndNames(&shader_source, nullptr, file_name_list, 1);
shader.setEntryPoint(entrypoint.c_str());
shader.setSourceEntryPoint(entrypoint.c_str());
shader.setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_4);
DirStackFileIncluder includeDir;
includeDir.pushExternalLocalDirectory(path.parent_path().generic_string());
std::string info_log;
if (!shader.parse(GetDefaultResources(), 100, false, messages, includeDir))
{
info_log = std::string(shader.getInfoLog()) + std::string(shader.getInfoDebugLog());
}
// Add shader to new program object.
glslang::TProgram program;
program.addShader(&shader);
// // Link program.
// if (!program.link(messages))
// {
// info_log = std::string(program.getInfoLog()) + std::string(program.getInfoDebugLog());
// }
// Link program.
if (!program.link(messages))
{
info_log = std::string(program.getInfoLog()) + std::string(program.getInfoDebugLog());
}
// // Save any info log that was generated.
// if (shader.getInfoLog())
// {
// info_log += std::string(shader.getInfoLog()) + std::string(shader.getInfoDebugLog());
// }
// Save any info log that was generated.
if (shader.getInfoLog())
{
info_log += std::string(shader.getInfoLog()) + std::string(shader.getInfoDebugLog());
}
// if (program.getInfoLog())
// {
// info_log += std::string(program.getInfoLog()) + std::string(program.getInfoDebugLog());
// }
if (program.getInfoLog())
{
info_log += std::string(program.getInfoLog()) + std::string(program.getInfoDebugLog());
}
// glslang::TIntermediate* intermediate = program.getIntermediate(type);
// if (!intermediate)
// {
// info_log += "Failed to get shared intermediate code.";
// }
glslang::TIntermediate* intermediate = program.getIntermediate(type);
if (!intermediate)
{
info_log += "Failed to get shared intermediate code.";
}
// spv::SpvBuildLogger logger;
// std::vector<std::uint32_t> spirv;
// std::cout << info_log;
// glslang::GlslangToSpv(*intermediate, spirv, &logger);
// std::cout << logger.getAllMessages();
// glslang::FinalizeProcess();
// path.replace_extension("spirv");
// std::ofstream file(outputDir/path, std::ios::binary);
// file.write(reinterpret_cast<const char*>(spirv.data()), spirv.size() * sizeof(std::uint32_t));
spv::SpvBuildLogger logger;
std::vector<std::uint32_t> spirv;
std::cout << info_log;
glslang::GlslangToSpv(*intermediate, spirv, &logger);
std::cout << logger.getAllMessages();
glslang::FinalizeProcess();
fs::path filename = path.filename().replace_extension("spirv");
std::ofstream file(outputDir/filename, std::ios::binary);
file.write(reinterpret_cast<const char*>(spirv.data()), spirv.size() * sizeof(std::uint32_t));
}