Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Редактирование движка
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
Winsor
Исключение
First-chance exception at 0x76FEDDC5 (ntdll.dll) in XR_3DA.exe: 0xC0000005: Access violation reading location 0x008B4C8F.
возникает в HeapWalk в memory_usage.cpp:73, сразу после того как цикл с heap_walk нашел " якобы свободный блок".
т.е. это получается, что некто выделил блок памяти, а потом удалил указатель на этот блок без освобождения самого блока? я пытаюсь понять, что хоть искать...
Giperion
Цитата(Neo][ @ 22.06.2016, 13:43) *

Попробуй запустить с ключом: -pure_alloc, хотя бы исключить влияние xray-евских мем пулов, но это вряд ли поможет )

Вот эта опция, и еще включенный Memory Monitor самого XRay'я + сообщение от винды когда невалидную ноду находит, достаточно чтобы локализовать проблему.

Цитата(abramcumner @ 22.06.2016, 14:28) *
Насколько я помню, в функции heap_walk ошибка - неправильно работают с апи. Cохраняются не все данные PROCESS_HEAP_ENTRY между вызовами HeapWalk.

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

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

_HEAPBADNODE возвращается в трех случаях
1) не прошел HeapValidate на занятой ноде
2) если HeapWalk вернул ошибку
3) если в HeapWalk было исключение - вот это мой случай...
теоритически - я могу найти невалидную ноду smile.gif но как определить - кто ее выделил, и чем именно она неправильная? тут у меня знаний работы с кучей не хватает...
Giperion - спасибо, буду ждать. а через обертку - потому что сама обертка вызывается из нескольких мест, я про mem_usage_impl.
John_Wick
Привет всем ребят есть у кого исходники ТЧ на Visual Studio 2015
Northern Maverick
У меня вопрос.

Кто-то упоминал о желании прикрутить к движку Intel`овскую технологию TBB. Попытка была? Получилось? Удалось граф задач расписать?

Буду признателен за ответ.
Giperion
Цитата(Northern Maverick @ 05.07.2016, 09:05) *
У меня вопрос.

Кто-то упоминал о желании прикрутить к движку Intel`овскую технологию TBB. Попытка была? Получилось? Удалось граф задач расписать?

Буду признателен за ответ.

