protected virtual void Create() { ImGuiIO io = ImGui.GetIO(); // Build texture atlas ImFontTextureData texData = io.FontAtlas.GetTexDataAsAlpha8(); int lastTexture; GL.GetIntegerv(GL.Enum.GL_TEXTURE_BINDING_2D, out lastTexture); // Create OpenGL texture GL.GenTextures(1, out g_FontTexture); GL.BindTexture(GL.Enum.GL_TEXTURE_2D, g_FontTexture); GL.TexParameteri(GL.Enum.GL_TEXTURE_2D, GL.Enum.GL_TEXTURE_MIN_FILTER, (int)GL.Enum.GL_LINEAR); GL.TexParameteri(GL.Enum.GL_TEXTURE_2D, GL.Enum.GL_TEXTURE_MAG_FILTER, (int)GL.Enum.GL_LINEAR); GL.PixelStorei(GL.Enum.GL_UNPACK_ROW_LENGTH, 0); GL.TexImage2D( GL.Enum.GL_TEXTURE_2D, 0, (int)GL.Enum.GL_ALPHA, texData.Width, texData.Height, 0, GL.Enum.GL_ALPHA, GL.Enum.GL_UNSIGNED_BYTE, texData.Pixels ); // Store the texture identifier in the ImFontAtlas substructure. io.FontAtlas.SetTexID(g_FontTexture); io.FontAtlas.ClearTexData(); // Clears CPU side texture data. GL.BindTexture(GL.Enum.GL_TEXTURE_2D, lastTexture); }
public void BuildTextureAtlas() { ImGuiIO io = ImGui.IO; // ImFontTextureData texData = io.FontAtlas.GetTexDataAsAlpha8(); // Alpha8 has got some blending issues. ImFontTextureData texData = io.FontAtlas.GetTexDataAsRGBA32(); Texture2D tex = new Texture2D(Game.GraphicsDevice, texData.Width, texData.Height, false, SurfaceFormat.Color); int[] data = new int[texData.Width * texData.Height]; Marshal.Copy(texData.Pixels, data, 0, data.Length); tex.SetData(data); FontTexture = Register(tex); io.FontAtlas.SetTexID(FontTexture); io.FontAtlas.ClearTexData(); // Clears CPU side texture data. }