Я просматривал Интернет, пытаясь найти код, который позволяет мне рисовать текст из обычного шрифта (не спрайтового шрифта), и нашел только фрагменты, которые мне совсем не помогли.
Есть ли у кого-нибудь полный исходный файл, который позволяет мне легко рисовать текст с помощью SharpDX и D3D11/DirectWrite? Я хочу сделать прозрачное оверлейное окно, отображающее некоторую информацию (например, Fraps). Я нашел учебник, который делает это, но в нем используется спрайтовый шрифт, и я хочу, чтобы его можно было настраивать с точки зрения размера и шрифта.
Это то, что у меня есть до сих пор:
using System;
using SharpDX;
using SharpDX.Direct3D11;
using SharpDX.Windows;
using SharpDX.Direct2D1;
using SharpDX.DirectWrite;
using SharpDX.DXGI;
namespace SharpDXRenderer
{
static class Program
{
[STAThread]
static void Main()
{
SharpDX.DirectWrite.TextFormat directWriteTextFormat;
SharpDX.DirectWrite.Factory directWriteFactory;
SharpDX.Direct2D1.SolidColorBrush directWriteFontColor;
SharpDX.Direct2D1.RenderTarget direct2DRenderTarget;
Surface d2dSurface;
RenderForm form = new RenderForm("Example");
var desc = new SwapChainDescription()
{
BufferCount = 1,//buffer count
ModeDescription = new ModeDescription(form.ClientSize.Width, form.ClientSize.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),//sview
IsWindowed = true,
OutputHandle = form.Handle,
SampleDescription = new SampleDescription(1, 0),
SwapEffect = SwapEffect.Discard,
Usage = Usage.RenderTargetOutput
};
var d2dFactory = new SharpDX.Direct2D1.Factory();
d2dSurface = backBuffer.QueryInterface<Surface>();
direct2DRenderTarget = new SharpDX.Direct2D1.RenderTarget(d2dFactory, d2dSurface, new SharpDX.Direct2D1.RenderTargetProperties(new SharpDX.Direct2D1.PixelFormat(Format.Unknown, SharpDX.Direct2D1.AlphaMode.Premultiplied)));
directWriteFactory = new SharpDX.DirectWrite.Factory();
directWriteTextFormat = new SharpDX.DirectWrite.TextFormat(directWriteFactory, "Calibri", 12) { TextAlignment = SharpDX.DirectWrite.TextAlignment.Leading, ParagraphAlignment = SharpDX.DirectWrite.ParagraphAlignment.Near };
directWriteFontColor = new SharpDX.Direct2D1.SolidColorBrush(direct2DRenderTarget, Color.White);
}
}
}
Я знаю, что мне не хватает SwapChain, устройства и, я думаю, текстуры, но я не уверен, что мне нужно что-то еще. Мне не хватает этого backBuffer, но я не знаю, какого он типа.
d2dSurface = backBuffer.QueryInterface<Surface>();
Любая помощь в отношении текста и рисования базовой формы приветствуется.
Заранее спасибо.