从文件问题加载纹理 Android NDK 和 OpenGL

Load Texture From File problem Android NDK and OpenGL

本文关键字:NDK OpenGL Android 纹理 文件 问题 加载      更新时间:2023-10-16

我正在尝试通过OpenGL加载图像,并在android ndk上stbi_load。问题是它正在生成无效纹理(等于零(。

LoadTextureFromFile("/storage/emulated/0/Download/BPV/mic_close.jpg", &my_image_texture, &my_image_width, &my_image_height);
bool CGUI::LoadTextureFromFile(const char* filename, GLuint* out_texture, int* out_width, int* out_height)
{
// Load from file
int image_width = 0;
int image_height = 0;
unsigned char* image_data = stbi_load(filename, &image_width, &image_height, NULL, 4);
if (image_data == NULL)
return false;
// Create a OpenGL texture identifier
GLuint image_texture;
glGenTextures(1, &image_texture);
glBindTexture(GL_TEXTURE_2D, image_texture);
// Setup filtering parameters for display
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// Upload pixels into texture
glPixelStorei(0x0CF2, 0);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image_width, image_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data);
stbi_image_free(image_data);
*out_texture = image_texture; // Receive zero
*out_width = image_width;
*out_height = image_height;
return true;
}

我使用 libGLESv2

GLuint image_texture;
glGenTextures(1, &image_texture);
...
*out_texture = image_texture; // Receive zero

glGenTextures()只是分配新对象,实际上永远不会失败,除非在没有活动 OpenGL 上下文的情况下调用。

在 Android 平台上,OpenGL 渲染通常在专用工作线程(不同于 GUI 线程(中完成,因此很可能您从错误的线程或在 OpenGL 上下文初始化之前调用该方法(无法从给定的代码示例中推断出来(。