これまでにこのエラーに遭遇したことはなく、glTexImage2D
をエラーなしでプロジェクトのどこかで使用しています。ラインは、私はポインタエラーがありますと仮定しますが、私は私がやっているかわからない、それでptr
を持って考えると
glTexImage2Dを使用しているときに「フレームがモジュールではありません」
:以下は、どのようなエラーのVisual Studioショーのスクリーンショット、および分解の図です。違う。 以下はSDL_surface
からテクスチャに変換するために使用する関数です。
void surfaceToTexture(SDL_Surface *&surface, GLuint &texture) {
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, surface->w, surface->h, 0, GL_BGRA, GL_UNSIGNED_BYTE, surface->pixels);
glDisable(GL_TEXTURE_2D);
}
テキストロードする場合、この機能は、例えば、プログラムの他の場所で成功:
SDL_Surface *surface;
surface = TTF_RenderText_Blended(tempFont, message.c_str(), color);
if (surface == NULL)
printf("Unable to generate text surface using font: %s! SDL_ttf Error: %s\n", font.c_str(), TTF_GetError());
else {
SDL_LockSurface(surface);
width = surface->w;
height = surface->h;
if (style != TTF_STYLE_NORMAL)
TTF_SetFontStyle(tempFont, TTF_STYLE_NORMAL);
surfaceToTexture(surface, texture);
SDL_UnlockSurface(surface);
}
SDL_FreeSurface(surface);
ではなく、画像読み込み時:
SDL_Surface* surface = IMG_Load(path.c_str());
if (surface == NULL)
printf("Unable to load image %s! SDL_image Error: %s\n", path.c_str(), IMG_GetError());
else{
SDL_LockSurface(surface);
width = (w==0)?surface->w:w;
height = (h==0)?surface->h/4:h;
surfaceToTexture(surface, texture);
SDL_UnlockSurface(surface);
}
SDL_FreeSurface(surface);
の両方の例がどこのクラスから抽出さをtexture
が定義されています。 イメージへのパスが正しいです。 surfaceToTexture
の先頭にブレークポイントを追加して機能を実行したときに問題が発生するのは、glTexImage2D
です。 動作しなくても、texture
とsurface
は一見正しい値/プロパティを持っています。
アイデア?
イメージのピクセル形式はBGRA(または少なくとも1ピクセルあたり4バイトですか?)ですか? – keltar
@keltar良い叫び私はそれをチェックしていませんでした。私はBGRAをRGBAに変更して、別のエラーになったことを思い出しました.pdbには読み込まれなかったものがいくつかありましたか? – jaunt
BGRA/RGBAは異なる順番ですので、変形した色になります。 1ピクセルあたりのバイト数は同じです。しかし、あなたの画像がRGB/BGRですが、GLにBGRAと言えば、それは全く違うものです。ゴミデータやクラッシュが発生します。 – keltar