X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=src%2Fvulkan%2Fshader-vk.cc;h=51c472269d9d2f3e555dcd237e119bfd6e338cdf;hb=f6ceb163227d00d7f97df1fc2dfbdd419c56277e;hp=eb22b97b1764fc193764d3af4fc61a3408afe947;hpb=72995482b98ff2a014ddd737131a0935ead89977;p=demo diff --git a/src/vulkan/shader-vk.cc b/src/vulkan/shader-vk.cc index eb22b97..51c4722 100644 --- a/src/vulkan/shader-vk.cc +++ b/src/vulkan/shader-vk.cc @@ -2,8 +2,6 @@ #include "shader-vk.h" /* static variables */ -static vku_buffer ubo; - ShaderVK::ShaderVK() { } @@ -13,18 +11,50 @@ ShaderVK::~ShaderVK() destroy(); } -bool ShaderVK::create(char *buf, unsigned int bsz, const char *fname) +bool ShaderVK::load(const char *fname, ShaderType type) { - return true; + char *vk_fname = new char[strlen(fname) + strlen(".spirv") + 1]; + strcpy(vk_fname, fname); + + char *suffix = strrchr(vk_fname, '.'); + + if(suffix) { + *suffix = 0; + } + + strcat(vk_fname, ".spirv"); + + bool res = Shader::load(vk_fname, type); + delete [] vk_fname; + + return res; } -bool ShaderVK::load(const char *fname, SType type) +bool ShaderVK::create(char *buf, unsigned int bsz, const char *fname) { + name = std::string(fname); + + VkShaderModuleCreateInfo sminf; + memset(&sminf, 0, sizeof sminf); + sminf.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; + + sminf.codeSize = bsz; + sminf.pCode = (uint32_t *)buf; + + if(vkCreateShaderModule(vk_device, &sminf, 0, &sdr) != VK_SUCCESS) { + delete [] buf; + + fprintf(stderr, "Failed to create vertex shader module.\n"); + return false; + } + + delete [] buf; return true; } void ShaderVK::destroy() { + vkDestroyShaderModule(vk_device, sdr, 0); } ShaderProgramVK::ShaderProgramVK() @@ -33,6 +63,7 @@ ShaderProgramVK::ShaderProgramVK() ShaderProgramVK::~ShaderProgramVK() { + destroy(); } bool ShaderProgramVK::create() @@ -52,50 +83,14 @@ bool ShaderProgramVK::use() const void ShaderProgramVK::destroy() { -} + int len = sizeof shaders / sizeof *shaders; -void ShaderProgramVK::attach_shader(Shader *shader) -{ -} + for(int i=0; i