internal GPUBufferedString(VGFont font, bool preferVRAM) : base(font) { if (!font.IsStatic) throw new ArgumentException("Font must be static for full GPU rendering!", "font"); _preferVRAM = preferVRAM; }
public void DrawText(VGFont font, uint glyphCount, byte[] utf32Text, PaintMode paintModes, bool allowAutoHinting) { unsafe { int mm = matrixMode; // Get current matrix: float *m = stackalloc float[9]; vgGetMatrix(m); // Switch to image matrix if not already: if (mm != (int)MatrixMode.VG_MATRIX_IMAGE_USER_TO_SURFACE) { vgSeti(ParamType.VG_MATRIX_MODE, (int)MatrixMode.VG_MATRIX_IMAGE_USER_TO_SURFACE); vgLoadMatrix(m); } //VG_MATRIX_IMAGE_USER_TO_SURFACE // Render text: fixed(byte *bytes = utf32Text) { uint *p = (uint *)bytes; for (uint i = 0; i < glyphCount; i++, p++) { //vgDrawGlyph(textFont, *p, (uint)paintModes, 0U); // Translate to origin of glyph: var origin = font.Origins[*p]; vgTranslate(-origin[0], -origin[1]); // Draw the image: vgDrawImage(font.Images[*p]); // Undo origin translation: vgTranslate(origin[0], origin[1]); // Advance to next glyph position: var escapement = font.Escapements[*p]; vgTranslate(escapement[0], escapement[1]); } } // Restore previous matrix mode: if (mm != (int)MatrixMode.VG_MATRIX_IMAGE_USER_TO_SURFACE) { vgSeti(ParamType.VG_MATRIX_MODE, mm); } // Restore old matrix: vgLoadMatrix(m); } }
internal CPUString(VGFont font) : base(font) { }