Я решил использовать SOIL для загрузки изображений для использования с OpenGL для моего проекта. У меня есть этот метод, который загружает изображение и возвращает GLTexture, который является структурой, которая проведет GLuint textureid и два Интс ширина и высота:SOIL - Получение изображений Размеры
GLTexture loadTexture(const char *filePath) {
GLTexture texture = {};
int width;
int height;
unsigned char *data;
//Load Image File Directly into an OpenGL Texture
texture.id = SOIL_load_OGL_texture
(
filePath,
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
);
//Error Checking (Load Process)
if (texture.id == 0) {
fatalError("SOIL Loading Error!");
}
//Generate and Bind Texture
glGenTextures(1, &(texture.id));
glBindTexture(GL_TEXTURE_2D, texture.id);
//Get Width, Height and Data of Image
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, &data);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &data);
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_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glGenerateMipmap(GL_TEXTURE_2D);
//Unbind Texture
glBindTexture(GL_TEXTURE_2D, 0);
//Return Texture
texture.width = width;
texture.height = height;
return texture;
}
Насколько я знаю, glGetTexLevelParameteriv () должен возвращать ширину текстуры, которая привязана к ширине и высоте, но всякий раз, когда я загружаю изображение, это возвращает 0.
Должен ли я заполнять ширину и высоту в качестве параметров для метода или можно получить их через OpenGL?
А, я вижу. Теперь код работает. Когда я загружаю изображение в формате PNG размером 33x32 пикселя, он говорит, что ширина равна 64px, а высота 32px, что не совсем правильно ... – MysticSheik
Я не знаю ПОЧВЫ, но похоже, что это увеличит изображение до следующая мощность двух размеров. Может быть, это можно изменить? – BDL
@MysticSheik: Это правильно, поскольку сжатые изображения DXT нуждаются в размерах, основанных на силах-двух (другие типы текстур в GL2 + нет). Если вы удалили этот флаг ('SOIL_FLAG_COMPRESS_TO_DXT'), очень вероятно, что SOIL передаст данные, не перемасштабируя его. –