У меня есть пара спрайтов для загрузки, которая может привести к ошибке:
Исключение, выданное в 0x7AF40CFE (nvoglv32.dll) в some.exe: 0xC0000005: Местоположение чтения нарушения доступа 0x0BA80000.
Иногда по какой-то причине они загружаются, но отображаются так:
Все эти спрайты хорошо открываются в других приложениях, поэтомуЯ не думаю, что проблема в том, что они сломаны.
Вот мой код загрузки изображения:
SDL_Surface* image = IMG_Load(fileName);
if (image == nullptr)
{
return false;
}
_width = static_cast<float>(image->w);
_height = static_cast<float>(image->h);
int mode = GL_RGB;
if (image->format->BytesPerPixel == 4)
{
mode = GL_RGBA;
}
glGenTextures(1, &_sprite_ID);
glBindTexture(GL_TEXTURE_2D, _sprite_ID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D( // ERROR HERE
GL_TEXTURE_2D,
0,
mode,
static_cast<GLsizei>(_width),
static_cast<GLsizei>(_height),
0,
mode,
GL_UNSIGNED_BYTE,
image->pixels);
SDL_FreeSurface(image);
return true;
Рендеринг:
UseShader();
glBindVertexArray(_VAO);
glBindTexture(GL_TEXTURE_2D, _sprite_ID);
glDrawArrays(GL_TRIANGLES, 0, 6);
glUseProgram(0);
ФайлФормат: PNG
и
Я установил 32 байта на пиксель:
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);