Direct2d вершинный затененный треугольник / прямоугольник эквивалент GDI+ graphicspath
Поэтому я работал над неуправляемой системой C++ 2D MFC в Visual Studio 2013 с использованием GDI+ (document View architecture). Мне нужны простые фигуры, затененные от каждой вершины фигуры - либо треугольник с цветом в каждом углу, смешивающий эти цвета с интерьером, либо прямоугольник, делающий то же самое.
В GDI plus это довольно просто:
using namespace Gdiplus; void DrawGradientTriangle( Graphics &rGraphics ) { Gdiplus::GraphicsPath gpath; gpath.AddLine( 100, 400, 200, 400 ); gpath.AddLine( 200, 400, 150, 300 ); gpath.CloseFigure(); int nColorCount = 3; Color agdiClr[] = { Color::Red, Color::Green, Color::Blue }; PathGradientBrush gbrush( &gpath ); gbrush.SetSurroundColors( agdiClr, &nColorCount ); gbrush.SetCenterColor( Color::White ); rGraphics.FillPath( &gbrush, &gpath ); }
Однако у меня достаточно этих форм, чтобы аппаратное ускорение было оценено по достоинству, поэтому я хотел бы перейти на D2D. Windows7-это цель, и я понимаю, что аппаратное ускорение не обязательно обеспечивается GDI+ в более поздних ОС.
Есть ли какой-нибудь эквивалент этому в Direct2D? Я смог заставить большинство аспектов системы хорошо работать в D2D, но не нашел никакого удобного способа имитировать описанное выше поведение. Я знаю, что это можно сделать в Direct3D, но инфраструктура для этого в программе mfc немного одиозна, и я не в восторге от того, чтобы идти в этом направлении.
Любое направление было бы очень ценно.
Что я уже пробовал:
Я просмотрел более актуальные варианты в D2D, особенно рисование градиентной сетки (см. https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/D2DGradientMesh/README.md) но эти функции, по-видимому, поддерживаются только в Windows10 или более поздней версии.