ПрограммированиеФорумОбщее

Линус Торвальдс ненавидит С++. А мы с вами? (4 стр)

Страницы: 13 4 5 630 Следующая »
#45
19:18, 28 июня 2010

winter
> А вот и фигню ты спорол только что, бро! Слыхал про функцию из состава OpenGL
> API, wglShareLists()? Она расшаривает таблицы дескрипторов одного девайса на
> другой девайс (в огле они называются контекстами).
я строил орхетектуру именно из предположения, что текстура принадлежит только одному девайсу. если очень хочется, можно попытаться придумать нормальный интерфейс для расшаривания текстур. ты же этого не требовал в нулевом посте, верно?

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

#46
19:19, 28 июня 2010

winter
> Проблема в том, что решение с дабл-диспатчингом учитывает даже такие детали, о
> которых ты не подозреваешь.
В том числе учитывает что мы гарантированно вызвали wglShareLists? Которая сама по себе сужает круг применения только до OpenGL+win. Потому что это не функция OpenGL.
Ну и контекст это не девайс. Девайс всегда один (ну по крайней мере это логично). Контекстов может быть много. DX11 это наглядно демонстрирует. OpenGL тоже, но с очень жесткой привязкой к одной системе. Я бы сказал - слишком сильной.

#47
19:20, 28 июня 2010

winter
> Суслик... НУ ЭТО ЖЕ ДЕСКРИПТОРЫ. Я про них уже третью странцу талдычу, черт...
> Сишный WinAPI-style подход, когда все методы - у девайса, а юзеру выдается
> только дескриптор текстуры без методов...
ну да, так и есть. если ты так сильно печёшься по поводу своих циклических ссылок, ну так используй дескрипторы. второй пример, который я попытался описать, даже чем-то ооп снаружи напоминает. немного. жаль только, дескрипторы не безопасны совершенно, можно запросить у кого угодно какую угодно текстуру и хоть ты их заоборачивайся, но это всегда можно будет сделать.

#48
19:28, 28 июня 2010

Suslik
>> я строил орхетектуру именно из предположения, что текстура принадлежит только одному девайс
Так все верно, для такого предположения твой метод 100%-корректен. Но мне в свое время пришлось расширить архитектуру на несколько расшаренных контекстов, и если б у меня сохранялась ссылка на реализацию контекста в реализации текстуры, хрен бы я так легко отделался.

Я предпочитаю принцип "design for change" - типа, заранее старайся учесть все возможности!

>> ты же этого не требовал в нулевом посте, верно?
Да я ничего там не требовал... Я просто сказал, что есть такая проблема.

>> какие это, интересно?
Такие, что при дабл-диспатчинге текстура может потенциально принадлежать нескольким контекстам (см. выше, с чем я в свое время столкнулся).

crsib
>> В том числе учитывает что мы гарантированно вызвали wglShareLists? Которая сама по себе сужает круг применения только до OpenGL+win. Потому что это не функция OpenGL.
Приложение в своей пользовательской части должно вести себя единообразно и для вин32, и для линуха, и для прямого х.., и для огла.

>> Ну и контекст это не девайс. Девайс всегда один (ну по крайней мере это логично). Контекстов может быть много.
Черт, ну что ж ты так к терминологии привязался? Ну замени во всех моих постах слово "девайс" на слово "контекст". Проблема останется прежней.

#49
19:30, 28 июня 2010

Suslik
>> ну да, так и есть. если ты так сильно печёшься по поводу своих циклических ссылок, ну так используй дескрипторы. второй пример, который я попытался описать, даже чем-то ооп снаружи
>> напоминает. немного. жаль только, дескрипторы не безопасны совершенно, можно запросить у кого угодно какую угодно текстуру и хоть ты их заоборачивайся, но это всегда можно будет
>> сделать.
Так про это и речь. Речь про то, что тут надо бы дескрипторы использовать, т.е. возвращаться от ООП к не-ООП в тех местах, где есть такая сильная связанность. Собственно, это Торвальдс и имел в виду, только выразил это своим обычным уродским образом.

#50
19:31, 28 июня 2010

> Я предпочитаю принцип "design for change" - типа, заранее старайся учесть все возможности!
В любом случае нужно учитывать особенности того, что проектируешь

winter
> Приложение в своей пользовательской части должно вести себя единообразно и для
> вин32, и для линуха, и для прямого х.., и для огла.
В этом-то и проблема. А wglShareList - win only и AFAIK без аналога под под Linux/OS X

winter
> Черт, ну что ж ты так к терминологии привязался? Ну замени во всех моих постах
> слово "девайс" на слово "контекст". Проблема останется прежней.
Не останется. Это разные сущности.

