|
package main |
|
|
|
import ( |
|
"runtime" |
|
"time" |
|
|
|
"github.com/go-gl/gl/v3.2-core/gl" |
|
"github.com/go-gl/glfw/v3.2/glfw" |
|
"github.com/golang-ui/nuklear/nk" |
|
) |
|
|
|
const ( |
|
winWidth = 400 |
|
winHeight = 500 |
|
|
|
maxVertexBuffer = 512 * 1024 |
|
maxElementBuffer = 128 * 1024 |
|
) |
|
|
|
func init() { |
|
runtime.LockOSThread() |
|
} |
|
|
|
var ibuf = []byte{0} |
|
var shouldFocus = true |
|
|
|
func main() { |
|
if err := glfw.Init(); err != nil { |
|
panic(err) |
|
} |
|
glfw.WindowHint(glfw.ContextVersionMajor, 3) |
|
glfw.WindowHint(glfw.ContextVersionMinor, 2) |
|
glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile) |
|
glfw.WindowHint(glfw.OpenGLForwardCompatible, glfw.True) |
|
win, err := glfw.CreateWindow(winWidth, winHeight, "Nuklear Demo", nil, nil) |
|
if err != nil {panic(err)} |
|
win.MakeContextCurrent() |
|
|
|
if err := gl.Init(); err != nil { |
|
panic("opengl: init failed") |
|
} |
|
|
|
ctx := nk.NkPlatformInit(win, nk.PlatformInstallCallbacks) |
|
|
|
atlas := nk.NewFontAtlas() |
|
nk.NkFontStashBegin(&atlas) |
|
sansFont := nk.NkFontAtlasAddDefault(atlas, 16, nil) |
|
nk.NkFontStashEnd() |
|
nk.NkStyleSetFont(ctx, sansFont.Handle()) |
|
|
|
fpsTicker := time.NewTicker(time.Second / 30) |
|
for { |
|
<-fpsTicker.C |
|
glfw.PollEvents() |
|
gfxMain(win, ctx) |
|
} |
|
} |
|
|
|
func gfxMain(win *glfw.Window, ctx *nk.Context) { |
|
nk.NkPlatformNewFrame() |
|
|
|
// Layout |
|
width, height := win.GetSize() |
|
bounds := nk.NkRect(0, 0, 400, 500) |
|
update := nk.NkBegin(ctx, "Demo", bounds, 0) |
|
|
|
if update > 0 { |
|
nk.NkLayoutRowDynamic(ctx, 36, 1) |
|
nk.NkEditStringZeroTerminated(ctx, nk.EditField, ibuf, 256, nil) |
|
} |
|
nk.NkEnd(ctx) |
|
|
|
// Render |
|
gl.Viewport(0, 0, int32(width), int32(height)) |
|
gl.Clear(gl.COLOR_BUFFER_BIT) |
|
nk.NkPlatformRender(nk.AntiAliasingOn, maxVertexBuffer, maxElementBuffer) |
|
win.SwapBuffers() |
|
} |