14 bool ShaderVK::load(const char *fname, ShaderType type)
16 char *vk_fname = new char[strlen(fname) + strlen(".spirv") + 1];
17 strcpy(vk_fname, fname);
19 char *suffix = strrchr(vk_fname, '.');
25 strcat(vk_fname, ".spirv");
27 bool res = Shader::load(vk_fname, type);
33 bool ShaderVK::create(char *buf, unsigned int bsz, const char *fname)
35 name = std::string(fname);
37 VkShaderModuleCreateInfo sminf;
38 memset(&sminf, 0, sizeof sminf);
39 sminf.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
42 sminf.pCode = (uint32_t *)buf;
44 if(vkCreateShaderModule(vk_device, &sminf, 0, &sdr) != VK_SUCCESS) {
47 fprintf(stderr, "Failed to create vertex shader module.\n");
55 void ShaderVK::destroy()
57 vkDestroyShaderModule(vk_device, sdr, 0);
60 ShaderProgramVK::ShaderProgramVK()
64 ShaderProgramVK::~ShaderProgramVK()
69 bool ShaderProgramVK::create()
74 bool ShaderProgramVK::link()
79 bool ShaderProgramVK::use() const
84 void ShaderProgramVK::destroy()
86 int len = sizeof shaders / sizeof *shaders;
88 for(int i=0; i<len; ++i) {
94 void ShaderProgramVK::attach_shader(Shader *shader)