Direct 2D #12. Слои и эффекты
Johnny_Depp 16 минут назад Direct 2D #12. Слои и эффекты Простой 9 мин 140 C++ * Windows * Разработка игр * Туториал О Слоях.Слой - это временная цель рендеринга, на которой вы рисуете отдельно, а затем результат...
Anthropic — What company has the best second artificial intelligence model at the end of June?
Значимый прорыв формирует отрасль ИИ: Johnny_Depp 16 минут назад Direct 2D #12. Слои и эффекты Простой 9 мин 140 C++ * Windows * Разработка игр * Туториал О Слоях. Слой - это временная цель рендеринга, на которой вы рисуете отдельно, а затем результат накладывается на основную цель рендеринга.
В Direct2D слой представлен интерфейсом ID2D1Layer. Подобно кистям, слои создаются рендер-таргетом и являются ресурсами, зависимыми от устройства. Слой может использоваться только одной целью рендеринга в один момент времени.
Технические детали
Если размер слоя не указан при создании, метод PushLayer автоматически определяет минимальный необходимый размер на основе содержимого и маски. Пример работы со слоями (сначала общий план):Пример работы со слоями (сначала общий план):Создаём слой через CreateLayerДобавляем слой через PushLayer - следующие команды(рисования) будут направляться в слойДостаём слой через PopLayer - содержимое слоя смешивается с основной целью рендераВыполнение первого пункта:Для создания слоя используют CreateLayer:ID2D1Layer* pLayer = nullptr; HRESULT hr = pRenderTarget->CreateLayer(nullptr, &pLayer); if (FAILED(hr)) { // Обработка ошибки }Первый параметр - размер слоя в пикселях. При передаче nullptr размер будет определён автоматически при вызове PushLayer.
Слой автоматически расширяется при необходимости, но никогда не уменьшаетсяВыполнение второго пункта:D2D1_LAYER_PARAMETERS layerParams = D2D1::LayerParameters(); pRenderTarget->PushLayer(layerParams, pLayer);О структуре ;layerOptions - дополнительные опции слоя. Начиная с Windows 8 используется D2D1_LAYER_OPTIONS1 с новыми опциями, которые могут улучшить производительность:D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND - Direct2D не очищает слой прозрачным чёрным, что в большинстве случаев даёт лучшую производительность. D2D1_LAYER_OPTIONS1_IGNORE_ALPHA - позволяет не изменять альфа-канал слоя (используйте только когда альфа-канал не нужен).
// Параметры по умолчанию, но с установленной прозрачностью D2D1_LAYER_PARAMETERS layerParams = D2D1::LayerParameters(); layerParams. 5f; // 50% прозрачности m_pRenderTarget->PushLayer(layerParams, m_pLayer); // ... здесь рисуем на слое ...
m_pRenderTarget->PopLayer();А вот пример использования геометрической маски - например, чтобы нарисовать текстуру только внутри круга:// Предположим, у нас есть созданная геометрия pCircleGeometry D2D1_LAYER_PARAMETERS layerParams = D2D1::LayerParameters(); layerParams. geometricMask = pCircleGeometry; layerParams.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





