Опция «Отменить отмену» в проекте OpenTk - PullRequest
0 голосов
/ 27 апреля 2011

Привет, я рисовал кистью, которая рисует некоторые базовые фигуры в glcontrol Теперь я хочу добавить опцию отмены, я действительно не знаю, как это будет работать, поэтому, пожалуйста, дайте мне любой совет

1 Ответ

3 голосов
/ 27 апреля 2011

Первое, что нужно понять: OpenGL - это всего лишь API для рисования. Вы отправляете команды рисования, и он просто изменит цвет некоторых пикселей в целевом буфере кадров. В OpenGL нет высокоуровневой функциональности, которая абстрагирует геометрию в управляемые объекты. Это то, что делает граф сцены.

A история отмен / повторов требует хранить все операции рисования в отдельной структуре, например, связанный список операций рисования.

Каждая новая операция добавляется в список. Отмена будет осуществлена, возвращаясь назад. Любая новая операция после некоторых шагов отмены отбрасывает хвост и строит новую.

На стороне OpenGL вы можете либо перерисовать весь список после Undo / Redo, либо на каждом шаге сохранять состояние framebuffer; это, однако, потребляло бы много памяти, поэтому хранение только различий и использование некоторой простой схемы сжатия (длина выполнения и предварительное разбиение на фрагменты) экономит память.

...