Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Проблема с отображением визуалов.

  • Автор темы Автор темы Monop0Ly
  • Дата начала Дата начала
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Участник
Участник
Статус
Оффлайн
Регистрация
20 Апр 2017
Сообщения
1,375
Реакции
377
в общем такая проблема, может кто сталкивался, визуалы (боксы/хп/имя и прочее) мерцают и появляются по всему экрану в разных местах, рендерю визуалы в хуке
DWORD dwPresent = FindPatternIDA("gameoverlayrenderer.dll", "57 50 FF 75 0C 56 FF 15 ? ? ? ? 8B F8 85") + 0x8;
до этого в этом исходнике был рендер визуалов в PaintTraverse и подобной проблемы не наблюдалось, я решил добавить обход обс и началась эта шляпа, подскажите в какую сторону копать
если нужна какая то дополнительная информация, предоставлю
 
Данная проблема возникает тогда, когда в игре включена настройка многоядерной обработки. Так как Steam Overlay вызывает Present не из игрового потока, то, вообще, вызов функций движка ( например TraceRay, SetupBones ), а также использование данных, модифицируемых игровым движком, из данного потока не безопасно, что в конечном итоге может привести к крашу программы. В твоём случае, ты используешь матрицу преобразования игровых координат в координаты экрана, которая не является потокобезопасной ( то есть не безопасной для использования не из игрового потока ). Получить потокобезопасную матрицу можно таким способом:
Код:
Expand Collapse Copy
const VMatrix& ViewMatrix = *(VMatrix*)((*(DWORD*)(DWORD(&g_pEngine->WorldToScreenMatrix()) + 0x40)) + 0x3DC);
 
Последнее редактирование:
Данная проблема возникает тогда, когда в игре включена настройка многоядерной обработки. Так как Steam Overlay вызывает Present не из игрового потока, то, вообще, вызов функций движка ( например TraceRay, SetupBones ), а также использование данных, модифицируемых игровым движком, из данного потока не безопасно, что в конечном итоге может привести к крашу программы. В твоём случае ты используешь матрицу преобразования игровых координат в координаты экрана, которая не является потокобезопасной ( то есть не безопасной для использования не из игрового потока ). Получить потокобезопасную матрицу можно таким способом:
Код:
Expand Collapse Copy
const VMatrix& ViewMatrix = *(VMatrix*)((*(DWORD*)(DWORD(&g_pEngine->WorldToScreenMatrix()) + 0x40)) + 0x3DC);
Спасибо за внятный ответ.
 
Назад
Сверху Снизу