我從來沒有遇到過這個錯誤,我在項目中的其他地方使用了glTexImage2D
,沒有錯誤。下面是一個什麼樣的錯誤的Visual Studio顯示截圖,並拆卸的觀點: 使用glTexImage2D時出現「框不在模塊中」
給出的行中有ptr
我假設有一個指針錯誤,但我不知道我在做什麼錯誤。 以下是我用於將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
。 圖像的路徑是正確的。 我知道這是glTexImage2D
導致的問題,因爲我在surfaceToTexture
的開始處添加了一個斷點並逐步完成了該功能。 即使它不起作用,texture
和surface
確實具有看似正確的值/屬性。
任何想法?
你確定你的圖片的像素格式是BGRA(或者至少是每個像素4字節?) – keltar
@keltar好喊我沒有檢查過,當我回家時我會這樣做。我記得改變BGRA到RGBA導致了一個不同的錯誤,一些PDB沒有加載,想法? – jaunt
BGRA/RGBA是不同的順序,所以是的,它會導致變形的顏色。雖然每像素字節數相同。但是如果你的圖像是RGB/BGR,但你告訴GL它是BGRA - 這是完全不同的事情;它會得到垃圾數據或崩潰。 – keltar