Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor renderer #52

Merged
merged 2 commits into from
Nov 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 3 additions & 8 deletions figuro/exec.nim
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ elif defined(blank):
import engine/blank
export blank
else:
import renderer/window
export window
import renderer/opengl
export opengl

import std/os
import std/sets
Expand Down Expand Up @@ -52,7 +52,7 @@ proc runRenderer(renderer: Renderer) =
while app.running:
wait(uiRenderEvent)
timeIt(renderAvgTime):
renderLoop(renderer, true)
renderer.render(true)

proc appTicker() {.thread.} =
while app.running:
Expand All @@ -69,11 +69,6 @@ proc runApplication(mainApp: MainCallback) {.thread.} =
mainApp()
app.frameCount.inc()

proc init*(renderer: Renderer) =
sendRoot = proc (nodes: sink RenderNodes) =
renderer.updated = true
renderer.nodes = nodes

proc run*(renderer: Renderer) =

sendRoot = proc (nodes: sink RenderNodes) =
Expand Down
99 changes: 13 additions & 86 deletions figuro/renderer/window.nim → figuro/renderer/opengl.nim
Original file line number Diff line number Diff line change
@@ -1,74 +1,27 @@
import std/[os, hashes, strformat, strutils, tables, times]
import std/[options, unicode, hashes, strformat, strutils, tables, times]
import std/terminal

import pkg/pixie
import pkg/windy

import ../shared
import ../inputs
import opengl/[base, context, render]
import opengl/commons

type
Renderer* = ref object
window: Window
nodes*: RenderNodes
updated*: bool

const
openglMajor {.intdefine.} = 3
openglMinor {.intdefine.} = 3

static:
## compile check to ensure windy buttons don't change on us
for i in 0..windy.Button.high().int:
assert $Button(i) == $UiButton(i)

proc toUi(wbtn: windy.ButtonView): UiButtonView =
when defined(nimscript):
for b in set[Button](wbtn):
result.incl UiButton(b.int)
else:
copyMem(addr result, unsafeAddr wbtn, sizeof(ButtonView))

proc renderLoop(window: Window,
nodes: var RenderNodes,
updated: bool,
poll = true) =
if window.closeRequested:
app.running = false
return

timeIt(eventPolling):
if poll:
windy.pollEvents()

# if app.requestedFrame <= 0 or app.minimized:
# return
# else:
# app.requestedFrame.dec

# echo "renderLoop: ", app.requestedFrame
import ./opengl/utils
import ./opengl/window
import ./opengl/renderer

preInput()
if updated:
renderAndSwap(window, nodes, updated)
postInput()
export Renderer, render

var lastMouse = Mouse()

proc renderLoop*(renderer: Renderer, poll = true) =
let update = renderer.updated
renderer.updated = false
renderLoop(renderer.window, renderer.nodes, update)

proc copyInputs(window: Window): AppInputs =
result = AppInputs(mouse: lastMouse)
result.buttonRelease = toUi window.buttonReleased()
result.buttonPress = toUi window.buttonPressed()
result.buttonDown = toUi window.buttonDown()
result.buttonToggle = toUi window.buttonToggle()

proc configureEvents(renderer: Renderer) =
proc configureWindowEvents(renderer: Renderer) =

uxInputList = newChan[AppInputs](40)

Expand All @@ -78,7 +31,7 @@ proc configureEvents(renderer: Renderer) =

window.onResize = proc () =
updateWindowSize(window)
renderLoop(window, renderer.nodes, true, poll = false)
renderer.render(updated = true, poll = false)
var uxInput = window.copyInputs()
uxInput.windowSize = some app.windowSize
discard uxInputList.trySend(uxInput)
Expand All @@ -104,11 +57,6 @@ proc configureEvents(renderer: Renderer) =
var uxInput = AppInputs(mouse: lastMouse)
uxInput.mouse.consumed = false
uxInput.mouse.wheelDelta = window.scrollDelta().descaled()
# when defined(debugEvents):
# stdout.styledWriteLine({styleDim},
# fgWhite, "scroll ", {styleBright},
# fgGreen, $uxInput.mouse.wheelDelta.repr,
# )
discard uxInputList.trySend(uxInput)

window.onButtonPress = proc (button: windy.Button) =
Expand Down Expand Up @@ -148,41 +96,20 @@ proc configureEvents(renderer: Renderer) =
{styleDim}, fgGreen, $rune)
discard uxInputList.trySend(uxInput)

# window.onImeChange = proc () =
# var uxInput = window.copyInputs()
# # uxInput.keyboard.ime = window.imeCompositionString()
# echo "ime: ", window.imeCompositionString()

# internal.getWindowTitle = proc (): string =
# window.title
# internal.setWindowTitle = proc (title: string) =
# if window != nil:
# window.title = title

app.running = true

proc setupRenderer*(
pixelate: bool,
forcePixelScale: float32,
atlasSize: int = 1024
): Renderer =
let window = newWindow("", ivec2(1280, 800))
window.startOpenGL(openglVersion)

let openglVersion = (openglMajor, openglMinor)
app.pixelScale = forcePixelScale

let renderer =
Renderer(window: newWindow("", ivec2(1280, 800)))

renderer.window.startOpenGL(openglVersion)
renderer.configureEvents()

ctx = newContext(atlasSize = atlasSize,
pixelate = pixelate,
pixelScale = app.pixelScale)
let renderer = newRenderer(window, pixelate, forcePixelScale, atlasSize)
renderer.configureWindowEvents()
app.requestedFrame.inc

useDepthBuffer(false)

return renderer


172 changes: 0 additions & 172 deletions figuro/renderer/opengl/base.nim

This file was deleted.

Loading