【发布时间】:2014-12-23 06:07:13
【问题描述】:
我想从原始纹理数据创建 devIL 图像,但我似乎找不到方法。正确的方法似乎是带有 IL_RAW 的 ilLoadL,但我无法让它工作。 here 中的文档说数据中应该有 13 字节的标头,所以我只是将无意义的数据放在那里。如果我将 0 设置为 ilLoadL 的“size”参数, 无论如何,我都会得到黑色纹理。否则我的程序拒绝绘制任何东西。 ilIsImage 返回 true,我可以从中创建 openGL 纹理。如果我从文件加载纹理,则代码有效。
这并不多,但这是我到目前为止的代码:
//Loading:
ilInit();
iluInit();
ILuint ilID;
ilGenImages(1, &ilID);
ilBindImage(ilID);
ilEnable(IL_ORIGIN_SET);
ilOriginFunc(IL_ORIGIN_LOWER_LEFT);
//Generate 13-byte header and fill it with meaningless numbers
for (int i = 0; i < 13; ++i){
data.insert(data.begin() + i, i);
}
//This fails.
if (!ilLoadL(IL_RAW, &data[0], size)){
std::cout << "Fail" << std::endl;
}
纹理创建:
ilBindImage(ilId[i]);
ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
glBindTexture(textureTarget, id[i]);
glTexParameteri(textureTarget, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(textureTarget, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(textureTarget, GL_TEXTURE_MIN_FILTER, filters[i]);
glTexParameterf(textureTarget, GL_TEXTURE_MAG_FILTER, filters[i]);
glTexImage2D(textureTarget, 0, GL_RGBA,
ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT),
0, GL_RGBA, GL_UNSIGNED_BYTE, ilGetData());
【问题讨论】:
标签: c++ opengl vector textures devil