Replaced old binary shader loading code with ifstream

This commit is contained in:
saschawillems 2016-12-23 17:30:22 +01:00
parent 9981799b02
commit 8f6e6b8e9f
2 changed files with 26 additions and 33 deletions

View file

@ -307,37 +307,35 @@ 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();
is.seekg(0, std::ios::beg);
char* shaderCode = new char[size];
is.read(shaderCode, size);
is.close();
fseek(fp, 0L, SEEK_END); assert(size > 0);
size = ftell(fp);
fseek(fp, 0L, SEEK_SET); VkShaderModule shaderModule;
VkShaderModuleCreateInfo moduleCreateInfo{};
moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
moduleCreateInfo.codeSize = size;
moduleCreateInfo.pCode = (uint32_t*)shaderCode;
//shaderCode = malloc(size); VK_CHECK_RESULT(vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule));
char *shaderCode = new char[size];
size_t retval = fread(shaderCode, size, 1, fp);
assert(retval == 1);
assert(size > 0);
fclose(fp); delete[] shaderCode;
VkShaderModule shaderModule; return shaderModule;
VkShaderModuleCreateInfo moduleCreateInfo; }
moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; else
moduleCreateInfo.pNext = NULL; {
moduleCreateInfo.codeSize = size; std::cerr << "Error: Could not open shader file \"" << fileName << "\"" << std::endl;
moduleCreateInfo.pCode = (uint32_t*)shaderCode; return nullptr;
moduleCreateInfo.flags = 0; }
VK_CHECK_RESULT(vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule));
delete[] shaderCode;
return shaderModule;
} }
#endif #endif

View file

@ -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