Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Android NDK和OpenGL文件加载纹理_Android_C++_Graphics_Opengl Es - Fatal编程技术网

从Android NDK和OpenGL文件加载纹理

从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上下文初始化之前调用该方法(这无法从给定的代码示例中推断)

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

我使用libGLESv2

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;
}