Да, я написал элемент управления Windows Forms, который оборачивает DirectX 9.0 и обеспечивает прямое управление на пиксельном уровне поверхности видео.
На самом деле я написал еще один пост о переполнении стека, спрашивая, есть ли другие лучшие подходы: Небезопасный C # и указатели для 2D-рендеринга, хорошо это или плохо?
Несмотря на относительно высокую производительность, для него требуется небезопасный параметр компилятора, поскольку он использует указатели для эффективного доступа к памяти. Отсюда и причина этого более раннего поста.
Это высокий уровень необходимых шагов:
- Загрузите DirectX SDK.
- Создание нового проекта C #
Windows Forms и ссылка на установленный
Сборка Microsoft DirectX.
Инициализация нового объекта DirectX Device с параметрами представления.
(окно, обратная буферизация и т. д.) вам требуется.
Создайте устройство, позаботившись о том, чтобы записать поверхность «Шаг» и
текущий режим отображения (бит на пиксель).
Когда вам нужно что-то отобразить, Lock
задний буфер
поверхности и сохранить возвращенный указатель на начало поверхности
память.
Используйте арифметику указателя, рассчитайте фактическую позицию пикселя в
данные на основе шага поверхности,
бит на пиксель и фактическая координата пикселя x / y.
В моем случае для простоты я придерживаюсь 32 bpp, что означает установку пикселя так же просто, как: * (surfacePointer + (y * pitch + x)) = Color.FromARGB (255,0,0);
По окончании рисования Unlock
задняя буферная поверхность. Представьте поверхность.
При необходимости повторите процедуру, начиная с шага 5.
Имейте в виду, что при таком подходе вы должны быть очень осторожны при проверке текущего режима отображения (шаг и биты на пиксель) целевой поверхности. Также вам необходимо иметь стратегию для изменения размера окна или изменения формата экрана во время работы вашей программы.