func (s *Screen) Initialize(window *glfw.Window, shutdownGLFWOnDestruct bool) { s.window = window s.shutdownGLFWOnDestruct = shutdownGLFWOnDestruct s.w, s.h = window.GetSize() s.fbW, s.fbH = window.GetFramebufferSize() var err error s.context, err = nanovgo.NewContext(nanovgo.StencilStrokes | nanovgo.AntiAlias) if err != nil { panic(err) } s.visible = true //window.GetAttrib(glfw.Visible) s.theme = NewStandardTheme(s.context) s.mousePosX = 0 s.mousePosY = 0 s.mouseState = 0 s.modifiers = 0 s.dragActive = false s.lastInteraction = GetTime() nanoguiScreens[window] = s runtime.SetFinalizer(s, finalizeScreen) }
func main() { err := glfw.Init(gl.ContextWatcher) if err != nil { panic(err) } defer glfw.Terminate() glfw.WindowHint(glfw.StencilBits, 1) glfw.WindowHint(glfw.Samples, 4) window, err := glfw.CreateWindow(1000*0.6, 600*0.6, "NanoVGo", nil, nil) if err != nil { panic(err) } window.SetKeyCallback(key) window.MakeContextCurrent() ctx, err := nanovgo.NewContext(0) defer ctx.Delete() if err != nil { panic(err) } demoData := LoadDemo(ctx) glfw.SwapInterval(0) fps := perfgraph.NewPerfGraph("Frame Time", "sans") for !window.ShouldClose() { t, _ := fps.UpdateGraph() fbWidth, fbHeight := window.GetFramebufferSize() winWidth, winHeight := window.GetSize() mx, my := window.GetCursorPos() pixelRatio := float32(fbWidth) / float32(winWidth) gl.Viewport(0, 0, fbWidth, fbHeight) if premult { gl.ClearColor(0, 0, 0, 0) } else { gl.ClearColor(0.3, 0.3, 0.32, 1.0) } gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT) gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Enable(gl.CULL_FACE) gl.Disable(gl.DEPTH_TEST) ctx.BeginFrame(winWidth, winHeight, pixelRatio) demo.RenderDemo(ctx, float32(mx), float32(my), float32(winWidth), float32(winHeight), t, blowup, demoData) fps.RenderGraph(ctx, 5, 5) ctx.EndFrame() gl.Enable(gl.DEPTH_TEST) window.SwapBuffers() glfw.PollEvents() } demoData.FreeData(ctx) }