Код: Выделить всё
bool WindowManager::LoadTextureFromResource(const int resourceNum, GLuint* texture)
{
HBITMAP hBmp = static_cast(
LoadImageW(GetModuleHandle(nullptr),
MAKEINTRESOURCEW(resourceNum),
IMAGE_BITMAP,
0, 0,
LR_CREATEDIBSECTION)
);
if (!hBmp) {
OutputDebugStringA("Failed to load bitmap resource ID ");
OutputDebugStringA(std::to_string(resourceNum).c_str());
OutputDebugStringA("\n");
return false;
}
// 2) Inspect its properties
BITMAP bmp;
GetObjectW(hBmp, sizeof(bmp), &bmp);
int width = bmp.bmWidth;
int height = bmp.bmHeight;
int bpp = bmp.bmBitsPixel; // 24 or 32 usually
BITMAPINFOHEADER bi = {};
bi.biSize = sizeof(bi);
bi.biWidth = width;
bi.biHeight = -height; // top-down DIB
bi.biPlanes = 1;
bi.biBitCount = static_cast(bpp);
bi.biCompression = BI_RGB;
// Allocate the pixel buffer
size_t pixelCount = size_t(width) * size_t(height);
std::vector pixels;
pixels.resize(pixelCount * (bpp / 8));
HDC hdc = GetDC(nullptr);
GetDIBits(hdc, hBmp, 0, height, pixels.data(),
reinterpret_cast(&bi), DIB_RGB_COLORS);
ReleaseDC(nullptr, hdc);
DeleteObject(hBmp);
// 3) Upload to OpenGL
GLuint tex = 0;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
// Ensure no row-alignment issues
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
GLenum glFormat = (bpp == 32) ? GL_BGRA : GL_BGR;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height,
0, glFormat, GL_UNSIGNED_BYTE, pixels.data());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glBindTexture(GL_TEXTURE_2D, 0);
*texture = tex;
if (pixels.empty()) return false;
if (tex == 0) return false;
return true;
}
< /code>
У меня проблема, когда я редактирую значение указателя (*texture = tex;Код: Выделить всё
Exception thrown: read access violation. _Val was 0xFFFFFFFFFFFFFFFF.
Я попытался изменить функцию, чтобы она вернула значение глюки (в случае плохого использования указателя), но это приводит к точно такой же ошибке, эта проблема с загрузкой моего изображения или где -то еще?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... of-pointer