HLFX.Ru Forum Страницы (4): « 1 2 [3] 4 »
Показать все 54 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Библиотека FLTK (https://hlfx.ru/forum/showthread.php?threadid=5048)


Отправлено nemyax 26-02-2018 в 18:22:

Не исключено, что в FLTK они обёрнуты одинаково. Но чё гадать, с другой стороны.


Отправлено FreeSlave 26-02-2018 в 20:02:

XaeroX, походу это можно через виртуальные сканкоды сделать. В SDL есть такая штука https://wiki.libsdl.org/SDL_Scancode
Нажатие на A на azerty клавиатурах возвращает SDL_SCANCODE_Q. Глянул сорцы - там маппинги на коды в ОС. Так что ты прав, хардвар-коды тут лишние.

__________________
I'm on github
I'm on opendesktop.org


Отправлено nemyax 09-06-2018 в 09:51:

Вопросики скорее не про саму либу, а про организацию взаимодействия её с OpenGL. Вот сделал я подкласс Fl_Gl_Window и реализовал триде-вьюпорт для геометрии. Всё зашибись, но теперь я хочу ещё один подкласс, который будет дваде-вьюпортом для ювишек.
Все данные на отрисовку доступны через один и тот же VBO — и для 3D, и для 2D. Надо ли предпринимать что-нибудь особенное, чтобы обе разновидности вьюпорта работали одновременно? Как лучше поступить с шейдерными прогами: создавать под каждый тип вьюпорта свою или юзать общую (и вкорячивать дополнительные условия и униформы в шейдеры)? Не будет ли гонок из-за общего доступа к VBO?


Отправлено XaeroX 09-06-2018 в 10:09:

Цитата:
nemyax писал:
Надо ли предпринимать что-нибудь особенное, чтобы обе разновидности вьюпорта работали одновременно

Нужно расшарить ресурсы между контекстами обеих вьюпортов.
Не могу сказать, как это делается в FLTK, увы.
Цитата:
nemyax писал:
Не будет ли гонок из-за общего доступа к VBO?

Что именно ты собираешься писать в VBO каждый кадр? Нельзя обойтись стейтом и униформами?
Цитата:
nemyax писал:
Как лучше поступить с шейдерными прогами: создавать под каждый тип вьюпорта свою или юзать общую (и вкорячивать дополнительные условия и униформы в шейдеры)?

Нужно профилировать и сравнивать. Я бы (при отсутствии времени на профилирование) предпочёл первый вариант.

__________________

xaerox on Vivino


Отправлено nemyax 09-06-2018 в 10:28:

Цитата:
XaeroX писал:
Нужно расшарить ресурсы между контекстами обеих вьюпортов.

Ну то есть если по-простому, то завести что-нибудь наподобие:

C++ Source Code:
1
struct render_state
2
{
3
  GLuint shader_program_3d;
4
  GLuint shader_program_2d;
5
  GLuint vert_buffer;
6
  GLint my_uniform3d_1;
7
  GLint my_uniform3d_2;
8
  GLint my_uniform2d_1;
9
  GLint my_uniform2d_2;
10
};


И в обоих подклассах определить и присвоить:
C++ Source Code:
render_state *shared_res;

Так получается?

Цитата:
XaeroX писал:
Что именно ты собираешься писать в VBO каждый кадр?

Не, у меня содержимое будет перезаписываться только при выполнении команд в основной проге.


Отправлено XaeroX 09-06-2018 в 10:42:

nemyax
Тебе надо расшарить идентификаторы между двумя OpenGL-контекстами. Это делается по-разному в зависимости от ОС. Например, под виндой это wglShareLists. В FLTK должно быть что-то такое в API (в Qt, допустим, есть).

Цитата:
nemyax писал:
у меня содержимое будет перезаписываться только при выполнении команд в основной проге.

Тогда в чём может заключаться гонка?

Добавлено 09-06-2018 в 17:42:

Судя по коду, FLTK по дефолту шарит все контексты с первым.
Ну тогда вообще ничего специально делать не надо.

__________________

xaerox on Vivino


Отправлено nemyax 09-06-2018 в 10:51:

Цитата:
XaeroX писал:
Тебе надо расшарить идентификаторы между двумя OpenGL-контекстами. Это делается по-разному в зависимости от ОС.

Ага, благодарю, буду копать.

Цитата:
XaeroX писал:
Тогда в чём может заключаться гонка?

Мало ли, вдруг при чистом чтении она тоже может происходить. Я как-то glVertexAttribPointer-ом насовал вершинам атрибутов с соседних вершин дальше по массиву, чтобы не дублировать. Так у меня рендерилось то ожидаемое, то кокаета хрень, как повезёт. Вот теперь дую на воду.


Отправлено nemyax 04-07-2018 в 14:00:

Цитата:
XaeroX писал:
Судя по коду, FLTK по дефолту шарит все контексты с первым.
Ну тогда вообще ничего специально делать не надо.

Не похоже на то. Стоят рядом два одинаковых GL-окошка, одно рендерит буфер, другое нет. Идентификаторы они на отрисовку отдают одни и те же.


Отправлено XaeroX 04-07-2018 в 14:02:

nemyax
Я же говорю - "судя по коду"

C++ Source Code:
if ( context ) {
  if ( context_list && nContext ) [b]wglShareLists( context_list[0], context )[/b];
  add_context( context );
}

__________________

xaerox on Vivino


Отправлено nemyax 05-07-2018 в 13:21:

Карочы надо взять у первого GL-окошка контекст через void *my_shared_context = first_good_gl_win->context(); и потом явно задавать его другим нужным окошкам через other_gl_win->context(my_shared_context);. Тогда будет шариться.


Отправлено nemyax 20-06-2019 в 13:32:

XaeroX
Как ты делаешь леяут элементов интерфейса? При помощи FL_Table или FL_Tile или как-нибудь ещё?


Отправлено XaeroX 20-06-2019 в 14:12:

nemyax
Никак, у меня нет резиновых окошек, поэтому все координаты задаю вручную.

__________________

xaerox on Vivino


Отправлено EXL 22-06-2019 в 21:15:

Цитата:
XaeroX писал:
Что используете в своих проектах, монстры типа Qt или wxWidgets, или что-то аналогично-легковесное?


Сейчас очень популярной стала эта либа: https://github.com/ocornut/imgui, во многих игровых проектах её хвост торчит. Неплохо сопрягается со многими современными блиттерами, вроде OpenGL, Vulkan, Metal, DX: https://github.com/ocornut/imgui/tree/master/examples

Есть ещё такое: https://github.com/vurtun/nuklear
FLTK уж больно древненький ИМХО


Отправлено nemyax 10-07-2019 в 13:13:

Цитата:
nemyax писал:
Карочы надо взять у первого GL-окошка контекст через void *my_shared_context = first_good_gl_win->context(); и потом явно задавать его другим нужным окошкам через other_gl_win->context(my_shared_context);. Тогда будет шариться.

Идиотский оказался совет, не делайте так. Лучше рисовать несколько glViewport-ов в одном окошке.


Отправлено Дядя Миша 10-07-2019 в 13:55:

Можно набацать виртуальные вьюпорты, через проходы, например. Да мало ли. Через контексты, КМК не очень удобно. Особенно если мы рисуем что-то одно но с разных сторон. Я бы эти вьюпорты рассматривал как частный случай зеркал, например. Ну или через FBO.

Добавлено 10-07-2019 в 16:55:

ЗЫ. я вот с этим моментом никогда не сталкивался, пусть Ксерокс поправит, но помоему память выделяется под конкретный контекст и чтобы нарисовать ту же карту четыре раза, надо её и загрузить четыре раза, то есть займет вчетверо больше памяти, но чтобы этого избежать контексты шарят, но тут-то кроются всякие подводные камни.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 10:22. Страницы (4): « 1 2 [3] 4 »
Показать все 54 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024