- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 538
- Реакции
- 14
Народ, кто плотно ковырял либу DiscordOverlay (которая от JoakimCarlsson) для внешних софтов? Столкнулся с классической проблемой прикручивания рендера к CS2, когда на бумаге всё красиво, а на деле — оверлей ложится при любом чихе Дискорда.
Суть проблемы:
Пытаюсь прокинуть свои фреймы в пайп Дискорда. Изначальный код заводится, но как только в самом Дискорде начинается какая-то активность (например, залетает входящий вызов), весь оверлей просто отваливается.
Попробовал завернуть всё в бесконечный цикл, чтобы принудительно обновлять картинку:
Технические грабли:
Что нужно допилить:
Очевидно, что нужно как-то оптимизировать передачу кадров. Возможно, стоит слать фрейм только при изменении данных или привязаться к вертикальной синхронизации. Также открыт вопрос, как грамотно обрабатывать прерывания от самого Дискорда, чтобы оверлей не крашился при каждом уведомлении.
Кто уже наступал на эти грабли и фиксил производительность GraphicsPipe? Поделитесь кусками кода или направьте, куда копать, чтобы не изобретать велосипед с нуля.
Кто юзал этот метод в реальных проектах, отпишитесь по стабильности.
Суть проблемы:
Пытаюсь прокинуть свои фреймы в пайп Дискорда. Изначальный код заводится, но как только в самом Дискорде начинается какая-то активность (например, залетает входящий вызов), весь оверлей просто отваливается.
Попробовал завернуть всё в бесконечный цикл, чтобы принудительно обновлять картинку:
Код:
namespace cs2_external.Discord
{
public class Hook
{
public static void Start(Process process)
{
var frame = new Frame(1920, 1080);
var processInfo = new GraphicsPipe.ConnectedProcessInfo { ProcessId = process.Id };
if (!GraphicsPipe.ConnectToProcess(processInfo))
return;
while (true)
{
Drawing.ClearCanvas(frame);
Drawing.DrawString(frame, "Testing Overlay", 50, 50, SKColors.White, 13);
GraphicsPipe.SendFrame(processInfo, frame.Width, frame.Height, frame.Buffer, frame.Size);
}
}
}
}
Технические грабли:
- Производительность улетает в трубу. Метод SendFrame — это узкое горлышко. Гонять 1080p фреймы в while(true) без какой-либо синхронизации — гиблое дело, CPU долбится в сотку, а FPS в игре проседает.
- Конфликты с самим Дискордом. Похоже, когда DiscordOverlay пытается отрисовать свои элементы (уведомления, плашки звонков), наши хуки начинают драться за буфер, и всё ломается.
Что нужно допилить:
Очевидно, что нужно как-то оптимизировать передачу кадров. Возможно, стоит слать фрейм только при изменении данных или привязаться к вертикальной синхронизации. Также открыт вопрос, как грамотно обрабатывать прерывания от самого Дискорда, чтобы оверлей не крашился при каждом уведомлении.
Кто уже наступал на эти грабли и фиксил производительность GraphicsPipe? Поделитесь кусками кода или направьте, куда копать, чтобы не изобретать велосипед с нуля.
Кто юзал этот метод в реальных проектах, отпишитесь по стабильности.
