Как работает движок
OLED Guard Pro - это не заставка. Это работающий в реальном времени и размещённый в памяти GPU видеоконвейер, который обрабатывает каждый кадр на каждом подключённом дисплее, пока ты пользуешься компьютером. Эта страница - технический обзор.
Четырёхэтапный конвейер
1. Захват: Windows Graphics Capture / Desktop Duplication
Windows предоставляет два API, которые дают тебе дескриптор текстуры GPU на то, что DWM компонует для конкретного дисплея: Windows Graphics Capture (WGC) и DXGI Desktop Duplication. OLED Guard поддерживает оба. Настройка «Способ захвата» позволяет выбрать Auto, WGC или Desktop Duplication; Auto выбирает WGC на Windows 11, а в остальных случаях использует Desktop Duplication как классический путь. WGC предпочтительнее там, где он доступен, потому что продолжает отдавать кадры с полной частотой внутри полноэкранных игр, где Desktop Duplication может недополучать кадры. В любом случае свойства, на которые мы опираемся, сохраняются:
- Захват работает на GPU. Буфер кадра никогда не покидает видеопамять.
- Оба API работают внутри безрамочных полноэкранных игр (а это режим, в котором большинство геймеров и играют на самом деле). Более старые подходы вроде BitBlt или PrintWindow так не умеют.
- HDR, несколько мониторов и дисплеи с высокой частотой обновления поддерживаются без каких-либо особых действий с нашей стороны.
Если драйвер графики сбрасывается посреди сессии или захват умирает, движок это замечает и чисто перезапускает конвейер, вместо того чтобы молча остановиться.
2. Модель: пиксельный шейдер экспозиции
Пиксельный шейдер обрабатывает каждый захваченный кадр в нативном разрешении. Для каждого пикселя он вычисляет:
luminance = dot(pixelRGB, vec3(0.2126, 0.7152, 0.0722));
delta = luminance * frameTime;
exposure[p] = exposure[p] + delta;
Параллельно выполняются ещё два прохода:
- Огибающая движения. Дешёвый временной фильтр высоких частот: насколько сильно этот пиксель изменился за последние N кадров? У пикселей с большим движением экспозиция затухает быстрее, потому что движущийся контент не концентрирует старение.
- Детектор стабильности. Фильтр низких частот по огибающей движения: пиксели, значение которых остаётся стабильным на протяжении многих кадров, помечаются как «статичные» и становятся кандидатами на защиту.
Гистограмма экспозиции хранится с двойной буферизацией в памяти GPU. На горячем пути нет обратного чтения в CPU.
3. Отображение: превращаем риск в непрерывное поле
Модель экспозиции говорит, где нарастает износ панели. Этап отображения решает, как этот риск на самом деле появляется на экране. В v5 это единое непрерывное поле, а не стек отдельных проходов оверлея. Оно строится из двух временных полей низкого разрешения:
- Заполненность отвечает на вопрос «есть ли здесь защищаемый контент постоянно?», так что кратковременная яркая вспышка не запускает затемнение.
- Интенсивность отвечает на вопрос «сколько защиты модель риска хочет здесь?».
Видимое затемнение - это произведение этих двух полей, формируемое явно упорядоченными модификаторами: немедленное защитное ядро для настоящих пиков высокого риска, нижний порог запомненных HUD от Game IQ, период отсрочки для статики, прямоугольники исключения, опциональный вес краёв виньеткой и формирование узора синим шумом. Поскольку отображение держится отдельно от истории, движущийся контент может отпускать устаревшее затемнение, не стирая экспозицию, которую панель на самом деле накопила.
В ручном режиме ты задаёшь силу и форму на странице Overlay. В Auto Mode контроллер смотрит на живую классификацию сигнала (работа, игры, видео, простой), пиксельную огибающую движения и трассировку динамичности и выбирает конфигурацию, которая, по мнению модели, минимизирует риск в рамках бюджета заметности. Ты можешь наблюдать это в разделе Дополнительно > Живой классификатор.
4. Композитинг: DWM с предумноженной альфой
Второй шейдер рендерит выбранный оверлей в прозрачное окно, которое всегда поверх остальных. Desktop Window Manager компонует это окно на твой рабочий стол, используя предумноженную альфу: тот же путь, что он использует для собственных анимаций Windows. Вот почему оверлей корректно работает в:
- режимах SDR и HDR,
- безрамочных полноэкранных играх,
- дисплеях с переменной частотой обновления (G-Sync / FreeSync),
- конфигурациях с несколькими мониторами,
- конфигурациях со смешанным DPI.
Фактическим смешиванием занимается DWM. Мы лишь поставляем кадр.
Для каждого дисплея, параллельно
Каждый подключённый дисплей запускает собственную копию конвейера. Они не делят состояние между собой. Смена монитора, горячее подключение, изменение разрешения - движок это замечает, отбрасывает затронутый конвейер и пересобирает его, не мешая остальным.
Что выполняется на CPU
CPU делает:
- компиляцию шейдеров при запуске,
- пресеты, конфигурацию и интерфейс на React,
- мониторинг окна переднего плана для профилей приложений,
- команды DDC/CI, когда ты меняешь яркость через приложение.
CPU не видит содержимое твоего экрана. Кадры всё это время остаются в памяти GPU.
Бюджет производительности
Репрезентативное измерение при 1440p / 144 Hz на GPU среднего уровня:
| Этап | Стоимость на кадр |
|---|---|
| Захват | ~ 0,4 ms |
| Модель | ~ 0,3 ms |
| Композитинг | ~ 0,5 ms |
| Итого | ~ 1,2 ms |
Это 7 % от бюджета 16,6 ms / 60 Hz, но работа выполняется на стороне GPU, а не блокирует путь рендеринга твоей игры, поэтому реальное влияние по времени в бенчмарках обычно ниже 1 %. Более высокие разрешения, более высокие частоты обновления и более слабые GPU увеличивают стоимость; относительная картина остаётся той же.
Что было намеренно опущено
Несколько проектных решений, которые мы перепроверяли не один раз:
- Никакой ячеечной модели риска. Слой защиты, который рассуждал поверх плиток 32 × 32, был прототипирован и заброшен. Пиксельное моделирование честнее по отношению к физике; жёсткие плитки давали лестничные артефакты на границах контента. Поле отображения v5 намеренно имеет низкое разрешение, но оно непрерывно сглаживается и перекрёстно затухает, поэтому никогда не создаёт ступенчатости так, как те жёсткие плитки, а лежащая в основе модель риска остаётся пиксельной.
- Никаких эвристик выгорания на стороне CPU. Движок не пытается распознать «это боковая панель Discord» или «это логотип YouTube». Распознавание хрупко и плохо устаревает. Экспозиция - это универсальная физическая величина.
- Никакого конвейера телеметрии. Пиксельные гистограммы никогда не покидают твою машину. У нас по замыслу нет серверов, которые бы их получали.
Если ты хочешь увидеть движок в действии, страница Дополнительный движок в десктоп-приложении показывает живой классификатор, трассировки авто-контроллера по каждой ручке и полосу живых сигналов на 60 Hz.