Инициализация direct2d
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &factory);
DWriteCreateFactory(DWRITE_FACTORY_TYPE_ISOLATED, __uuidof(IDWriteFactory), reinterpret_cast<IUnknown **>(&wFactory));
DPIScale::Initialize(factory);
HWND hand = mWindowStatic->getWindowHandle();
factory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(),D2D1::HwndRenderTargetProperties(hand, D2D1::SizeU(mWidth, mHeight)),&renderTarget);
renderTarget->SetDpi(96, 96);
Создание окна Windows
WNDCLASSEXW windowClass = {0};
windowClass.cbSize = sizeof(WNDCLASSEX);
windowClass.hbrBackground = NULL;
windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
windowClass.hInstance = NULL;
//windowClass.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW + 1);
windowClass.lpfnWndProc = MessageRouter;
windowClass.lpszClassName = title.c_str();
windowClass.lpszMenuName = NULL;
windowClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClassExW(&windowClass);
int aElements[2] = {COLOR_ACTIVECAPTION, COLOR_ACTIVECAPTION};
windowHandle = CreateWindowExA(
WS_EX_WINDOWEDGE,
std::string(title.cbegin(),title.cend()).c_str(),
NULL,
WS_POPUP | WS_VISIBLE | WS_SIZEBOX,
posX,
posY,
width,
height,
NULL,
NULL,
NULL,
this);
Ну и естественно рисование
renderTarget->BeginDraw();
//1 кадр рисую UI
//Все остальные кадры перерисовываю область 100x50px через PushAxisAlignedClip
renderTarget->PushAxisAlignedClip(rect,D2D1_ANTIALIAS_MODE_ALIASED);
renderTarget->PopAxisAlignedClip();
renderTarget->EndDraw();
Проблема в том что даже если я оптимизирую реднеринг перерисовывая грязные треугольники dwm нагружается так, что как будто ему отсылается полностью весь буффер изображения.
Возможно ли как то сказать ему что я перерисовываю только маленькую область окна?
P.S Интерфейс рисую полностью на direct2d, без участия WM_PAINT