提示コードの///
コメント部内部のコードですがこの関数で例外エラーが発生してしまう原因が知りたいです。提示コードは自分でバイナリファイル化した画像のピクセル部をdata 変数部に入れてそれを指定しているのですが試しに関数の最後の引数をNULLにしてみたら動きました。これは何が原因なのでしょうか?
cpp
//テクスチャ設定 unsigned int textureNum = 0; fread(&textureNum, sizeof(unsigned int), 1, file); //テクスチャ数 std::vector<FrameWork::Texture> texture; printf("%d\n", textureNum); for (int i = 0; i < textureNum; i++) { texture.push_back(FrameWork::Texture{glm::ivec2(0,0),0}); unsigned char *data = NULL; glm::ivec2 size; unsigned char channel; char textureName[TEXTURE_FILE_PATH_SIZE] = {'\0'}; fread(textureName, sizeof(char), TEXTURE_FILE_PATH_SIZE, file); //テクスチャ名 fread(&channel, sizeof(unsigned char), 1, file); //チャンネル数 fread(&size.x, sizeof(int), 1, file); //サイズX printf("%d\n",size.x); fread(&size.y, sizeof(int), 1, file); //サイズY data = (unsigned char*)malloc(static_cast<size_t>(size.x * size.y)); fread(data, sizeof(unsigned char), static_cast<size_t>(size.x * size.y), file); //データ glGenTextures(1, &texture.back().ID); //テクスチャIDの生成 glBindTexture(GL_TEXTURE_2D, texture.back().ID); // IDバインド texture.back().size = size; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //テクスチャ生成 if (channel == (unsigned char)4) { printf("あああ\n"); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.x, size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); printf("いいい\n"); } else if (channel == (unsigned char)3) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, size.x, size.y, 0, GL_RGB, GL_UNSIGNED_BYTE, data); } else if (channel == (unsigned char)2) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RG, size.x, size.y, 0, GL_RG, GL_UNSIGNED_BYTE, data); } else if (channel == (unsigned char)1) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, size.x, size.y, 0, GL_RED, GL_UNSIGNED_BYTE, data); } else { std::cerr << "未対応の形式のチャンネル数です: " << textureName << " " << "チャンネル数: " << channel << std::endl; assert(0); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // テクスチャの補間設定 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glGenerateMipmap(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); }
まだ回答がついていません
会員登録して回答してみよう