А смысл? У X-Ray есть CPU pipe с похожим функционалом, так эту систему движок почти не использует. Просто подключить не проблема, а вот переверстать xrGame на задачи - очень трудно.
В игре Метро это сделали (те же прогеры, что X-Ray написали).
Northern Maverick
Спасибо. Интересно.
macron
Цитата(Northern Maverick @ 05.07.2016, 10:05) *
прикрутить к движку Intel`овскую технологию TBB.

Я в OLR и 2.0006 через батники с psexec.exe прикручивал лучшее распределение нагрузки по ядрам.
Northern Maverick
macron
А какая технология использовалась? Если есть название и нет секрета (засады, клятвы, тайника, обета молчания и т.п.) :-) ?

Судя по отсутствию ответа, ответ уже был дан. Значит батники просто (или непросто) настраивали psexec.exe. Помню, что действительно в теме был ответ с упоминанием этого инструмента. Ок. Понял.
Neo][
Цитата(macron @ 05.07.2016, 14:55) *
Я в OLR и 2.0006 через батники с psexec.exe прикручивал лучшее распределение нагрузки по ядрам

macron, скорее лочил возможность потоку выполняться на определённых ядрах.

Да и к тому же "красивый" график загрузки ядра не говорит о том, что оно эффективно используется: https://msdn.microsoft.com/en-us/library/wi...p/ms685096.aspx
Применительно же к xray, последовательная система не может работать параллельно, это концептуальный момент smile.gif
Northern Maverick
Neo][

Жаль, что параллелизм будет паллиативным, но что делать.
macron
Цитата(Neo][ @ 05.07.2016, 14:15) *

скорее лочил возможность потоку выполняться на определённых ядрах

Типа того. Например, на четырехядерном говорим задаче выполняться на трех:

@cd bin
@psexec.exe -d -a 1,2,3 xr_3da.exe
Neo][
Цитата(Northern Maverick @ 05.07.2016, 15:26) *
Жаль, что параллелизм будет паллиативным, но что делать.

Northern Maverick, тут ни о каком решении вообще речи не идёт. Все эти affinity mask предназначены для очень тонких моментов, связанных с кэшами старших уровней, либо для каких-то аппаратных вещей, когда необходимо выполнение именно в контексте определённого ядра.

Для всего остального есть планировщик винды, имеющий нетривиальный алгоритм, учитывающий кучу факторов. И делает свою работу он замечательно.
Giperion
Цитата(macron @ 05.07.2016, 13:34) *
Цитата(Neo][ @ 05.07.2016, 14:15) *

скорее лочил возможность потоку выполняться на определённых ядрах

Типа того. Например, на четырехядерном говорим задаче выполняться на трех:

@cd bin
@psexec.exe -d -a 1,2,3 xr_3da.exe

А зачем его так ограничивать?
По умолчанию процесс игры (и все задачи) выполняются на всех ядрах. ОС берет на себя задачу распределения потоков на ядра процессора, и вполне неплохо справляется с этой задачей.
macron
Цитата(Giperion @ 05.07.2016, 15:32) *
ОС берет на себя задачу распределения потоков на ядра процессора, и вполне неплохо справляется с этой задачей.

Я пока могу судить конкретно по XP. Без батника попеременно загружены два ядра, с батником параллельно еще третье. Кто может производить более точные эксперименты/тесты - флаг в руки.
Northern Maverick
Не встречал в этой теме (не приходит на память), чтобы кто-то отчитывался о работе с профилировщиком. Ведь наверняка кто-то смотрел под профилировщиком раскладку по функциям движка, памяти , загрузке ядер процессора...
Giperion
Цитата(Northern Maverick @ 05.07.2016, 16:17) *
Не встречал в этой теме (не приходит на память), чтобы кто-то отчитывался о работе с профилировщиком. Ведь наверняка кто-то смотрел под профилировщиком раскладку по функциям движка, памяти , загрузке ядер процессора...

GSC подключали Intel VTune, учитывая макросы _forceinline и комментарий рядом с ним, они профилировали движок и самые жесткие косяки убирали.
Я тоже его использую вместе с VS Profiler который в 2015 версии есть.

Единственное что: руки не доходили до компиляторов, gsc судя по всему тоже. Запрофилирую их как нить на досуге.

Алсо, проблема с битыми группами сглаживания все еще актуальна?
Cossack-HD
Цитата(Giperion @ 05.07.2016, 19:52) *
Цитата(Northern Maverick @ 05.07.2016, 16:17) *
Не встречал в этой теме (не приходит на память), чтобы кто-то отчитывался о работе с профилировщиком. Ведь наверняка кто-то смотрел под профилировщиком раскладку по функциям движка, памяти , загрузке ядер процессора...

GSC подключали Intel VTune, учитывая макросы _forceinline и комментарий рядом с ним, они профилировали движок и самые жесткие косяки убирали.
Я тоже его использую вместе с VS Profiler который в 2015 версии есть.

Единственное что: руки не доходили до компиляторов, gsc судя по всему тоже. Запрофилирую их как нить на досуге.

Алсо, проблема с битыми группами сглаживания все еще актуальна?

Sharp/soft edges? При каждом упоминании этой проблемы приходит какой-нибудь модельщик и кричит "ДА ПОЧИНИТЕ УЖЕ ЭТО!" laugh.gif
Giperion
Цитата(Cossack-HD @ 05.07.2016, 17:59) *
Sharp/soft edges? При каждом упоминании этой проблемы приходит какой-нибудь модельщик и кричит "ДА ПОЧИНИТЕ УЖЕ ЭТО!" laugh.gif

Вот как? Вообщем я её недавно починил. Очень забавно вышло кстати, расскажу как нибудь.
В этом месяце выложу, там еще с THM правка и еще какая то дичь. Тут еще проблема в том, что у меня уже бинарный формат модели другой, надо будет дописать код для формата Зова Припяти, и наверное Тень Чернобыля тоже.
А вообще с THM я планирую утилитку написать.
Northern Maverick
Giperion
Спасибо за ответ. Если будет информация по профилированию компилятора, и будет не жалко поделиться ею, буду признателен.
Tron
так, в порядке идей:
https://github.com/GameTechDev/MaskedOcclusionCulling
serg101188
а кто подскажит в чём дело при компиляций движка 10007 нет звука в игре и в меню
lafugix
Цитата(Giperion @ 05.07.2016, 20:08) *
Вот как? Вообщем я её недавно починил. Очень забавно вышло кстати, расскажу как нибудь.

А теперь подробности. Они меня очень интересуют shifty.gif
RayTwitty
Цитата(serg101188 @ 06.07.2016, 07:34) *
а кто подскажит в чём дело при компиляций движка 10007 нет звука в игре и в меню

Студия 2010 с сервис паком?
MegaNub
Цитата(RayTwitty @ 07.07.2016, 02:09) *
Цитата(serg101188 @ 06.07.2016, 07:34) *
а кто подскажит в чём дело при компиляций движка 10007 нет звука в игре и в меню

Студия 2010 с сервис паком?

Я собирал без сервис пака, звук был. Проблема наверное в другом.
RayTwitty
Почему когда я использую READ_IF_EXISTS, студия ругается варнингом:
Цитата
warning C4800: int: принудительно задано логическое значение "true" или "false" (предупреждение о производительности)

а в разрабских кодах нет? Что за дискриминация? z_crazy.gif biggrin.gif

Цитата(MegaNub @ 07.07.2016, 07:17) *
Я собирал без сервис пака, звук был. Проблема наверное в другом.

Значит, надо проверять либы связанные со звуком - eax, xrSound, dsound и OpenAL.
Neo][
Цитата(RayTwitty @ 07.07.2016, 22:17) *
а в разрабских кодах нет? Что за дискриминация?

RayTwitty, а сколько там выключено варнингов? smile.gif

И какой уровень предупреждений в настройках проектов?
RayTwitty
Цитата(Neo][ @ 07.07.2016, 21:20) *

И какой уровень предупреждений в настройках проектов?

https://xp-dev.com/sc/204486/HEAD/
Как тут, ничего не менял.

Цитата(Neo][ @ 07.07.2016, 21:20) *

а сколько там выключено варнингов?

А они разве выключены?
Neo][
RayTwitty, ну, тогда надо смотреть, как применяешь. У них же есть 2 ридера конфигов: script и inifile(названия не точные - не помню), один на r_bool возвращает BOOL(что есть int на винде), а другой bool.

Загуглил по гитхабу:

Код
berserk_always                    = READ_IF_EXISTS(!!pSettings,r_bool,section,"berserk_always", false);
m_use_limping_state        = !!(READ_IF_EXISTS(pSettings,r_bool,section,"use_limping_state",FALSE));


юзают двойное отрицание для приведения к bool
RayTwitty
Цитата(Neo][ @ 08.07.2016, 10:24) *

юзают двойное отрицание для приведения к bool

Жесть конечно.

Кстати, не приведет ли это к увеличению числа операций? Или оптимизация выпилит? Зачем вообще нужно это самое BOOL, если есть bool?
mortan
пробовал кто новые итемы добавить?)Я тут хочу конт для артов сделать,ибо скриптами не айс. Делал ли кто-нить подобное,поделитесь опытом)
mortan
получилось сделать,только вот не могу понять почему предметы внутри не сохраняются при сохранении игры)Для того чтобы его в рюкзаке таскать можно было сделал копию inv_box без онлайна и оффлайна. Тыкните плиз где можно поправить эту проблемку
mortan
ещё немного поковырял и пришёл к выводу,что у меня не спавнятся чилды для объекта(в данном случае контейнер).Помогите пожалуйста
Neo][
Цитата(RayTwitty @ 09.07.2016, 00:27) *
Кстати, не приведет ли это к увеличению числа операций? Или оптимизация выпилит? Зачем вообще нужно это самое BOOL, если есть bool?

RayTwitty, конкретно про BOOL - наследие С и винды в частности. В С нет типа bool. Конкретно про xray - хз зачем BOOL. Лишняя инструкция в ассемблере скорее всего появится, но это не столь критично.

mortan, так всётаки не спавнятся или не сохраняются? Писал ли кастом код сериализации своего объекта?
mortan
Neo][,я не уверен что всё сохраняется,но когда включил логирование в консоль при сохранении игры то там идёт сохранение и ящика,и предмета.Но при загрузке игры ящик пуст.
Вот моё же сообщение с амк форума
Делал на основе InentoryBox,но в оригинале он CGameObject,а у меня относится к предметам из инвентаря (CInventoryItem).В чем суть проблемы: при переходе на другую локацию и обратно вложенный предмет в контейнер лежит рядом на земле.Это еще пустяк,но вот если при переходе контейнер лежит в инвентаре то содержимое испаряется,правда при выходе из игры в момент уничтожения объектов игра вылетает с жалобой на отсутствие дочерних элементов.Вот лог ошибки:
Лог ошибки
[error]exp​ression : child
[error]Function : xrServer::Perform_destroy
[error]File : xrServer_sls_clear.cpp
[error]Line : 22
[error]Description : child registered but not found [1002]

Такая же ошибка появляется если сохранить игру и тут же загрузить этот сейв.При сохранении вещи в конте не сохраняются(
Я грешу на то что возможно проблемы связаны с булами m_cont_use и m_close

Правда я читал что CGameObject вообще для всего в игре используется)
Насчёт сериализации мне бы найти где она в оригинале.То что я находил вообще для всех объектов используется,я не нашёл где AlifeItem сохраняется)
mortan
Вот все мои правки
Вот мои правки+gamedata+bin.Я немного не понял всю эту систему сохранения из-за обилия пакетов.Если кому интересно то вот можете скачать и повторить.Игра CoP версии 1.06.2
Мои правки можно смело накатить на branch master из open xray,я на основе его и делал.
ColR_iT
Кто-то, кто владеет плюсами и работал/работает с исходниками, скажи, пожалуйста, если ли возможность вернуть список всех методов доступных из Lua, сгруппированных по принадлежности к игровым объектам?
RayTwitty
ColR_iT, разве что вручную. Все функции разные, в некоторых используется более одного объекта. Автоматической системы, которая бы определяла над какими типами идет работа - нет.
mortan
Маленький вопросец к тем кто качал с моей ссылки - есть предложения как поправить\дописать?)Я тут ещё пару дней бился головой об стенку,но так и не понял где именно проблема - при спавне объекта или во время сохранения.Тут можно свои мысли на свой вопрос высказывать?)Тыкните уже носом в каком файле эти функции,я может сам тогда поправлю.
ColR_iT
RayTwitty, мне почему-то казалось, что вызов метода движка непосредственно в LuaBind идёт по его имени. Ведь есть же staticMetaObject, да и вообще рефлексия/отражение в языке присутствует. В движке экспорт методов в Lua идёт из строго определённого класса или из каждого типа по отдельности? Нужно получить только имя метода и его сигнатуру (что принимает, что возвращает).
P.S. lua_help.script вряд ли в ручную "генерировался".
RayTwitty
Цитата(ColR_iT @ 13.07.2016, 21:05) *
В движке экспорт методов в Lua идёт из строго определённого класса или из каждого типа по отдельности?

Нет, там общий класс CScriptGameObject, а уже внутри функции кастуется в какой надо.

Цитата(ColR_iT @ 13.07.2016, 21:05) *
P.S. lua_help.script вряд ли в ручную "генерировался".

Он не вручную генерился, но сам хэлп убогий.
Есть и делать, то как-то так: http://xray-engine.org/index.php?title=X-Ray_extensions
ColR_iT
RayTwitty, да мне безразлично какого он качества. :-)
Мне нужен публичный (можно статический) метод в движке, который будет возвращать хотя бы текст, в котором будут все экспортированные методы с сигнатурой, идеально, если они будут сгруппированный (любым удобным/доступным способом) по принадлежности к тому или иному объекту.
-StalkMen-
ColR_iT,
Lua_help.script "принтит" консольная команда lua_help.
ColR_iT
Ещё раз повторюсь с вопросом: мне нужен функция в xrGame.dll вида:
Код
extern "C" { __declspec(dllexport) returnType ExportMethods(); }
Возвращающий хотя бы массив строк (в идеале словарь, кажется тип map или std::pair, в общем любом виде доступном для маршалинга) с именами и сигнатурами методов, которые доступны в скриптах Lua. Саму же функцию ExportMethods я буду вызывать в коде C# посредством DllImport.
K.D.
Так ответили же не раз уже - нету такого в релизном движке. Да и в дебажном только lua_help.
ColR_iT
Костя, то, что такого нет - это я понимал ещё до того, как задал вопрос. smile.gif Изначально я спросил о возможности написания такой функции.
Neo][
mortan, посмотри следующие методы у других объектов:
Код
virtual void    net_Export            (NET_Packet& P);
virtual void    net_Import            (NET_Packet& P);

virtual void    save                (NET_Packet &output_packet);
virtual void    load                (IReader &input_packet);


для того, чтобы понять, что и когда вызывается начни раскручивать отсюда:
Код
CALifeStorageManager::load
CALifeStorageManager::save


ColR_iT, а чем не устраивает lua_help, зачем что-то дополнительно писать?
apostol1999
Всем привет! Спасибо кто помог с dx11 rolleyes.gif
Теперь ещё одна проблема, не могу запустить движок, на Windows 10. Как решить ?
Заранее спасибо!
Neo][
Цитата(apostol1999 @ 14.07.2016, 19:12) *
Теперь ещё одна проблема, не могу запустить движок, на Windows 10. Как решить ?

apostol1999, какой вопрос, такой и ответ: просто взять и запустить. sarcasm.gif


Почему нельзя сразу описать всю проблему целиком, рассказать как это выглядит, приложить лог и т.п.?
apostol1999
Цитата(Neo][ @ 14.07.2016, 19:14) *

Цитата(apostol1999 @ 14.07.2016, 19:12) *
Теперь ещё одна проблема, не могу запустить движок, на Windows 10. Как решить ?

apostol1999, запустить.

И правда, это же так легко!
Понимаешь, у меня опыта мало, нету особых знаний, а мне надо запустить..

Лог не могу предоставить.
Просто на win7, win8 работает. На win10 нет. Слышал что проблема была у ребят, они её как то решили.. Не помню уже где

P.S запуск, потом черный экран и все
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.