/// <summary> /// Draws the text. /// </summary> /// <param name="gl">The gl.</param> /// <param name="x">The x.</param> /// <param name="y">The y.</param> /// <param name="r">The r.</param> /// <param name="g">The g.</param> /// <param name="b">The b.</param> /// <param name="faceName">Name of the face.</param> /// <param name="fontSize">Size of the font.</param> /// <param name="text">The text.</param> public void DrawText(OpenGL gl, int x, int y, float r, float g, float b, string faceName, float fontSize, string text) { // Get the font size in pixels. var fontHeight = (int)(fontSize * (16.0f / 12.0f)); // Do we have a font bitmap entry for this OpenGL instance and face name? var result = (from fbe in fontBitmapEntries where fbe.HDC == gl.RenderContextProvider.DeviceContextHandle && fbe.HRC == gl.RenderContextProvider.RenderContextHandle && String.Compare(fbe.FaceName, faceName, StringComparison.OrdinalIgnoreCase) == 0 && fbe.Height == fontHeight select fbe).ToList(); // Get the FBE or null. var fontBitmapEntry = result.FirstOrDefault(); // If we don't have the FBE, we must create it. if (fontBitmapEntry == null) fontBitmapEntry = CreateFontBitmapEntry(gl, faceName, fontHeight); double width = gl.RenderContextProvider.Width; double height = gl.RenderContextProvider.Height; // Create the appropriate projection matrix. gl.MatrixMode(OpenGL.GL_PROJECTION); gl.PushMatrix(); gl.LoadIdentity(); int[] viewport = new int[4]; gl.GetInteger(OpenGL.GL_VIEWPORT, viewport); gl.Ortho(0, width, 0, height, -1, 1); // Create the appropriate modelview matrix. gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.PushMatrix(); gl.LoadIdentity(); gl.Color(r, g, b); gl.RasterPos(x, y); gl.PushAttrib(OpenGL.GL_LIST_BIT | OpenGL.GL_CURRENT_BIT | OpenGL.GL_ENABLE_BIT | OpenGL.GL_TRANSFORM_BIT); gl.Color(r, g, b); gl.Disable(OpenGL.GL_LIGHTING); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.Disable(OpenGL.GL_DEPTH_TEST); gl.RasterPos(x, y); // Set the list base. gl.ListBase(fontBitmapEntry.ListBase); // Create an array of lists for the glyphs. var lists = text.Select(c => (byte) c).ToArray(); // Call the lists for the string. gl.CallLists(lists.Length, lists); gl.Flush(); // Reset the list bit. gl.PopAttrib(); // Pop the modelview. gl.PopMatrix(); // back to the projection and pop it, then back to the model view. gl.MatrixMode(OpenGL.GL_PROJECTION); gl.PopMatrix(); gl.MatrixMode(OpenGL.GL_MODELVIEW); }
/// <summary> /// Draws the text. /// </summary> /// <param name="gl">The gl.</param> /// <param name="faceName">Name of the face.</param> /// <param name="fontSize">Size of the font.</param> /// <param name="deviation">The deviation.</param> /// <param name="extrusion">The extrusion.</param> /// <param name="text">The text.</param> public void DrawText(OpenGL gl, string faceName, float fontSize, float deviation, float extrusion, string text) { // Get the font size in pixels. var fontHeight = (int)(fontSize * (16.0f / 12.0f)); // Do we have a font bitmap entry for this OpenGL instance and face name? var result = (from fbe in fontOutlineEntries where fbe.HDC == gl.RenderContextProvider.DeviceContextHandle && fbe.HRC == gl.RenderContextProvider.RenderContextHandle && String.Compare(fbe.FaceName, faceName, StringComparison.OrdinalIgnoreCase) == 0 && fbe.Height == fontHeight && fbe.Deviation == deviation && fbe.Extrusion == extrusion select fbe).ToList(); // Get the FBE or null. var fontOutlineEntry = result.FirstOrDefault(); // If we don't have the FBE, we must create it. if (fontOutlineEntry == null) { fontOutlineEntry = CreateFontOutlineEntry(gl, faceName, fontHeight, deviation, extrusion, FontOutlineFormat.Polygons); } // Set the list base. gl.ListBase(fontOutlineEntry.ListBase); // Create an array of lists for the glyphs. var lists = text.Select(c => (byte)c).ToArray(); // Call the lists for the string. gl.CallLists(lists.Length, lists); gl.Flush(); }
/// <summary> /// Draws the text. /// </summary> /// <param name="gl">The gl.</param> /// <param name="faceName">Name of the face.</param> /// <param name="deviation">The deviation.</param> /// <param name="extrusion">The extrusion.</param> /// <param name="text">The text.</param> /// <param name="glyphMetrics"> </param> /// <returns>True if the text was rendered, false if the underlying font could not be created.</returns> public bool DrawText(OpenGL gl, string faceName, float deviation, float extrusion, string text, out GLYPHMETRICSFLOAT[] glyphMetrics) { // Do we have a font bitmap entry for this OpenGL instance and face name? // If not, create one. const float tolerance = 0.01f; var fontOutlineEntry = (from fbe in fontOutlineEntries where fbe.HDC == gl.RenderContextProvider.DeviceContextHandle && fbe.HRC == gl.RenderContextProvider.RenderContextHandle && string.Compare(fbe.FaceName, faceName, StringComparison.OrdinalIgnoreCase) == 0 && Math.Abs(fbe.Deviation - deviation) < tolerance && Math.Abs(fbe.Extrusion - extrusion) < tolerance select fbe).FirstOrDefault() ?? CreateFontOutlineEntry(gl, faceName, deviation, extrusion, FontOutlineFormat.Polygons); // If we failed to create the outline entry we'll need to bail. if (fontOutlineEntry == null) { glyphMetrics = null; return(false); } // Set the list base. gl.ListBase(fontOutlineEntry.ListBase); // Create an array of lists for the glyphs. var lists = text.Select(c => (byte)c).ToArray(); // Call the lists for the string. gl.CallLists(lists.Length, lists); gl.Flush(); // Return the glyph metrics used. glyphMetrics = fontOutlineEntry.GlyphMetrics; return(true); }
/// <summary> /// Draws the text. /// </summary> /// <param name="gl">The gl.</param> /// <param name="faceName">Name of the face.</param> /// <param name="fontSize">Size of the font.</param> /// <param name="text">The text.</param> public void DrawText(OpenGL gl, string faceName, float fontSize, float deviation, float extrusion, string text) { // Get the font size in pixels. int fontHeight = (int)(fontSize * (16.0f / 12.0f)); // Do we have a font bitmap entry for this OpenGL instance and face name? var result = from fbe in fontOutlineEntries where fbe.HDC == gl.RenderContextProvider.DeviceContextHandle && fbe.HRC == gl.RenderContextProvider.RenderContextHandle && string.Compare(fbe.FaceName, faceName, true) == 0 && fbe.Height == fontHeight && fbe.Deviation == deviation && fbe.Extrusion == extrusion select fbe; // Get the FBE or null. var fontOutlineEntry = result == null || result.Count() == 0 ? null : result.First(); // If we don't have the FBE, we must create it. if (fontOutlineEntry == null) fontOutlineEntry = CreateFontOutlineEntry(gl, faceName, fontHeight, deviation, extrusion, FontOutlineFormat.Polygons); // Set the list base. gl.ListBase(fontOutlineEntry.ListBase); // Create an array of lists for the glyphs. List<byte> lists = new List<byte>(); foreach(char c in text) lists.Add((byte)c); // Call the lists for the string. gl.CallLists(lists.Count, lists.ToArray()); gl.Flush(); }
/// <summary> /// Draws the text. /// </summary> /// <param name="gl">The gl.</param> /// <param name="faceName">Name of the face.</param> /// <param name="fontSize">Size of the font.</param> /// <param name="deviation">The deviation.</param> /// <param name="extrusion">The extrusion.</param> /// <param name="text">The text.</param> public void DrawText(OpenGL gl, string faceName, float fontSize, float deviation, float extrusion, string text) { // Get the font size in pixels. var fontHeight = (int)(fontSize * (16.0f / 12.0f)); // Do we have a font bitmap entry for this OpenGL instance and face name? var result = (from fbe in fontOutlineEntries where fbe.HDC == gl.RenderContextProvider.DeviceContextHandle && fbe.HRC == gl.RenderContextProvider.RenderContextHandle && String.Compare(fbe.FaceName, faceName, StringComparison.OrdinalIgnoreCase) == 0 && fbe.Height == fontHeight && fbe.Deviation == deviation && fbe.Extrusion == extrusion select fbe).ToList(); // Get the FBE or null. var fontOutlineEntry = result.FirstOrDefault(); // If we don't have the FBE, we must create it. if (fontOutlineEntry == null) fontOutlineEntry = CreateFontOutlineEntry(gl, faceName, fontHeight, deviation, extrusion, FontOutlineFormat.Polygons); // Set the list base. gl.ListBase(fontOutlineEntry.ListBase); // Create an array of lists for the glyphs. var lists = text.Select(c => (byte) c).ToArray(); // Call the lists for the string. gl.CallLists(lists.Length, lists); gl.Flush(); }
/// <summary> /// Draws the text. /// </summary> /// <param name="gl">The gl.</param> /// <param name="x">The x.</param> /// <param name="y">The y.</param> /// <param name="r">The r.</param> /// <param name="g">The g.</param> /// <param name="b">The b.</param> /// <param name="faceName">Name of the face.</param> /// <param name="fontSize">Size of the font.</param> /// <param name="text">The text.</param> /// <param name="resWidth">Horizontal resolution.</param> /// <param name="resHeight">Vertical resolution.</param> public void DrawText(OpenGL gl, int x, int y, float r, float g, float b, string faceName, float fontSize, string text, double resWidth, double resHeight) { // Get the font size in pixels. var fontHeight = (int)(fontSize * (16.0f / 12.0f)); // Do we have a font bitmap entry for this OpenGL instance and face name? var result = (from fbe in fontBitmapEntries where fbe.HDC == gl.RenderContextProvider.DeviceContextHandle && fbe.HRC == gl.RenderContextProvider.RenderContextHandle && String.Compare(fbe.FaceName, faceName, StringComparison.OrdinalIgnoreCase) == 0 && fbe.Height == fontHeight select fbe).ToList(); // Get the FBE or null. var fontBitmapEntry = result.FirstOrDefault(); // If we don't have the FBE, we must create it. if (fontBitmapEntry == null) { fontBitmapEntry = CreateFontBitmapEntry(gl, faceName, fontHeight); } // Create the appropriate projection matrix. gl.MatrixMode(OpenGL.GL_PROJECTION); gl.PushMatrix(); gl.LoadIdentity(); gl.Ortho(0, resWidth, 0, resHeight, -1, 1); // Create the appropriate modelview matrix. gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.PushMatrix(); gl.LoadIdentity(); gl.Color(r, g, b); gl.RasterPos(x, y); gl.PushAttrib(OpenGL.GL_LIST_BIT | OpenGL.GL_CURRENT_BIT | OpenGL.GL_ENABLE_BIT | OpenGL.GL_TRANSFORM_BIT); gl.Color(r, g, b); gl.Disable(OpenGL.GL_LIGHTING); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.Disable(OpenGL.GL_DEPTH_TEST); gl.RasterPos(x, y); // Set the list base. gl.ListBase(fontBitmapEntry.ListBase); // Create an array of lists for the glyphs. var lists = text.Select(c => (byte)c).ToArray(); // Call the lists for the string. gl.CallLists(lists.Length, lists); gl.Flush(); // Reset the list bit. gl.PopAttrib(); // Pop the modelview. gl.PopMatrix(); // back to the projection and pop it, then back to the model view. gl.MatrixMode(OpenGL.GL_PROJECTION); gl.PopMatrix(); gl.MatrixMode(OpenGL.GL_MODELVIEW); }
/// <summary> /// Draws the text. /// </summary> /// <param name="gl">The gl.</param> /// <param name="x">The x.</param> /// <param name="y">The y.</param> /// <param name="r">The r.</param> /// <param name="g">The g.</param> /// <param name="b">The b.</param> /// <param name="faceName">Name of the face.</param> /// <param name="fontSize">Size of the font.</param> /// <param name="text">The text.</param> public void DrawText(OpenGL gl, int x, int y, float r, float g, float b, string faceName, float fontSize, string text) { // Get the font size in pixels. int fontHeight = (int)(fontSize * (16.0f / 12.0f)); // Do we have a font bitmap entry for this OpenGL instance and face name? var result = from fbe in fontBitmapEntries where fbe.HDC == gl.RenderContextProvider.DeviceContextHandle && fbe.HRC == gl.RenderContextProvider.RenderContextHandle && string.Compare(fbe.FaceName, faceName, true) == 0 && fbe.Height == fontHeight select fbe; // Get the FBE or null. FontBitmapEntry fontBitmapEntry = result == null || result.Count() == 0 ? null : result.First(); // If we don't have the FBE, we must create it. if (fontBitmapEntry == null) fontBitmapEntry = CreateFontBitmapEntry(gl, faceName, fontHeight); double width = gl.RenderContextProvider.Width; double height = gl.RenderContextProvider.Height; double aspect_ratio = width / height; // Create the appropriate projection matrix. gl.MatrixMode(OpenGL.GL_PROJECTION); gl.PushMatrix(); gl.LoadIdentity(); int[] viewport = new int[4]; gl.GetInteger(OpenGL.GL_VIEWPORT, viewport); //gl.Ortho2D(viewport[0], viewport[2], viewport[1], viewport[3]); gl.Ortho(0, width, 0, height, -1, 1); // Create the appropriate modelview matrix. gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.PushMatrix(); gl.LoadIdentity(); //gl.Translate(0, 0, -5); //gl.RasterPos(x, y); gl.Color(r, g, b); gl.RasterPos(x, y); gl.PushAttrib(OpenGL.GL_LIST_BIT | OpenGL.GL_CURRENT_BIT | OpenGL.GL_ENABLE_BIT | OpenGL.GL_TRANSFORM_BIT); gl.Color(r, g, b); gl.Disable(OpenGL.GL_LIGHTING); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.Disable(OpenGL.GL_DEPTH_TEST); gl.RasterPos(x, y); /** gl.Enable(OpenGL.GL_BLEND); gl.BlendFunc(OpenGL.GL_SRC_ALPHA, OpenGL.GL_ONE_MINUS_SRC_ALPHA); */ // Set the list base. gl.ListBase(fontBitmapEntry.ListBase); // Create an array of lists for the glyphs. List<byte> lists = new List<byte>(); foreach(char c in text) lists.Add((byte)c); // Call the lists for the string. gl.CallLists(lists.Count, lists.ToArray()); gl.Flush(); // Reset the list bit. gl.PopAttrib(); // Pop the modelview. gl.PopMatrix(); // back to the projection and pop it, then back to the model view. gl.MatrixMode(OpenGL.GL_PROJECTION); gl.PopMatrix(); gl.MatrixMode(OpenGL.GL_MODELVIEW); }