private DXFont GetFont(System.Drawing.Font font) { DXFont result = null; string fontKey = string.Format("{0}{1}{2}", font.Name, font.Size, font.Style); if (!_fontCache.TryGetValue(fontKey, out result)) { result = new DXFont(_device, _deviceContext); result.Initialize(font.Name, font.Size, font.Style, true); _fontCache[fontKey] = result; } return result; }
public void DrawString(int X, int Y, string text, int R, int G, int B, int A, DXFont F) { Color4 blendFactor = new Color4(1.0f); Color4 backupBlendFactor; int backupMask; var backupBlendState = _deviceContext.OutputMerger.GetBlendState(out backupBlendFactor, out backupMask); _deviceContext.OutputMerger.SetBlendState(_transparentBS, blendFactor); BeginBatch(F.GetFontSheetSRV()); int length = text.Length; int posX = X; int posY = Y; Color4 color; Vector4 Vec = new Vector4(R > 0 ? (float)(R / 255.0f) : 0.0f, G > 0 ? (float)(G / 255.0f) : 0.0f, B > 0 ? (float)(B / 255.0f) : 0.0f, A > 0 ? (float)(A / 255.0f) : 0.0f); color = new Color4(Vec); for (int i = 0; i < length; ++i) { char character = text[i]; if (character == ' ') posX += F.GetSpaceWidth(); else if (character == '\n') { posX = X; posY += F.GetCharHeight(); } else { Rectangle charRect = F.GetCharRect(character); int width = charRect.Right - charRect.Left; int height = charRect.Bottom - charRect.Top; Draw(new Rectangle(posX, posY, posX + width, posY + height), charRect, color); posX += width + 1; } } EndBatch(); _deviceContext.OutputMerger.SetBlendState(backupBlendState, backupBlendFactor, backupMask); }