Как средствами winapi создать наподобие canvas для opengl?
Для образовательных целей пишу пародию 3d движка, архитектуру слегка подсматриваю у CryEngine, вот пытаюсь разработать классы окна и органов управления. Как создать объектно-ориентированную обертку окна, знаю, все ок, но при попытке добавления, например, кнопки, предварительно попытавшись viewport сделать меньше окна, на окно в которое рисует opengl, происходит беда, opengl затирает кнопку, тут не долго думая, решил создать корневое окно, на которое налепливать контролы и окно opengl. При создании дочернего окна, в которое рисует opengl, главное окно перестает получать сообщения, его невозможно ни перетянуть и ничего с ним сделать, и при поптыке перетянуть его за заголовок, перемещается дочернее(OPENGL). Как правильно создать дочернее окно, которое будет являться чем то похожим на canvas как в некоторых графических библиотеках? При создании окна, понятное дело, я добавляю стиль WS_CHILD, но этого явно не хватает, чтобы все работало как надо.
Станислав Макаров, здесь речь даже не о кнопке, а об органах управления в целом(controls - так их зовут в винде). Нужно в приложение добавить например ползунки для изменения некоторых значений в программе. В контексте opengl все органы управления затираются, для этого нужно окно для вывода opengl и другое, на котором будут те самые контролы. Но возникает проблема, о которой я писал в пояснении к вопросу.
Канвасы и все остальное в популярных движках рисуют кнопки через OpenGL или другую либу наравне с трехмерными объектами. Никаких дочерних окон на уровне winAPI (если я правильно понял вас) там нет - только голый контекст.
Денис Ковешников, тогда делайте наоборот - выводите опенГЛ рендер в дочернее окно. Т.е. иерархия какая то такая:
- основное окно программы
-- здоровый контрол 1 <- вот сюда рисуем опенГЛ-ем
-- здоровый контрол 2
---и вот тут ваши контролы
Спасибо конечно, но проблема не в иерархии, я как раз в описании указал, то что вы мне и предложили, а в ее реализации средствами winapi. Если у вы знаете, какие нужно выполнить требования, чтобы это все заработало, и не было описанных выше проблем, то я был бы вам благодарен. Я могу конечно прикрепить код, связанный с окном, но в ряд ли кто то будет выяснять причины неполадки.
Денис Ковешников, у меня создалось впечатление что вы скормили в openGL все окно, и уже на нем пытаетесь рисовать контролы. Я не прав? Код бы приложили к вопросу.
Я вам говорил же, да, изначально так и было, я вставил кнопку на окно, контекст которого принадлежит opengl оно же и являлось главным, то есть занято было все окно, и когда я кнопку спозиционировал в том месте окна, куда не рисуется сцена, то это не сработало, тогда я попробовал кнопку максимизировать, мало ли, вдруг неправильные координаты указал, то при нажатии она резко появлялась и тут же ее затирал opengl.
Потом пришел к выводу, что нужно создать иерархию, которую указали вы, но произошла проблема, что до главное окна не доходили сообщения.
ссылка на коммит где начинается моя беда - https://github.com/fromasmtodisasm/DevilEngine/com... DevilApp/OpenGLWindow.cpp - в этом файле создание окна