【问题标题】:Loading embedded textures with SOIL使用 SOIL 加载嵌入的纹理
【发布时间】:2013-07-12 00:32:23
【问题描述】:

我正在使用这个答案将我的图像嵌入到 .exe 中:

Embedding resources in executable using GCC

以下是我的代码的相关位:

GLuint grass_DTexture;

extern char binary_grass_D_bmp_start[];
extern char binary_grass_D_bmp_size[];

short loadTexture(char *imageData[], GLuint *texture) {
    *texture = SOIL_load_OGL_texture_from_memory(imageData, sizeof(*imageData), SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

    return 1;
}

loadTexture(&binary_grass_D_bmp_start, &grass_DTexture);

但是纹理没有加载,我只是得到一个发白的灰色表面。

编辑:我知道这不是我最初的问题,但是我在使用 mipmap 时遇到了困难。我将我的 loadTexture 函数修改为: 短 loadTexture(char *imageData[], GLuint *texture, int width, int height) { glEnable(GL_TEXTURE_2D); glGenTextures(1, 纹理); glBindTexture(GL_TEXTURE_2D, *texture);

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

    *texture = SOIL_load_OGL_texture_from_memory(imageData, sizeof(*imageData), SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_MIPMAPS);

    //gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, imageData);

    //glTexStorage2D(GL_TEXTURE_2D, 3, GL_RGBA8, width, height);
    //glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, imageData);
    //glGenerateMipmap(GL_TEXTURE_2D);

    glDisable(GL_TEXTURE_2D);
    return 1;
}

这一次,exe一运行就崩溃。我还收到以下警告,这可能是造成这种情况的原因(可能在某处缺少 * 或 &):

init.c:76:2: warning: passing argument 1 of 'loadTexture' from incompatible poin
ter type [enabled by default]
loadTexture.h:1:7: note: expected 'char **' but argument is of type 'char (*)[]'

我已设法将崩溃范围缩小到 SOIL_load_OGL_texture_from_memory 调用。

【问题讨论】:

  • 此代码还会收到多个警告。请问您也可以解决这些问题吗?

标签: c opengl soil


【解决方案1】:

GL_TEXTURE_MIN_FILTER 默认为GL_NEAREST_MIPMAP_LINEAR​

Upload some mipmaps or switch to GL_NEAREST or GL_LINEAR.

【讨论】:

  • 感谢您的回答,它确实引导我朝着正确的方向前进。但是当我尝试使用 mipmap 时,我遇到了一个新问题。我是 OpenGL 的新手,我遇到的很多教程要么使用 GLAUX 等过时的库,要么仅使用文件访问,并且不嵌入纹理。
  • @CHRIS:为什么是gluBuild2DMipmaps()SOIL_FLAG_MIPMAPS 出了什么问题?
  • 啊,我想我可能遇到了我的问题。我的 imageData 是 BMP 文件的内容。 SOIL_load_OGL_texture_from_memory 函数是否设计用于处理原始像素数据?
  • 我认为它需要支持的图像文件的内容,而不是原始像素。
  • 嗯,好吧。那我就难住了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 2015-07-25
  • 1970-01-01
  • 2018-04-20
  • 2020-04-12
  • 2020-12-24
相关资源
最近更新 更多