从Android NDK和OpenGL文件加载纹理
我正在尝试通过OpenGL和android ndk上的stbi_加载加载图像。问题是它生成的纹理无效(等于零) 我使用libGLESv2从Android NDK和OpenGL文件加载纹理,android,c++,graphics,opengl-es,Android,C++,Graphics,Opengl Es,我正在尝试通过OpenGL和android ndk上的stbi_加载加载图像。问题是它生成的纹理无效(等于零) 我使用libGLESv2GLuint image\u纹理; glGenTextures(1,图像和纹理); ... *out_纹理=图像_纹理;//收零 glGenTextures() 在Android平台上,OpenGL渲染通常在专用的工作线程(不同于GUI线程)中完成,因此您很可能从错误的线程调用该方法,或者在OpenGL上下文初始化之前调用该方法(这无法从给定的代码示例中推断)
GLuint image\u纹理;
glGenTextures(1,图像和纹理);
...
*out_纹理=图像_纹理;//收零
glGenTextures()
在Android平台上,OpenGL渲染通常在专用的工作线程(不同于GUI线程)中完成,因此您很可能从错误的线程调用该方法,或者在OpenGL上下文初始化之前调用该方法(这无法从给定的代码示例中推断)。您可能是正确的。我没有启动OpenGL,我甚至不知道如何以一种简单有效的方式来实现它。我正在开发一个“mod”,那么我应该如何实现OpenGL上下文引导呢?我有两个主要的函数,我认为这是合适的:void InitInGame()和void MainLoop()。不幸的是,我不能建议从哪里开始——这取决于游戏架构(我假设修改后的游戏已经使用OpenGL ES,否则加载任何纹理对我来说都没有意义;但除此之外,在不知道游戏渲染管道细节的情况下,如何使用纹理还不清楚)。
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;
}