gpt4 book ai didi

android - AssetManager 无法在 NDK 中运行

转载 作者:行者123 更新时间:2023-11-29 16:00:51 26 4
gpt4 key购买 nike

我正在使用 OpenGL ES 3.0 并使用 Eclipse NDK 通过 Google Nexus 渲染体积数据。我正在使用 AssetManager 将 16 MB 原始文件的卷数据加载到真实设备,但它不工作。我也将资源存储在包含 header 的 Assets 文件夹中,但我仍然在 logcat __load_uniform_float:802>:GL_INVALID_OPERATION 中收到相同的错误我尝试用 Google 搜索一些相关示例,但找不到。

这是我的代码:

int LoadVolume()
{
GLubyte *pdata;
const unsigned int BUFFER_SIZE = XDIM*YDIM*ZDIM;
GLubyte buffer[BUFFER_SIZE];
AAssetManager*mgr;
AAsset* asset=AAssetManager_open(mgr,"Engine256.raw",AASSET_MODE_BUFFER);
if(!asset)
{
__android_log_print(ANDROID_LOG_ERROR, "TAG", "_ASSET_NOT_FOUND_");
return 0;
}
pdata=(GLubyte*)AAsset_read(asset,buffer,BUFFER_SIZE);

AAsset_close(asset);

glGenTextures ( 1,&textureId );
glBindTexture ( GL_TEXTURE_3D,textureId );
glTexImage3D ( GL_TEXTURE_3D, 0, GL_RED,XDIM, YDIM, ZDIM, 0,
GL_RED, GL_UNSIGNED_BYTE,pdata);

glTexParameteri ( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri ( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri ( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri ( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE );
glTexParameteri ( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);

glBindTexture ( GL_TEXTURE_3D, 0 );
return 1;
}

最佳答案

如果你看这两行:

AAssetManager*mgr;
AAsset* asset=AAssetManager_open(mgr,"Engine256.raw",AASSET_MODE_BUFFER);

您将 mgr 声明为指针变量,但没有为其赋值。然后在下一行使用它,同时它还未初始化。

您需要通过 JNI 接口(interface)将 Java 代码中的 AssetManager 对象传递到 native 代码中,然后使用此调用获取 AAssetManager,其中 assetManager是传入的Java对象,作为jobject类型的参数进入native代码。

AAssetManager *mgr = AAssetManager_fromJava(env, assetManager);

这个问题/答案更详细地展示了如何将 Java 对象传递给 native 代码: Can't access AAssetManager in native code passed from Java in WallpaperService .

关于android - AssetManager 无法在 NDK 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24604656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com