Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
 internal CPUString(VGFont font)
     : base(font)
 {
 }