@Александр Старцев, рекомендую для начала разобраться, как устроен конвейер OpenGL.
Видеокарта не знает ничего ни о каких кнопках и тем более событиях. И почти не знает о квадратах. OpenGL главным образом занимается тем, что скармливает видеокарте списки координат вершин и дополнительные сведения о том, как их нарисовать. Т.е. все, что вам в данном случае позволяет библиотека это почистить экран и нарисовать квадрат. Дальше сами.
Заведите себе класс или структуру, описывающие кнопку: координаты, габариты и состояние кнопки (нажата/не нажата). Создайте экземпляр, заполните все поля. В цикле отрисовки чистите экран и выводите кнопку на основе вышеописанных данных.
Перехватите событие нажатия кнопки мыши. Если речь о Windows - через сообщение WM_LBUTTONDOWN
, например. Затем проверьте, попадает ли клик по вашей кнопке, сравнив координаты клика с координатами и размерами кнопки. Если - да измените состояние на "нажато". А по событию WM_LBUTTONUP
аналогично проверьте и измените состояние на "не нажато". В это время обновлением внешнего вида будет усердно заниматься цикл отрисовки.
PS. Можете пойти скучным путем и взять готовую библиотеку, которая сделает все это за вас (есть варианты с рисованием интерфейса на Flash, например). Гуглить по ключевым словам "opengl ui framework".