90 lines
2.3 KiB
Nim
90 lines
2.3 KiB
Nim
import os
|
|
import nanovg
|
|
import glfw, glew
|
|
import perf
|
|
import common
|
|
import icons
|
|
|
|
proc frameBufferSize*(window: ptr Window): tuple[w, h: int32] =
|
|
var fbWidth, fbHeight: cint
|
|
window.getFramebufferSize(fbWidth.addr, fbHeight.addr)
|
|
|
|
return (w: fbWidth, h: fbHeight)
|
|
|
|
proc size*(window: ptr Window): tuple[w, h: int32] =
|
|
var width, height: cint
|
|
window.getWindowSize(width.addr, height.addr)
|
|
|
|
return (w: width, h: height)
|
|
|
|
proc main =
|
|
let
|
|
fps = newGraph(RenderStyle.FPS, "Frame Time")
|
|
cpuGraph = newGraph(RenderStyle.MS, "CPU Time")
|
|
|
|
|
|
initHint(CONTEXT_VERSION_MAJOR, 3)
|
|
initHint(CONTEXT_VERSION_MINOR, 2)
|
|
when defined(macosx):
|
|
initHint(OPENGL_FORWARD_COMPAT, 1)
|
|
initHint(OPENGL_PROFILE, OPENGL_CORE_PROFILE)
|
|
|
|
discard glfw.init()
|
|
|
|
windowHint(CONTEXT_VERSION_MAJOR, 3)
|
|
windowHint(CONTEXT_VERSION_MINOR, 2)
|
|
when defined(macosx):
|
|
windowHint(OPENGL_FORWARD_COMPAT, 1)
|
|
windowHint(OPENGL_PROFILE, OPENGL_CORE_PROFILE)
|
|
|
|
var w = createWindow(800, 600, "Minimal Nim-GLFW Example", nil, nil)
|
|
w.makeContextCurrent()
|
|
swapInterval(0)
|
|
setTime(0)
|
|
|
|
discard glew.init()
|
|
let vg = nanovg.newContext()
|
|
vg.loadFont(currentSourceDir()/"resources/Roboto-Regular.ttf", "sans")
|
|
vg.loadFont(currentSourceDir()/"resources/Roboto-Bold.ttf", "sans-bold")
|
|
vg.loadFont(currentSourceDir()/"resources/fa.ttf", "fa")
|
|
var prevt = getTime()
|
|
|
|
while not w.windowShouldClose().bool:
|
|
let t = getTime()
|
|
let dt = t - prevt
|
|
prevt = t
|
|
|
|
let fbSize = w.frameBufferSize()
|
|
|
|
glViewPort(0, 0, fbSize.w, fbSize.h)
|
|
|
|
glCullFace(GL_BACK)
|
|
glFrontFace(GL_CCW)
|
|
glClearColor(0.3, 0.3, 0.32, 1.0)
|
|
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT)
|
|
|
|
vg.withFrame(w):
|
|
let x = vg.glyphPositions("Some仮名thing is up", 0, 0)
|
|
vg.drawWindow("Title", 50, 50, 300, 400)
|
|
vg.drawLabel("Hello!", 10, 10, 280, 20)
|
|
vg.drawButton(Icon.Trash, "Delete", 100, 200, 160, 28, rgba(128, 16, 8, 255))
|
|
vg.drawButton(Icon.Trash, "Deleter", 100, 250, 160, 28, rgba(12, 130, 80, 255))
|
|
vg.drawButton("Testing", 100, 300)
|
|
|
|
vg.render(fps, 5, 5)
|
|
vg.render(cpuGraph, 210, 5)
|
|
|
|
w.swapBuffers()
|
|
pollEvents()
|
|
|
|
let cpuTime = glfw.getTime() - t
|
|
|
|
fps.update(dt)
|
|
cpuGraph.update(cpuTime)
|
|
waitEvents()
|
|
|
|
w.destroyWindow()
|
|
vg.delete()
|
|
glfw.terminate()
|
|
|
|
main()
|