我正在使用 stb_image 将图像上传到 GPU。如果我只是使用 stbi_load 上传图像,我可以确认(nvidia Nsight)图像已正确存储在 GPU 内存中。但是,我喜欢在上传到 GPU 之前调整一些图像的大小。在这种情况下,我会崩溃。这是代码:
int textureWidth;
int textureHeight;
int textureChannelCount;
stbi_uc* pixels = stbi_load(fullPath.string().c_str(), &textureWidth, &textureHeight, &textureChannelCount, STBI_rgb_alpha);
if (!pixels) {
char error[512];
sprintf_s(error, "Failed to load image %s!", pathToTexture);
throw std::runtime_error(error);
}
stbi_uc* resizedPixels = nullptr;
uint32_t imageSize = 0;
if (scale > 1.0001f || scale < 0.9999f) {
stbir_resize_uint8(pixels, textureWidth, textureHeight, 0, resizedPixels, textureWidth * scale, textureHeight * scale, 0, textureChannelCount);
stbi_image_free(pixels);
textureWidth *= scale;
textureHeight *= scale;
imageSize = textureWidth * textureHeight * textureChannelCount;
} else {
resizedPixels = pixels;
imageSize = textureWidth * textureHeight * textureChannelCount;
}
// Upload the image to the gpu
当此代码在规模设置为 的情况下运行时1.0f
,它可以正常工作。但是,当我将比例设置为 时0.25f
,程序在方法中崩溃stbir_resize_uint8
。我在这两种情况下提供的图像都是1920x1080 RGBA PNG
. Alpha 通道设置为1.0f
横跨整个图像。
我必须使用哪个函数来调整图像大小?
编辑:如果我自己分配内存,该函数不再崩溃并且工作正常。但我虽然 stb 在内部处理所有内存分配。我错了吗?