Войти
ПрограммированиеФорумГрафика

Open GL в дочернем окне

Страницы: 1 2 3 4 5 Следующая »
#0
15:46, 7 апр. 2019

Есть главное окно, а в нём 3 дочерних. Как рендерить в одно из этих дочерних окон? Как изменить главный цикл с учётом того, что требуется сохранить обработку сообщений и сверх того в одно из дочерних окон должна рендериться сцена? Как для этой задачи инициировать OpenGL?


#1
16:31, 7 апр. 2019

Тарас-Прогер
> Как рендерить в одно из этих дочерних окон?

Если дочерние окна реальные оконные объекты со своими персональными хэндлами - у них будут и персональные GL-контексты. Перед рендером нужно просто выбирать GL-контекст соответствующего окна - все дальнейшие gl-функции будут применяться к этому окну/контексту.

Если же дочерние окна просто логические прямоугольники на главном окне - тогда через вьюпорты, перед рендером устанавливать вьюпорт на соответсвующий прямоугольник.

#2
(Правка: 18:25) 18:25, 7 апр. 2019

Dmitry_Milk
> Перед рендером нужно просто выбирать GL-контекст соответствующего окна - все
> дальнейшие gl-функции будут применяться к этому окну/контексту.
А попроще нельзя? Для совсем новичка.
Dmitry_Milk
> Если же дочерние окна просто логические прямоугольники на главном окне - тогда
> через вьюпорты, перед рендером устанавливать вьюпорт на соответсвующий
> прямоугольник.
Причём здесь прямоугольники на главном?

#3
18:30, 7 апр. 2019

Тарас-Прогер
> А попроще нельзя?

Нельзя. Если ты работаешь с OpenGL - у тебя есть понятие GL-контекста.

#4
21:08, 7 апр. 2019

Тарас-Прогер
Точно также инициализируешь как для одного окна, переключаешся через wglMakeCurrent

#5
21:40, 7 апр. 2019

Aslan
> wglMakeCurrent

Он же не сказал, что работает именно под виндами. Хотя, если судить по соседним его темам - тогда да.

#6
22:20, 7 апр. 2019

Я бы для каждого окна создал свой контекст и расшарил их, тогда бы даже их переключать не пришлось + можно рендерить каждое в своём потоке.
Но похоже, что AMD-шные говнокарты с расшариванием контекста не дружат, хотя Intel и Nvidia с ним работают без проблем.

#7
1:14, 8 апр. 2019

Daniil Petrov
> + можно рендерить каждое в своём потоке.
Но не нужно.

#8
(Правка: 3:07) 3:07, 8 апр. 2019

Dmitry_Milk
> Он же не сказал, что работает именно под виндами.
не под винды (мак или хвинды) "дочернесть" эмулируется, тем что вывод гл ограничивается координатами "дочернего окна".

но под виндой задача тривиальна. Тк контекст создаётся от dc и хандле, конкретного (дочернего или нет, окна)

#9
3:10, 8 апр. 2019

MrShoor
> Но не нужно.
Ну тут уж каждый сам для себя выбирает по нуждам

#10
(Правка: 8:14) 8:14, 8 апр. 2019

Тарас-Прогер
> Причём здесь прямоугольники на главном?
При том, что если ты собрался создавать вьюпорт не в виндовом окне, а своём "выдуманном", то тебе придётся ограничивать сциссором вьюпорт.

https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glScissor.xml

#11
8:47, 8 апр. 2019

Dmitry_Milk
> Нельзя.
И кто же тебе толком объяснять запретил?

#12
8:48, 8 апр. 2019

monobogdan
> При том, что если ты собрался создавать вьюпорт не в виндовом окне
И где ж я на винде линаксоидное окно возьму?

#13
(Правка: 8:51) 8:49, 8 апр. 2019

Aslan
> Точно также инициализируешь как для одного окна, переключаешся через
> wglMakeCurrent
А точно также – это как? Мне один глут попадается. А как ему сказать, что своё окно создавать не надо, а надо отправить вывод в существующее дочернее не сказано.

#14
8:52, 8 апр. 2019

skalogryz
> но под виндой задача тривиальна. Тк контекст создаётся от dc и хандле,
> конкретного (дочернего или нет, окна)
Как его создавать и чем он отличается от обычного контекста GDI?

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумГрафика