Remove hardcoded shader names
This commit is contained in:
parent
15eec8a8d2
commit
3769c18288
@ -128,13 +128,13 @@ void GEVulkan2dRenderer::createGraphicsPipeline()
|
|||||||
VkPipelineShaderStageCreateInfo vert_shader_stage_info = {};
|
VkPipelineShaderStageCreateInfo vert_shader_stage_info = {};
|
||||||
vert_shader_stage_info.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
vert_shader_stage_info.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
||||||
vert_shader_stage_info.stage = VK_SHADER_STAGE_VERTEX_BIT;
|
vert_shader_stage_info.stage = VK_SHADER_STAGE_VERTEX_BIT;
|
||||||
vert_shader_stage_info.module = GEVulkanShaderManager::get2dRenderVert();
|
vert_shader_stage_info.module = GEVulkanShaderManager::getShader("2d_render.vert");
|
||||||
vert_shader_stage_info.pName = "main";
|
vert_shader_stage_info.pName = "main";
|
||||||
|
|
||||||
VkPipelineShaderStageCreateInfo frag_shader_stage_info = {};
|
VkPipelineShaderStageCreateInfo frag_shader_stage_info = {};
|
||||||
frag_shader_stage_info.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
frag_shader_stage_info.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
||||||
frag_shader_stage_info.stage = VK_SHADER_STAGE_FRAGMENT_BIT;
|
frag_shader_stage_info.stage = VK_SHADER_STAGE_FRAGMENT_BIT;
|
||||||
frag_shader_stage_info.module = GEVulkanShaderManager::get2dRenderFrag();
|
frag_shader_stage_info.module = GEVulkanShaderManager::getShader("2d_render.frag");
|
||||||
frag_shader_stage_info.pName = "main";
|
frag_shader_stage_info.pName = "main";
|
||||||
|
|
||||||
VkPipelineShaderStageCreateInfo shader_stages[] =
|
VkPipelineShaderStageCreateInfo shader_stages[] =
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include "ge_vulkan_features.hpp"
|
#include "ge_vulkan_features.hpp"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <map>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
@ -22,8 +23,7 @@ irr::io::IFileSystem* g_file_system = NULL;
|
|||||||
std::string g_predefines = "";
|
std::string g_predefines = "";
|
||||||
uint32_t g_sampler_size = 256;
|
uint32_t g_sampler_size = 256;
|
||||||
|
|
||||||
VkShaderModule g_2d_render_vert = VK_NULL_HANDLE;
|
std::map<std::string, VkShaderModule> g_shaders;
|
||||||
VkShaderModule g_2d_render_frag = VK_NULL_HANDLE;
|
|
||||||
} // GEVulkanShaderManager
|
} // GEVulkanShaderManager
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@ -47,9 +47,7 @@ void GEVulkanShaderManager::init(GEVulkanDriver* vk)
|
|||||||
oss << "#define GE_SAMPLE_TEX_INDEX int\n";
|
oss << "#define GE_SAMPLE_TEX_INDEX int\n";
|
||||||
g_predefines = oss.str();
|
g_predefines = oss.str();
|
||||||
|
|
||||||
// 2D rendering shader
|
loadAllShaders();
|
||||||
g_2d_render_vert = loadShader(shaderc_vertex_shader, "2d_render.vert");
|
|
||||||
g_2d_render_frag = loadShader(shaderc_fragment_shader, "2d_render.frag");
|
|
||||||
} // init
|
} // init
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -57,10 +55,40 @@ void GEVulkanShaderManager::destroy()
|
|||||||
{
|
{
|
||||||
if (!g_vk)
|
if (!g_vk)
|
||||||
return;
|
return;
|
||||||
vkDestroyShaderModule(g_vk->getDevice(), g_2d_render_vert, NULL);
|
for (auto& p : g_shaders)
|
||||||
vkDestroyShaderModule(g_vk->getDevice(), g_2d_render_frag, NULL);
|
vkDestroyShaderModule(g_vk->getDevice(), p.second, NULL);
|
||||||
|
g_shaders.clear();
|
||||||
} // destroy
|
} // destroy
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
void GEVulkanShaderManager::loadAllShaders()
|
||||||
|
{
|
||||||
|
irr::io::IFileList* files = g_file_system->createFileList(
|
||||||
|
getShaderFolder().c_str());
|
||||||
|
for (unsigned i = 0; i < files->getFileCount(); i++)
|
||||||
|
{
|
||||||
|
if (files->isDirectory(i))
|
||||||
|
continue;
|
||||||
|
std::string filename = files->getFileName(i).c_str();
|
||||||
|
std::string ext = filename.substr(filename.find_last_of(".") + 1);
|
||||||
|
shaderc_shader_kind kind;
|
||||||
|
if (ext == "vert")
|
||||||
|
kind = shaderc_vertex_shader;
|
||||||
|
else if (ext == "frag")
|
||||||
|
kind = shaderc_fragment_shader;
|
||||||
|
else if (ext == "comp")
|
||||||
|
kind = shaderc_compute_shader;
|
||||||
|
else if (ext == "tesc")
|
||||||
|
kind = shaderc_tess_control_shader;
|
||||||
|
else if (ext == "tese")
|
||||||
|
kind = shaderc_tess_evaluation_shader;
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
g_shaders[filename] = loadShader(kind, filename);
|
||||||
|
}
|
||||||
|
files->drop();
|
||||||
|
} // loadAllShaders
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
VkShaderModule GEVulkanShaderManager::loadShader(shaderc_shader_kind kind,
|
VkShaderModule GEVulkanShaderManager::loadShader(shaderc_shader_kind kind,
|
||||||
const std::string& name)
|
const std::string& name)
|
||||||
@ -116,16 +144,9 @@ unsigned GEVulkanShaderManager::getSamplerSize()
|
|||||||
} // getSamplerSize
|
} // getSamplerSize
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
VkShaderModule GEVulkanShaderManager::get2dRenderVert()
|
VkShaderModule GEVulkanShaderManager::getShader(const std::string& filename)
|
||||||
{
|
{
|
||||||
return g_2d_render_vert;
|
return g_shaders.at(filename);
|
||||||
} // get2dRenderVert
|
} // getShader
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
VkShaderModule GEVulkanShaderManager::get2dRenderFrag()
|
|
||||||
{
|
|
||||||
return g_2d_render_frag;
|
|
||||||
} // get2dRenderFrag
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
}
|
}
|
||||||
|
@ -15,12 +15,12 @@ void init(GEVulkanDriver*);
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
void destroy();
|
void destroy();
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
void loadAllShaders();
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
VkShaderModule getShader(const std::string& filename);
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
VkShaderModule loadShader(shaderc_shader_kind, const std::string&);
|
VkShaderModule loadShader(shaderc_shader_kind, const std::string&);
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
VkShaderModule get2dRenderVert();
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
VkShaderModule get2dRenderFrag();
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
unsigned getSamplerSize();
|
unsigned getSamplerSize();
|
||||||
}; // GEVulkanShaderManager
|
}; // GEVulkanShaderManager
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user