提示コードの三つ目のコードですがコメント部のコードで提示画像のアクセスエラーが発生します。
(unsigned char*)*textureID.back().fileData);
部が原因なのですが(const void *)型としてstd::shared_ptrFrameWork::TextureDataのstd::shared_ptr<unsigned char>型を渡すにはどうすればいいのでしょうか?
cpp
1#include "Texture.hpp" 2 3#define STB_IMAGE_IMPLEMENTATION 4#include "stb/stb_image.h" 5 6// ##################################### 画像読み込み ##################################### 7std::shared_ptr<FrameWork::TextureData> FrameWork::LoadTexture(const char* fileName) 8{ 9 //std::shared_ptr<FrameWork::TextureData> data = std::make_shared<FrameWork::TextureData>(); 10 TextureData data;// = std::make_shared<FrameWork::TextureData>(); 11 data.fileData = NULL; 12 //data.fileData = std::make_shared<unsigned char*>(stbi_load(fileName, &data.size.x, &data.size.y, &data.channel, 0)); //画像読み込み 13 data.fileData = std::shared_ptr<unsigned char>(stbi_load(fileName, &data.size.x, &data.size.y, &data.channel, 0), stbi_image_free); 14 assert(data.fileData && "画像ファイルがありません。"); 15 16 return std::make_shared<FrameWork::TextureData>(data); 17} 18
cpp
1#ifndef ___TEXTURE_HPP_ 2#define ___TEXTURE_HPP_ 3#include <iostream> 4#include "glm/glm.hpp" 5#include "glew/include/GL/glew.h" 6 7/*######################################################################### 8# テクスチャ構造体 9 10説明 11 テクスチャのデータ 12###########################################################################*/ 13namespace FrameWork 14{ 15 //テクスチャデータ構造体 16 typedef struct 17 { 18 glm::ivec2 size; //画像サイズ 19 std::shared_ptr<unsigned char> fileData; //画像データ 20 int channel; //画像のチャンネル数 21 GLuint ID; //テクスチャID 22 GLuint textureUnitNumber; //テクスチャユニット番号 23 }TextureData; 24 25 std::shared_ptr<FrameWork::TextureData> LoadTexture(const char* fileName); //テクスチャーロード 26} 27#endif
cpp
1 2// ##################################### テクスチャを設定 ##################################### 3void FrameWork::Sprite::setTexture(std::shared_ptr<TextureData> tex) 4{ 5 textureID.push_back(*tex); //テクスチャーIDに追加 6 glGenTextures(1, &textureID.back().ID); //テクスチャIDの生成 7 8 //バインド 9 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 10 glBindTexture(GL_TEXTURE_2D, textureID.back().ID); 11//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 12 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureID.back().size.x, textureID.back().size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, (unsigned char*)*textureID.back().fileData); 13//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 14 // テクスチャの補間設定 15 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 16 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 17 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 18 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 19 20 textureID.back().textureUnitNumber = GL_TEXTURE0 + (int)textureUnitCount; 21 22 //テクスチャユニットを設定できない場合はエラー 23 assert(textureID.back().textureUnitNumber < GL_TEXTURE31); 24 25 textureUnitCount++; //テクスチャーユニットカウントに加算 26}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。