glfont
1.0.0
Name : glfont Library
Author : Noah Shibley, http://socialhardware.net
Date : June 16th 2016
Notes : A modern opengl text rendering library for golang
Dependencies: freetype, go-gl, glfw
func LoadFont ( file string , scale int32 , windowWidth int , windowHeight int ) ( * Font , error )LoadFont以給定的比例加載指定的字體。默認字符集為ASCII(編碼點32至127)。
func LoadTrueTypeFont ( program uint32 , r io. Reader , scale int32 , low , high rune , dir Direction ) ( * Font , error )LOADTRUETYPEFONT基於TTF文件Gylphs構建緩衝區和紋理。
func LoadFontBytes ( buf [] byte , scale int32 , windowWidth int , windowHeight int ) ( * Font , error ) { LoadFontBytes直接從字節(例如goregulat.TTF ,https://pkg.go.dev/golang.org.org/image/image/font/gofont/goregular/goregular)加載字體。默認字符集為ASCII(編碼點32至127)。
func ( f * Font ) GenerateGlyphs ( low , high rune ) errorGenerateGlyphs為非ASCII Unicode Codepoint構建了其他字形。
func ( f * Font ) Printf ( x , y float32 , scale float32 , fs string , argv ... interface {}) errorprintf在屏幕上繪製字符串,獲取諸如printf之類的參數列表
func ( f * Font ) SetColor ( red float32 , green float32 , blue float32 , alpha float32 )SetColor允許您在繪製文本時設置文本顏色
func ( f * Font ) UpdateResolution ( windowWidth int , windowHeight int )調整視口大大時需要更新
func ( f * Font ) Width ( scale float32 , fs string , argv ... interface {}) float32寬度返回像素中的文本的寬度
package main
import (
"fmt"
"log"
"runtime"
"github.com/go-gl/gl/all-core/gl"
"github.com/go-gl/glfw/v3.1/glfw"
"github.com/nullboundary/glfont"
)
const windowWidth = 1920
const windowHeight = 1080
func init () {
runtime . LockOSThread ()
}
func main () {
if err := glfw . Init (); err != nil {
log . Fatalln ( "failed to initialize glfw:" , err )
}
defer glfw . Terminate ()
glfw . WindowHint ( glfw . Resizable , glfw . True )
glfw . WindowHint ( glfw . ContextVersionMajor , 3 )
glfw . WindowHint ( glfw . ContextVersionMinor , 2 )
glfw . WindowHint ( glfw . OpenGLProfile , glfw . OpenGLCoreProfile )
glfw . WindowHint ( glfw . OpenGLForwardCompatible , glfw . True )
window , _ := glfw . CreateWindow ( int ( windowWidth ), int ( windowHeight ), "glfontExample" , glfw . GetPrimaryMonitor (), nil )
window . MakeContextCurrent ()
glfw . SwapInterval ( 1 )
if err := gl . Init (); err != nil {
panic ( err )
}
//load font (fontfile, font scale, window width, window height
font , err := glfont . LoadFont ( "Roboto-Light.ttf" , int32 ( 52 ), windowWidth , windowHeight )
if err != nil {
log . Panicf ( "LoadFont: %v" , err )
}
gl . Enable ( gl . DEPTH_TEST )
gl . DepthFunc ( gl . LESS )
gl . ClearColor ( 0.0 , 0.0 , 0.0 , 0.0 )
for ! window . ShouldClose () {
gl . Clear ( gl . COLOR_BUFFER_BIT | gl . DEPTH_BUFFER_BIT )
//set color and draw text
font . SetColor ( 1.0 , 1.0 , 1.0 , 1.0 ) //r,g,b,a font color
font . Printf ( 100 , 100 , 1.0 , "Lorem ipsum dolor sit amet, consectetur adipiscing elit." ) //x,y,scale,string,printf args
window . SwapBuffers ()
glfw . PollEvents ()
}
}