From b67c35299b969aa9a301d2807ab2717426c4414f Mon Sep 17 00:00:00 2001 From: Sascha Willems Date: Sat, 3 Aug 2019 18:20:27 +0200 Subject: [PATCH] Android asset loading --- base/VulkanTexture.hpp | 9 ++------- examples/texturearray/texturearray.cpp | 8 +++----- examples/texturecubemap/texturecubemap.cpp | 8 +++----- examples/texturemipmapgen/texturemipmapgen.cpp | 8 +++----- 4 files changed, 11 insertions(+), 22 deletions(-) diff --git a/base/VulkanTexture.hpp b/base/VulkanTexture.hpp index d987a755..ff9c59c2 100644 --- a/base/VulkanTexture.hpp +++ b/base/VulkanTexture.hpp @@ -64,22 +64,17 @@ namespace vks { ktxResult result = KTX_SUCCESS; #if defined(__ANDROID__) - // Textures are stored inside the apk on Android (compressed) - // So they need to be loaded via the asset manager AAsset* asset = AAssetManager_open(androidApp->activity->assetManager, filename.c_str(), AASSET_MODE_STREAMING); if (!asset) { vks::tools::exitFatal("Could not load texture from " + filename + "\n\nThe file may be part of the additional asset pack.\n\nRun \"download_assets.py\" in the repository root to download the latest version.", -1); } size_t size = AAsset_getLength(asset); assert(size > 0); - - void *textureData = malloc(size); + ktx_uint8_t *textureData = new ktx_uint8_t[size]; AAsset_read(asset, textureData, size); AAsset_close(asset); - result = ktxTexture_CreateFromMemory(textureData, size, KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, target); - - free(textureData); + delete[] textureData; #else if (!vks::tools::fileExists(filename)) { vks::tools::exitFatal("Could not load texture from " + filename + "\n\nThe file may be part of the additional asset pack.\n\nRun \"download_assets.py\" in the repository root to download the latest version.", -1); diff --git a/examples/texturearray/texturearray.cpp b/examples/texturearray/texturearray.cpp index 3e5dfdb3..fd5b4236 100644 --- a/examples/texturearray/texturearray.cpp +++ b/examples/texturearray/texturearray.cpp @@ -119,13 +119,11 @@ public: size_t size = AAsset_getLength(asset); assert(size > 0); - void *textureData = malloc(size); + ktx_uint8_t *textureData = new ktx_uint8_t[size]; AAsset_read(asset, textureData, size); AAsset_close(asset); - - result = ktxTexture_CreateFromMemory(textureData, size, KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, target); - - free(textureData); + result = ktxTexture_CreateFromMemory(textureData, size, KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &ktxTexture); + delete[] textureData; #else if (!vks::tools::fileExists(filename)) { vks::tools::exitFatal("Could not load texture from " + filename + "\n\nThe file may be part of the additional asset pack.\n\nRun \"download_assets.py\" in the repository root to download the latest version.", -1); diff --git a/examples/texturecubemap/texturecubemap.cpp b/examples/texturecubemap/texturecubemap.cpp index 3b18d1f3..af95675b 100644 --- a/examples/texturecubemap/texturecubemap.cpp +++ b/examples/texturecubemap/texturecubemap.cpp @@ -140,13 +140,11 @@ public: size_t size = AAsset_getLength(asset); assert(size > 0); - void *textureData = malloc(size); + ktx_uint8_t *textureData = new ktx_uint8_t[size]; AAsset_read(asset, textureData, size); AAsset_close(asset); - - result = ktxTexture_CreateFromMemory(textureData, size, KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, target); - - free(textureData); + result = ktxTexture_CreateFromMemory(textureData, size, KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &ktxTexture); + delete[] textureData; #else if (!vks::tools::fileExists(filename)) { vks::tools::exitFatal("Could not load texture from " + filename + "\n\nThe file may be part of the additional asset pack.\n\nRun \"download_assets.py\" in the repository root to download the latest version.", -1); diff --git a/examples/texturemipmapgen/texturemipmapgen.cpp b/examples/texturemipmapgen/texturemipmapgen.cpp index 1eb40eef..f4fc6714 100644 --- a/examples/texturemipmapgen/texturemipmapgen.cpp +++ b/examples/texturemipmapgen/texturemipmapgen.cpp @@ -124,13 +124,11 @@ public: size_t size = AAsset_getLength(asset); assert(size > 0); - void *textureData = malloc(size); + ktx_uint8_t *textureData = new ktx_uint8_t[size]; AAsset_read(asset, textureData, size); AAsset_close(asset); - - result = ktxTexture_CreateFromMemory(textureData, size, KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, target); - - free(textureData); + result = ktxTexture_CreateFromMemory(textureData, size, KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &ktxTexture); + delete[] textureData; #else if (!vks::tools::fileExists(filename)) { vks::tools::exitFatal("Could not load texture from " + filename + "\n\nThe file may be part of the additional asset pack.\n\nRun \"download_assets.py\" in the repository root to download the latest version.", -1);