Ejemplo n.º 1
0
        public TextGenerator(string path, string fontName, uint fontSize = 12)
        {
            if (_textPs == null)
            {
                LoadProgramShader();
            }

            FontName = fontName;
            FontSize = fontSize;

            SharpFont.Library fontLib  = new SharpFont.Library();
            SharpFont.Face    fontFace = new SharpFont.Face(fontLib, path);
            fontFace.SetPixelSizes(0, FontSize);

            GL.PixelStore(PixelStoreParameter.UnpackAlignment, 1);

            for (char c = (char)0x20; c <= (char)0x7E; c++)
            {
                fontFace.LoadChar(c, LoadFlags.Render, LoadTarget.Normal);

                Texture texture = Texture.CreateTexture(
                    fontFace.Glyph.Bitmap.Width,
                    fontFace.Glyph.Bitmap.Rows,
                    PixelInternalFormat.R8,
                    PixelFormat.Red,
                    fontFace.Glyph.Bitmap.Buffer);

                Character character = new Character(
                    texture.ID,
                    new Vector2(fontFace.Glyph.Bitmap.Width, fontFace.Glyph.Bitmap.Rows),
                    new Vector2(fontFace.Glyph.BitmapLeft, fontFace.Glyph.BitmapTop),
                    (int)fontFace.Glyph.Advance.X);

                _characters.Add(c, character);
            }

            fontFace.Dispose();
            fontLib.Dispose();

            vao = VAO.Create();
            vao.LinkPS(_textPs);

            vbo     = VBO.Create <float>(vertices.Length, 4, "vertex");
            indices = new IndicesCollection();
            indices.Add(4, vertices.Length);
            vao.AddVBuff(vbo);
            vao.AddIndicesCollection(indices);
        }
Ejemplo n.º 2
0
        public void Create(Vector3[] positionVboData,Vector3[] normalVboData, int[] indicesVboData)
        {
            length = indicesVboData.Length;
            VBO pos, nor;

            pos = new VBO();
            pos.Create<Vector3>(BufferTarget.ArrayBuffer, positionVboData);

            nor = new VBO();
            nor.Create<Vector3>(BufferTarget.ArrayBuffer, normalVboData);

            ind = new VBO();
            ind.Create<int>(BufferTarget.ElementArrayBuffer, indicesVboData);

            vao = new VAO();
            vao.Create();
            vao.SetVertexAttribPointer(0, 3, pos);
            vao.SetVertexAttribPointer(1, 3, nor);
            VAO.Unbind();
        }