#51
19:40, 28 июня 2010

crsib
>> Не останется. Это разные сущности.
Под "девайсом" я имел в виду то место, куда байндятся текстуры и шейдеры. В огле это называется "контекстом". В прямом х..., что характерно, тоже. Дальше см. пост #15 в самом начале второй страницы и замени везде слово "IDevice" на "IContext".

#52
19:42, 28 июня 2010

Да, но контексты создаются девайсом. Ровно как и текстуры.

#53
19:44, 28 июня 2010

crsib
Да пофиг, чем они создаются. Ну сделай милость, прочитай еще раз нулевой пост и 15-ый пост в начале второй страницы. Я там везде слово "девайс" заменил на "контекст".

#54
19:49, 28 июня 2010

Нет, не везде. Текстуры и шейдеры (и контексты) создаются девайсом. Куда они биндятся и как это реализованно - другой вопрос. Но при этом, если мы можем гарантировать уникальность девайса (а мы можем в данном конкретном случае). Следовательно мы можем гарантировать, что реализации имеют, гм, общую базу. То есть если у нас был создан Device_GL, то ITexture = Texture_GL, IContext = GLContext. Об этом я толкую на протяжении всего топика.

#55
19:49, 28 июня 2010

winter
я в целом хочу плюсануть, подход с использованием дескрипторов (WINAPI), или индексов (GLAPI)
пока подобные решения более вменяемые и лучше скрывают внутренности...
я щас если и пишу обертки над подобными вещами стараюсь делать так
класс хранит лишь дескриптор или индекс того что оборачивает, а все его функции простые обертки над сишными апи использующие дескриптор/индекс...
такое ограничение для того, что бы где надо можно было преобразовать тем же реинтерпрет кастом  к нужному дескриптору или из него...
(но лучше учесть оператор преобразования в какойнить более нативный тип, в этом плане индексы выигрывают...
дескрипторы надо еще знать к чему преобразовывать и зачастую в разных системах они представляются разыми сущностями)
весь новый функционал (которые не является враппером) я пишу в с стиле сишных дескрипторов и так же оборачиваю...

PS: все эти огороды из ООП с С++ подходом в которых потом черт ногу сломит, порядком надоели...
кажись я постепенно перехожу в стадию "могу не использовать"...

#56
19:49, 28 июня 2010

winter
> Я предпочитаю принцип "design for change" - типа, заранее старайся учесть все возможности!
Я предпочитаю делать сначала хорошенько продумать то, что мне может когда-либо понадобиться и реализовать это и только это. Реализовать лишнее, если это приводит к меньшей безопасности/трудности поддержки кода/меньшей гибкости, смысла не вижу. Реализовать то, что нужно сейчас, а потом итеративно расширять функциональность тоже не здорово.

Так как разговор уже пошёл о сферических системах в вакууме, давай ты снова сформулируешь задачу со всеми ограничениями, которые ты на неё накладываешь, и тогда мы вместе подумаем, как бы её решить? Без довешивания новых требований на ходу.

#57
19:51, 28 июня 2010

cNoNim
> такое ограничение для того, что бы где надо можно было преобразовать тем же реинтерпрет кастом к нужному дескриптору или из него...
you're doing it all wrong

> кажись я постепенно перехожу в стадию "могу не использовать"...
форсировав фазу "могу нормально использовать", cNoNim перешёл сразу к "могу не использовать" :)

#58
19:53, 28 июня 2010

кстати моя соседняя тема появилась именно в результате того, что я решил писать код с использованием индексов.

#59
19:58, 28 июня 2010

crsib
>> Следовательно мы можем гарантировать, что реализации имеют, гм, общую базу
Это семантическая связь (связь, которую понимаешь ты сам), а компилятор - это синтаксис, ему ты семантику не объяснишь. Т.е. придется юзать апкаст.

И хвала небесам, что в плюсах возможно железное приведение типов "без вопросов". А ты знаешь, например, сколько хлама выполняет виртуальная жава-машина при апкасте? А шарп? И прежде, чем ты доберешься до этого хлама, над тобой надругается компилятор, и заставит написать что-нибудь вроде

if (tex instanceof Texture_GL)
    Texture_GL tex_GL = (Texture_GL) tex;

Долой апкаст.

<правка>
И, кстати, не забудь, что апкаст "без вопросов" возможен только в случае отсутствия множественного наследования. В противном случае - встраивание в приложение "информации о типах на этапе выполнения" + супер-медленные STL'евские касты.

Страницы: 13 4 5 630 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.