-StalkMen- 159 Опубликовано 23 Июля 2015 По напридумывали сложностей, разделы делать, сжимать Показать *И так во всех проектах, которые будут что-то просить из DX. ** Можно и полные пути указывать (C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include) Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 29 Июля 2015 (изменено) Есть тут адепты метапрограммирования? У меня хитрый вопрос, а то и правда разговоры тут последнее время не уровня амк Я, потренировавшись на компиляторе, решил потихоньку пилить многопоточность в игре... Суть такая - разбить всё, что можно делать параллельно, на кусочки, "работы". Решил начать с создания класса "работа" ну и менеджера "работ". Работать(уже работает ) должно так Показать class foo { public: virtual void test(int a1, int* a2) { *a2 = a1; } }; xrMTWorkManager* mng = xr_new<xrMTWorkManager>(); void test() { foo f; int a1 = 1; int a2 = 2; int* pa2 = &a2; mng->AddWork(&f, &foo::test, a1, pa2); }class foo { public: virtual void test(int a1, int* a2) { *a2 = a1; } }; xrMTWorkManager* mng = xr_new<xrMTWorkManager>(); void test() { foo f; int a1 = 1; int a2 = 2; int* pa2 = &a2; mng->AddWork(&f, &foo::test, a1, pa2); } В результате данная "работа" будет поставлена в очередь и выполнена одним из потоков "воркеров". Пропыхтев над механизмом сохранения аргументов, с последующим вызовом функтора с ними, сделал через tuple + рекурсивный вызов - жесть полная, но работает. Кто-то скажет "Работает ? Ну и всё!" Но так же не интереЦно Внимание вопрос, как хранить аргументы более изящным способом и более изящно вызывать с ними функтор. Показать //После void test() { foo f(123, "Строка", 0.f); } //Получалось что-что то вроде такого class foo { Arg_class_1 arg_1; Arg_class_2 arg_2; Arg_class_3 arg_3; public: foo(Arg_class_1 _arg_1, Arg_class_2 _arg_2, Arg_class_3 _arg_3) : arg_1(_arg_1) ,arg_2(_arg_2) ,arg_3(_arg_3){}; void Execute() { functor(arg_1, arg_2, arg_3); } ... };//После void test() { foo f(123, "Строка", 0.f); } //Получалось что-что то вроде такого class foo { Arg_class_1 arg_1; Arg_class_2 arg_2; Arg_class_3 arg_3; public: foo(Arg_class_1 _arg_1, Arg_class_2 _arg_2, Arg_class_3 _arg_3) : arg_1(_arg_1) ,arg_2(_arg_2) ,arg_3(_arg_3){}; void Execute() { functor(arg_1, arg_2, arg_3); } ... }; Изменено 29 Июля 2015 пользователем -StalkMen- Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 29 Июля 2015 @abramcumner, abramcumner писал(а): Изучил? По тому и делаю, что там ГГ какое то, два основных потока, которые, по большому счёту, работают друг за другом. abramcumner писал(а): вызывающем коде дождаться завершения Я не хочу так делать, это скорей к компилю... Вызывающий код добавляет работу в очередь и идёт дальше. volatile long iterator = 0; MultiThread::MultiThreadWork2([&](volatile float& prog) { float p_cost = 1.0f / float(mu_models().size()); Interlocked_for(pos, iterator, mu_models().size()) { calc_ogf(*mu_models()[pos]); export_geometry(*mu_models()[pos]); prog = pos*p_cost; } }); volatile long iterator = 0; MultiThread::MultiThreadWork2([&](volatile float& prog) { float p_cost = 1.0f / float(mu_models().size()); Interlocked_for(pos, iterator, mu_models().size()) { calc_ogf(*mu_models()[pos]); export_geometry(*mu_models()[pos]); prog = pos*p_cost; } }); Я не про такое говорю (когда надо ждать завершения). abramcumner писал(а): Есть классический кондовый вариант: У меня и так сделано подобным образом. Я же не спросил, как мне ВСЁ это сделать, я уже сделал, но стало любопытно как сделать лучше. abramcumner писал(а): TBB OpenMP ещё, смотрел уже. Но там нигде нет кнопки "Автоматически распараллелить на 100% без добавления жуков" Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 1 Августа 2015 (изменено) @Tron, Любопытно, "свой" аллокатор для каждого потока. Я тоже про это думал. Надо будет по изучать... И всё равно не в ту степь Ответа на мой вопрос там нет... Попробую описать обобщённо и отделить половину задачи. Итак, foo<int,float,bool> ggg(123, 123.f, true); //Сие должно "разворачиваться" в такое -> //типо template<typename...Args> class foo { int arg_1; float arg_2; bool arg_3; foo(int _arg_1, float _arg_2, bool _arg_3) : arg_1(_arg_1), arg_2(_arg_2), arg_3(_arg_3){}; };foo<int,float,bool> ggg(123, 123.f, true); //Сие должно "разворачиваться" в такое -> //типо template<typename...Args> class foo { int arg_1; float arg_2; bool arg_3; foo(int _arg_1, float _arg_2, bool _arg_3) : arg_1(_arg_1), arg_2(_arg_2), arg_3(_arg_3){}; }; и я не про то (Показать) template<typename Arg_1, typename Arg_2, typename Arg_3> class foo { Arg_1 arg_1; Arg_2 arg_2; Arg_3 arg_3; foo(Arg_1 _a1, Arg_2 _a2, Arg_3 _a3) : arg_1(_a1), arg_2(_a2), arg_3(_a3){}; };template<typename Arg_1, typename Arg_2, typename Arg_3> class foo { Arg_1 arg_1; Arg_2 arg_2; Arg_3 arg_3; foo(Arg_1 _a1, Arg_2 _a2, Arg_3 _a3) : arg_1(_a1), arg_2(_a2), arg_3(_a3){}; }; http://habrahabr.ru/post/228031/ *ещё не весь хабр перекопал* в конце есть про "Defer", но только я бы хотел сделать более быстрый вызов, без туплей и подобного с последующей рекурсивной "распаковкой аргументов" П.С. Порой полезно запилить свой велосипед, дабы научиться и сделать мопед Изменено 1 Августа 2015 пользователем -StalkMen- Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 1 Августа 2015 http://en.cppreference.com/w/cpp/utility/integer_sequence Второй пример, тоже, что и у меня но вызов без рекурсии. Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 1 Августа 2015 @_Призрак_, Нет. std::bind похоже на То, но я уже сделал через тупли. http://ru.cppreference.com/w/cpp/utility/functional/bind Показать 3 Аргумента - 3 инструкции теперь я спокоен. Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 3 Августа 2015 @HESH, http://vk.com/topic-69229374_30264475 Стоит проверить тут Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 4 Августа 2015 HESH писал(а): упаси хоспаде! Собственно, а почему нет? Что не так? Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 12 Августа 2015 LINK : warning LNK4044: эхЁрёяючэрээ√щ ярЁрьхЄЁ "/INCREMENTAL:NO"; шуэюЁшЁєхЄёLINK : warning LNK4044: эхЁрёяючэрээ√щ ярЁрьхЄЁ "/INCREMENTAL:NO"; шуэюЁшЁєхЄё Что с таким делать (кракозябры) ? *(vs 2013) Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 13 Августа 2015 @HESH, Телодвижения с "Набор символов" ни на что не влияют. Разве что на количество ошибок Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 13 Августа 2015 @Forser, Чего вы к варнингу цепляитесь, вопрос не в нём,а в кракозябрах. Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 13 Августа 2015 Forser писал(а): LNK4044 https://msdn.microsoft.com/ru-ru/library/twch6zc8.aspxНаверно Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 17 Августа 2015 Кто, что думает по поводу PhysX'a ? Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 18 Августа 2015 , И чего же там мифического? Я уже частично впилил PhysX в xrLC - есть прирост. Я бы пока не ковырялся с этим, но у нас слишком большая карта. На коллизию уходит слишком много памяти (половина от всей используемой, это только на 1/4 карты) Начал пилить чанки, но понял, что с физикой слишком много заморочек... Shadows писал(а): Никто не будет Никто кроме нас не пилит агроменную карту.Никто кроме нас не пилит кооп. Если мы запилим PhysX, то мы и будем под него всё настраивать ©логика Forser писал(а): бунте AMD'шников PhysX запилин в A3, но где там бунты? Я не видел. Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 18 Августа 2015 , Ой ну всё Я не говорил, и не считаю нас ultimate кодерами. Лично я про PhysX знаю мало, и уж тем более я не имею опыта создания/интеграции физ. движков. С чего бы мне спрашивать мнения знающих... Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 21 Августа 2015 @Дизель, И ничего не сломалось?Почему не сделать проверку типа if (что-то пошло не так) return;if (что-то пошло не так) return; ?? Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 21 Августа 2015 @Дизель, Я не про машину, а вообще. Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 21 Августа 2015 Дизель писал(а): атач - детач кроме авто Станковое оружие.Но причём тут это??? Если трогался класс, работающий с коллизией физикой и тп. Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 26 Августа 2015 (изменено) Tron писал(а): нет, не используется Вроде как окошечки компилей используют MFC. Tron писал(а): нет А на чём тогда? Изменено 5 Сентября 2015 пользователем Dennis_Chikin 1 Поделиться этим сообщением Ссылка на сообщение
-StalkMen- 159 Опубликовано 27 Августа 2015 HESH писал(а): компилей нет, компили xrLC xrAI и тп. А не LevelEditorЫ всякие Поделиться этим сообщением Ссылка на сообщение