Replaced old binary shader loading code with ifstream
This commit is contained in:
parent
9981799b02
commit
8f6e6b8e9f
2 changed files with 26 additions and 33 deletions
|
|
@ -307,31 +307,23 @@ namespace vkTools
|
||||||
#else
|
#else
|
||||||
VkShaderModule loadShader(const char *fileName, VkDevice device, VkShaderStageFlagBits stage)
|
VkShaderModule loadShader(const char *fileName, VkDevice device, VkShaderStageFlagBits stage)
|
||||||
{
|
{
|
||||||
size_t size;
|
std::ifstream is(fileName, std::ios::binary | std::ios::in | std::ios::ate);
|
||||||
|
|
||||||
FILE *fp = fopen(fileName, "rb");
|
if (is.is_open())
|
||||||
assert(fp);
|
{
|
||||||
|
size_t size = is.tellg();
|
||||||
fseek(fp, 0L, SEEK_END);
|
is.seekg(0, std::ios::beg);
|
||||||
size = ftell(fp);
|
|
||||||
|
|
||||||
fseek(fp, 0L, SEEK_SET);
|
|
||||||
|
|
||||||
//shaderCode = malloc(size);
|
|
||||||
char* shaderCode = new char[size];
|
char* shaderCode = new char[size];
|
||||||
size_t retval = fread(shaderCode, size, 1, fp);
|
is.read(shaderCode, size);
|
||||||
assert(retval == 1);
|
is.close();
|
||||||
|
|
||||||
assert(size > 0);
|
assert(size > 0);
|
||||||
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
VkShaderModule shaderModule;
|
VkShaderModule shaderModule;
|
||||||
VkShaderModuleCreateInfo moduleCreateInfo;
|
VkShaderModuleCreateInfo moduleCreateInfo{};
|
||||||
moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
||||||
moduleCreateInfo.pNext = NULL;
|
|
||||||
moduleCreateInfo.codeSize = size;
|
moduleCreateInfo.codeSize = size;
|
||||||
moduleCreateInfo.pCode = (uint32_t*)shaderCode;
|
moduleCreateInfo.pCode = (uint32_t*)shaderCode;
|
||||||
moduleCreateInfo.flags = 0;
|
|
||||||
|
|
||||||
VK_CHECK_RESULT(vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule));
|
VK_CHECK_RESULT(vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule));
|
||||||
|
|
||||||
|
|
@ -339,6 +331,12 @@ namespace vkTools
|
||||||
|
|
||||||
return shaderModule;
|
return shaderModule;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "Error: Could not open shader file \"" << fileName << "\"" << std::endl;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
VkShaderModule loadShaderGLSL(const char *fileName, VkDevice device, VkShaderStageFlagBits stage)
|
VkShaderModule loadShaderGLSL(const char *fileName, VkDevice device, VkShaderStageFlagBits stage)
|
||||||
|
|
|
||||||
|
|
@ -80,21 +80,16 @@ namespace vkTools
|
||||||
|
|
||||||
// Display error message and exit on fatal error
|
// Display error message and exit on fatal error
|
||||||
void exitFatal(std::string message, std::string caption);
|
void exitFatal(std::string message, std::string caption);
|
||||||
// Load a text file (e.g. GLGL shader) into a std::string
|
|
||||||
std::string readTextFile(const char *fileName);
|
|
||||||
// Load a binary file into a buffer (e.g. SPIR-V)
|
|
||||||
char *readBinaryFile(const char *filename, size_t *psize);
|
|
||||||
|
|
||||||
// Load a SPIR-V shader
|
// @brief Load a SPIR-V shader (binary)
|
||||||
#if defined(__ANDROID__)
|
#if defined(__ANDROID__)
|
||||||
VkShaderModule loadShader(AAssetManager* assetManager, const char *fileName, VkDevice device, VkShaderStageFlagBits stage);
|
VkShaderModule loadShader(AAssetManager* assetManager, const char *fileName, VkDevice device, VkShaderStageFlagBits stage);
|
||||||
#else
|
#else
|
||||||
VkShaderModule loadShader(const char *fileName, VkDevice device, VkShaderStageFlagBits stage);
|
VkShaderModule loadShader(const char *fileName, VkDevice device, VkShaderStageFlagBits stage);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Load a GLSL shader
|
// Load a GLSL shader (text)
|
||||||
// Note : Only for testing purposes, support for directly feeding GLSL shaders into Vulkan
|
// Note: GLSL support requires vendor-specific extensions to be enabled and is not a core-feature of Vulkan
|
||||||
// may be dropped at some point
|
|
||||||
VkShaderModule loadShaderGLSL(const char *fileName, VkDevice device, VkShaderStageFlagBits stage);
|
VkShaderModule loadShaderGLSL(const char *fileName, VkDevice device, VkShaderStageFlagBits stage);
|
||||||
|
|
||||||
// Returns a pre-present image memory barrier
|
// Returns a pre-present image memory barrier
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue