Этот вопрос сильно изменился с тех пор, как он был задан впервые, потому что я не понимал, как мало я знал о том, о чем спрашивал. И одна проблема, связанная с изменением размера, затуманивала мою способность понимать большую проблему создания и использования буфера кадра. Если вам просто нужен кадровый буфер, перейдите к ответу ... для истории я оставил исходный вопрос нетронутым.
Вопрос новичка. У меня есть проект GL, над которым я работаю, и я пытаюсь разработать стратегию выбора с использованием уникальных цветов. Большинство обсуждений/учебников вращаются вокруг рисования выбираемых объектов в заднем буфере и вычисления выбора, когда пользователь щелкает где-нибудь. Я хочу, чтобы буфер выбора был постоянным, чтобы я мог быстро вычислять попадания при любом движении мыши и не перерисовывал буфер выбора, пока не изменится отображение или геометрия объекта.
Казалось бы, лучшим выбором будет выделенный объект фреймбуфера. Вот моя проблема. Помимо того, что я совершенно новичок в объектах фреймбуфера, мне любопытно. Мне лучше удалить и воссоздать объект frambuffer для событий размера окна или создать его один раз с максимальным разрешением экрана, а затем использовать то, что может быть лишь небольшой его частью. Мои события работают должным образом, чтобы вызывать процедуру буфера кадра только один раз для того, что может быть потоком многих событий изменения размера, но меня беспокоит фрагментация памяти графического процессора или другие проблемы, воссоздание буфера, возможно, много раз.
Кроме того, будет ли объект фреймбуфера (текстура и глубина) вести себя согласованно при использовании только его части.
Идеи? Я совсем не в себе?
РЕДАКТИРОВАТЬ: у меня есть настройка объекта фреймбуфера и теперь я работаю с размерами окна, и я изменяю его размер вместе с окном. Я думаю, что моя проблема была классическим «переосмыслением». Хотя, безусловно, следует по возможности избегать удаления/восстановления объектов на графическом процессоре. Пока он обрабатывается правильно, изменения размеров относительно невелики.
Что я нашел, так это установить флаг и пометить буфер как грязный при изменении размера окна, а затем дождаться обычного события мыши, прежде чем изменять размер буфера. Обычный ввод или перемещение мыши сигнализирует о том, что вы закончили перетаскивание окна по размеру и готовы вернуться к работе. Буферы воссозданы один раз. Кроме того, поскольку размер основного фреймбуфера обычно изменяется для каждого события размера окна в конвейере, само собой разумеется, что изменение размера фреймбуфера не прожжет дыру в вашем ноутбуке.
Кризис предотвращен, продолжайте!