Shader module loading from android asset manager (#97)
This commit is contained in:
parent
333eede595
commit
fed45eac20
2 changed files with 42 additions and 7 deletions
|
|
@ -8,10 +8,6 @@
|
|||
|
||||
#include "vulkantools.h"
|
||||
|
||||
#ifdef __ANDROID__
|
||||
#include "vulkanandroid.h"
|
||||
#endif
|
||||
|
||||
namespace vkTools
|
||||
{
|
||||
|
||||
|
|
@ -301,6 +297,37 @@ namespace vkTools
|
|||
return (char*)shader_code;
|
||||
}
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
// Android shaders are stored as assets in the apk
|
||||
// So they need to be loaded via the asset manager
|
||||
VkShaderModule loadShader(AAssetManager* assetManager, const char *fileName, VkDevice device, VkShaderStageFlagBits stage)
|
||||
{
|
||||
// Load shader from compressed asset
|
||||
AAsset* asset = AAssetManager_open(assetManager, fileName, AASSET_MODE_STREAMING);
|
||||
assert(asset);
|
||||
size_t size = AAsset_getLength(asset);
|
||||
assert(size > 0);
|
||||
|
||||
char *shaderCode = new char[size];
|
||||
AAsset_read(asset, shaderCode, size);
|
||||
AAsset_close(asset);
|
||||
|
||||
VkShaderModule shaderModule;
|
||||
VkShaderModuleCreateInfo moduleCreateInfo;
|
||||
VkResult err;
|
||||
|
||||
moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
||||
moduleCreateInfo.pNext = NULL;
|
||||
|
||||
moduleCreateInfo.codeSize = size;
|
||||
moduleCreateInfo.pCode = (uint32_t*)shaderCode;
|
||||
moduleCreateInfo.flags = 0;
|
||||
err = vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule);
|
||||
assert(!err);
|
||||
|
||||
return shaderModule;
|
||||
}
|
||||
#else
|
||||
VkShaderModule loadShader(const char *fileName, VkDevice device, VkShaderStageFlagBits stage)
|
||||
{
|
||||
size_t size = 0;
|
||||
|
|
@ -322,7 +349,7 @@ namespace vkTools
|
|||
|
||||
return shaderModule;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
VkShaderModule loadShaderGLSL(const char *fileName, VkDevice device, VkShaderStageFlagBits stage)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -20,11 +20,13 @@
|
|||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#ifdef _WIN32
|
||||
#if defined(_WIN32)
|
||||
#include <windows.h>
|
||||
#include <fcntl.h>
|
||||
#include <io.h>
|
||||
#else
|
||||
#elif defined(__ANDROID__)
|
||||
#include "vulkanandroid.h"
|
||||
#include <android/asset_manager.h>
|
||||
#endif
|
||||
|
||||
// Custom define for better code readability
|
||||
|
|
@ -69,8 +71,14 @@ namespace vkTools
|
|||
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
|
||||
#if defined(__ANDROID__)
|
||||
VkShaderModule loadShader(AAssetManager* assetManager, const char *fileName, VkDevice device, VkShaderStageFlagBits stage);
|
||||
#else
|
||||
VkShaderModule loadShader(const char *fileName, VkDevice device, VkShaderStageFlagBits stage);
|
||||
#endif
|
||||
|
||||
// Load a GLSL shader
|
||||
// Note : Only for testing purposes, support for directly feeding GLSL shaders into Vulkan
|
||||
// may be dropped at some point
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue