CabinGame/Luxe/outline/renderer.wren

108 lines
2.8 KiB
Text
Raw Normal View History

2020-08-16 13:59:43 +00:00
import "luxe: render" for Render, RenderLayerDesc, PassLayerDesc, LoadAction
import "luxe: render" for SortType, ImageDesc, ImageType, PixelFormat, Image
import "luxe: math" for Math
import "luxe: io" for IO
import "globals" for ActiveRenderer
import "math/vector" for Vector
import "math/rect" for AABB
import "blocks/debug" for Holder
import "math/math" for M
class Renderer {
target{ "scene" }
static pixel_width{128}
pixel_width{Renderer.pixel_width}
pixelSize{_pixelSize}
construct new() {
ActiveRenderer.x = this
System.print("game / render / init / ok")
} //new
update_targets(){
_pixelSize = (Render.window_w() / pixel_width).floor
var x_offset = ((Render.window_w() - pixel_width * _pixelSize) / 2).round
var y_offset = Render.window_h() - pixel_width * _pixelSize
_gameRect = AABB.new(x_offset, y_offset, pixel_width * _pixelSize, pixel_width * _pixelSize)
}
game_mouse(mouse_pos){
var window = AABB.new(0, 0, Render.window_w(), Render.window_h())
var screen = AABB.new(_gameRect.min_x, Render.window_h() - _gameRect.max_y, _gameRect.width, _gameRect.height) //Y- mouse positions are the bane of my existance
return M.remap(screen.min, screen.max, window.min, window.max, mouse_pos)
}
ready() {
_desc = ImageDesc.new()
_desc.type = ImageType.image2D
_desc.pixel_format = PixelFormat.rgba8Unorm
_desc.width = pixel_width
_desc.height = pixel_width
Render.define_resource(target, Image.create(_desc))
update_targets()
IO.on("engine.runtime.window.size_changed") {|type, data|
update_targets()
}
}
tick(delta) {
}
render_path(ctx) {
if(ctx.path == "game") {
game_render_path(ctx)
} else if(ctx.path == "ui") {
ui_render_path(ctx)
}
} //render_path
game_render_path(ctx) {
var layer = RenderLayerDesc.new()
layer.dest.color[0].render_target = target
layer.dest.color[0].clear_color = ctx.get("clear_color", [1,1,1,1])
layer.dest.color[0].load_action = LoadAction.clear
layer.dest.depth.load_action = LoadAction.clear
ctx.layer_render("default", layer)
var out_pass = PassLayerDesc.new()
out_pass.library = "shaders/upscale"
out_pass.function = "upscale_top_center"
out_pass.targets = ["screen"]
out_pass.inputs = {
"pass.flipy" : true,
"pass.rect" : _gameRect.pos_size_list,
"pass.image" : {
"image": target, //image resource name
"sampler": "nearest_clamp" //sampler state
},
}
ctx.layer_pass(out_pass)
} //game_render_path
ui_render_path(ctx) {
var layer = RenderLayerDesc.new()
layer.dest.color[0].load_action = LoadAction.dont_care
layer.dest.depth.load_action = LoadAction.clear
ctx.layer_render("default", layer)
} //ui_render_path
} //Renderer