Hide Android asset SDK handles
This commit is contained in:
@@ -11,12 +11,21 @@
|
||||
#ifdef __ANDROID__
|
||||
#include <android/asset_manager.h>
|
||||
#include <dirent.h>
|
||||
AAssetManager* Asset::m_am;
|
||||
void* Asset::m_android_asset_manager;
|
||||
bool android_create_dir(const std::string& path);
|
||||
|
||||
void Asset::set_android_asset_manager(AAssetManager* asset_manager)
|
||||
namespace {
|
||||
|
||||
[[nodiscard]] AAsset* android_asset_handle(void* asset)
|
||||
{
|
||||
m_am = asset_manager;
|
||||
return static_cast<AAsset*>(asset);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void Asset::set_android_asset_manager(void* asset_manager)
|
||||
{
|
||||
m_android_asset_manager = asset_manager;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -72,7 +81,7 @@ std::vector<std::string> Asset::list_files(std::string folder, const std::string
|
||||
#elif __ANDROID__
|
||||
if (is_asset)
|
||||
{
|
||||
AAssetDir* dir = AAssetManager_openDir(Asset::m_am, folder.c_str());
|
||||
AAssetDir* dir = AAssetManager_openDir(static_cast<AAssetManager*>(Asset::m_android_asset_manager), folder.c_str());
|
||||
while (const char* name = AAssetDir_getNextFileName(dir))
|
||||
{
|
||||
//LOG("asset: %s", name);
|
||||
@@ -243,7 +252,10 @@ bool Asset::open(const char* path)
|
||||
#ifdef __ANDROID__
|
||||
if (is_asset(path))
|
||||
{
|
||||
if (!(m_asset = AAssetManager_open(m_am, path, AASSET_MODE_RANDOM)))
|
||||
if (!(m_android_asset = AAssetManager_open(
|
||||
static_cast<AAssetManager*>(m_android_asset_manager),
|
||||
path,
|
||||
AASSET_MODE_RANDOM)))
|
||||
{
|
||||
LOG("AAssetManager_open failed %s", path);
|
||||
return false;
|
||||
@@ -289,8 +301,8 @@ glm::uint8_t* Asset::read_all()
|
||||
{
|
||||
if (is_asset(m_current_path))
|
||||
{
|
||||
m_len = (int)AAsset_getLength(m_asset);
|
||||
m_data = (uint8_t*)AAsset_getBuffer(m_asset);
|
||||
m_len = (int)AAsset_getLength(android_asset_handle(m_android_asset));
|
||||
m_data = (uint8_t*)AAsset_getBuffer(android_asset_handle(m_android_asset));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -322,9 +334,9 @@ glm::uint8_t* Asset::read_all()
|
||||
void Asset::close()
|
||||
{
|
||||
#ifdef __ANDROID__
|
||||
if (m_asset)
|
||||
AAsset_close(m_asset);
|
||||
m_asset = nullptr;
|
||||
if (m_android_asset)
|
||||
AAsset_close(android_asset_handle(m_android_asset));
|
||||
m_android_asset = nullptr;
|
||||
#else
|
||||
if (m_fp)
|
||||
fclose(m_fp);
|
||||
|
||||
11
src/asset.h
11
src/asset.h
@@ -1,19 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef __ANDROID__
|
||||
struct AAsset;
|
||||
struct AAssetManager;
|
||||
#endif
|
||||
|
||||
class Asset
|
||||
{
|
||||
public:
|
||||
#ifdef __ANDROID__
|
||||
static void set_android_asset_manager(AAssetManager* asset_manager);
|
||||
static void set_android_asset_manager(void* asset_manager);
|
||||
|
||||
private:
|
||||
static AAssetManager* m_am;
|
||||
AAsset* m_asset = nullptr;
|
||||
static void* m_android_asset_manager;
|
||||
void* m_android_asset = nullptr;
|
||||
|
||||
public:
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user