我正在使用 OpenGL ES 3.0 并使用 Eclipse NDK 通过 Google Nexus 渲染体积数据。我正在使用 AssetManager 将体积数据(16 MB 的原始文件)加载到真实设备,但它无法正常工作。我也将资源存储在包含标题的资产文件夹中,但我仍然在 logcat 中收到相同的错误 __load_uniform_float:802>:GL_INVALID_OPERATION 我尝试谷歌搜索一些相关示例但找不到任何相关示例。
这是我的代码:
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;
}