Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / C++ Взаимодействие интерфейсов на уровне реализаций. (5 стр)

C++ Взаимодействие интерфейсов на уровне реализаций. (5 стр)

Поделиться

Страницы: 1 2 3 4 5 6 Следующая

HybernaculumПостоялецwww10 ноя. 201712:27#60
loyso
> Вот все бы так вьелись в std::variant<Derived1*, Derived2*> !
boost::polymorphic_get вам в помощь ! ))
kasПостоялецwww10 ноя. 201712:41#61
Suslik
> продолжать, конечно. только не выкручивайся, а покажи нормальный мясо-код, как
> это дело будет транслировать абстрактные Texture в аргументы конкретных
> GAPI-зависимых вызовов.
в том то и дело что оно не абстрактное. это готовая к употреблению текстура. будет N имплементаций CommandList::FlushState(...) будет N имплементаций CommandList::Draw и N ctor/dtor для текстур и буферов. и вообщемто вся мультиплатформа. куча кода пошарено, все рады и какают цветочками. очевидно оно форсит определенные паттерны использования но они совсем не страшные. есличто я не придумываю, это какбы вполне рабочее решение. ну и

Suslik
> и не забывай, что мультирендер как бы по умолчанию подразумевает возможность
> смены GAPI в рантайме.
это не более чем твои фантазии. если не делать странных выборов изначально, то и мучаться не придется. т.е. выбор 2 ехе против гапи в рантайме он про религию, а не про здравый смысл в моем понимании

SuslikМодераторwww10 ноя. 201712:58#62
kas
> будет N имплементаций CommandList::FlushState(...)
короче, я понял. иногда это приемлемо. но иногда — нет. дело вкуса, но я считаю, что даже вариант с айдишниками лучше, так как если в рантайме всё равно будет существовать только 1 GAPI, то проблем с "чужими" ресурсами всё равно не будет.

> это не более чем твои фантазии. если не делать странных выборов изначально, то и мучаться не придется. т.е. выбор 2 ехе против гапи в рантайме он про религию, а не про здравый смысл в моем понимании
ну, самый простой способ справиться с фичей — это не реализовывать её. думаю, тут ты америку не открыл.

innuendoПостоялецwww10 ноя. 201712:59#63
Suslik
> что мультирендер как бы по умолчанию подразумевает возможность смены GAPI в
> рантайме.

ну не совсем в рантайме, можно же перезагружать через лаунчер

innuendoПостоялецwww10 ноя. 201713:01#64
kas
> если не делать странных выборов изначально

надо думать что в Unreal, который I и II тоже выбор странный ? в UE4 есть абстрактный RenderHardwareInterface, правда для конзолей сделано статиками

в CE тоже

Правка: 10 ноя. 2017 13:11

kasПостоялецwww10 ноя. 201713:09#65
Suslik
> короче, я понял. иногда это приемлемо. но иногда — нет. дело вкуса, но я
> считаю, что даже вариант с айдишниками лучше, так как если в рантайме всё равно
> будет существовать только 1 GAPI, то проблем с "чужими" ресурсами всё равно не
> будет.
ну код любой почти всегда про религию. из того что я видел - так проще всего (меньше кода, проще поддерживать, шарица максимальное количества кода), по крайне мере на данный момент моего развития. неприемлемо по идее ровно в одном случае - когда надо реально в рантайме переключать. вариант с айдишниками очевидно сложнее. я не очень понимаю зачем писать сложнее
innuendoПостоялецwww10 ноя. 201713:12#66
kas
> я не очень понимаю зачем писать сложнее

да, я тоже не понимаю, зачем свой списочег, когда есть std::list - ну ты понял :)

-Eugene-Постоялецwww10 ноя. 201714:08#67
Чтобы не впадать в XY-чество, расскажу изначальную задачу. Скорее теоретическую.

Есть абстрактный редактор.
В нем есть не менее абстрактные документы.
А еще есть не менее абстрактные доки (от слова Dock).

Допустим, документ реализует интерфейс вида

class ADocument
{
   bool Save(file);
   bool Load(file);
   void Render();
   // blah blah blah
}

и регистируется как-то снаружи

editor->RegisterDocument<MyDocument>()

A док реализует интерфейс вида

class ADock
{
   void Render();
   // blah blah blah
}

и регистируется как-то снаружи

editor->RegisterDock<MyDock>()

Внимание, вопрос знатокам!
Как добавить возможность пользователю писать реализации конкретного дока для конкретного типа документов, не требуя юзер-кода ни в доке, ни в документе? Каждый конкретный док предоставляет публичный интерфейс для конфигурации его содержимого.

Правка: 10 ноя. 2017 15:39

-Eugene-Постоялецwww10 ноя. 201715:01#68
Кстати, Суслик, можешь тему в код перетянуть? Я создал не глядя.
innuendoПостоялецwww11 ноя. 20177:06#69
kas
> и какают цветочками

ты куда убежал?

/A\Постоялецwww11 ноя. 201710:47#70
Я мультирендер да и всю архитектуру движка перенес на систему сообщений, оставил только один класс - Module.
Работает так:
Message<GpuMsg::GetGLImageID> req_id;
module->Send(req_id);
GLuint id = *req_id->result;
Если тип сообщения не поддерживается, то Send вернет false, так же есть проверки поддерживает ли модуль такието сообщения. Зато один модуль может хранить как расшаренные ресурсы, которые доступны из разных апи, так и только для одного апи. Например у меня модуль с шейдерами один на все апи и по запросу компилит под нужный рендерер.
Хотя вплане производительности архитектура не идеальная.
TheLightWayПостоялецwww11 ноя. 201711:52#71
/A\
> архитектура не идеальная.
Ну и чем это отличается от модели COM с его QueryInterface и самими интерфейсами ?
/A\Постоялецwww11 ноя. 201712:32#72
TheLightWay
> Ну и чем это отличается от модели COM с его QueryInterface и самими интерфейсами ?
Тем что у меня вообще нет интерфейсов в обычном смысле, я не запрашиваю интерфейс, я использую метод которого может не быть, но это не приведет ни к каким последствиям. У меня нет типа объекта, просто набор методов которые он поддерживает.
kasПостоялецwww11 ноя. 201713:28#73
/A\
> Тем что у меня вообще нет интерфейсов в обычном смысле, я не запрашиваю
> интерфейс, я использую метод которого может не быть, но это не приведет ни к
> каким последствиям. У меня нет типа объекта, просто набор методов которые он
> поддерживает.
отличные системы, где никто нипрокого не знает. в том числе зачем их использовать)
/A\Постоялецwww11 ноя. 201714:07#74
kas
Мне нравится такая система, плохо что с++ для этого неочень подходит, ну и бывают проблемы с перекресными ссылками в подписках, зато никаких кастов и легко пересылать сообщения в другой поток. Я сейчас делаю чтоб у меня одновременно запускался вулкан, огл и дх рендеры, точнее даже сделал, но огл и дх мало что поддерживают, надо их доделать)

Страницы: 1 2 3 4 5 6 Следующая

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

2001—2017 © GameDev.ru — Разработка игр