生のテクスチャ データから devIL イメージを作成したいのですが、それを行う方法が見つからないようです。適切な方法はIL_RAWを使用したilLoadLのようですが、うまくいきません。ここのドキュメントには、データには 13 バイトのヘッダーが必要であると書かれているので、そこに意味のないデータを入れただけです。ilLoadL の size パラメータに 0 を指定すると、どうしてもテクスチャが黒くなります。そうしないと、私のプログラムは何も描画することを拒否します。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());