【问题标题】:Load Texture From File problem Android NDK and OpenGL从文件加载纹理问题 Android NDK 和 OpenGL
【发布时间】:2020-05-19 06:39:24
【问题描述】:

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

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

【问题讨论】:

    标签: android c++ graphics opengl-es


    【解决方案1】:
      GLuint image_texture;
      glGenTextures(1, &image_texture);
      ...
      *out_texture = image_texture; // Receive zero
    

    glGenTextures() 只是分配新对象,实际上从不失败,在没有活动 OpenGL 上下文的情况下调用时保存。

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

    【讨论】:

    • 你可能是对的。我没有启动 OpenGL,我什至不知道如何以一种简单有效的方式来完成它。我正在开发一个“mod”,那么我应该如何实现 OpenGL 上下文引导?我有两个我认为适合的主要函数:void InitInGame () 和 void MainLoop ()
    • 不幸的是,我无法建议从哪里开始——这取决于游戏架构(我想修改后的游戏已经使用 OpenGL ES,否则加载任何纹理对我来说毫无意义;但除此之外,在不了解游戏渲染管道细节的情况下,尚不清楚如何使用纹理)。
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2011-11-12
    • 2011-08-01
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多