Я нашел эту тему: GLFW SetWindowIcon Меня удивило, как класс GLFWimage управляет своими символами * пикселей. Сам класс не имеет конструктора, поэтому он не может сам создать массив, содержащий данные изображения. Конечно, я могу просто скопировать указатель на предварительно созданный массив данных, но пример в теме должен освободить данные после загрузки. Я предполагаю, что glfwSetWindowIcon просто копирует данные из указателя GLFWimage. Честно говоря, я не вижу, что освобождается в виде значков. [0] .pixels просто получает указатель от функции. Я написал себе класс, который загружает изображение. Я устанавливаю значение GLFWimage для данных внутри этого класса. Чем я позвонил: glfwSetWindowIcon. Затем я изменил данные внутри. Значок остается в строке меню и в верхней панели окна. Меня это еще больше сбивает с толку, поскольку в opengl так много противоречивых ответов об освобождении данных. Вот класс, который я написал. Помните, что файл, отправленный его конструктору, должен быть предварительно обработан для необработанных данных:
class icon_gl{
public:
int width;
int height;
unsigned char * pixels;
bool failed;
int file_size;
icon_gl(int set_width, int set_height, string name){
width = set_width;
height = set_height;
failed = 1;
pixels = new unsigned char[set_width*set_height*4];
ifstream file(name.c_str(), ios::binary);
if(file.is_open()){
file.seekg(0, ios::end);
file_size = file.tellg();
}
if(file_size == set_width*set_height*4){
failed =0;
file.seekg(0, ios::beg);
file.read((char*)pixels, set_width*set_height*4);
}
}
~icon_gl(){
delete[] pixels;
}
void import(GLFWimage * img_gl){
img_gl->width=width;
img_gl->height=height;
img_gl->pixels = pixels;
}
};
Вот главное:
icon_gl icon32(32, 32, "iconimage.i");
GLFWimage ico_image;
icon32.import(&ico_image);
glfwSetWindowIcon(window, 1, &ico_image);
И поведение &&:
for (int i=0; i<32*32*4; i++)icon32.pixels[i] = 255;
Вопросы: Как opengl управляет своими данными? Может быть, вы могли бы дать мне несколько хороших ссылок? Я ищу весь объем, а не один случай. Как работает SOIL_free_image_data? Это просто ошибка или каким-то образом редактировать параметры указателя (длина данных)? Разве управление длиной указателя не относится к объему работы компилятора?