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); }
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(); }