107 lines
2.8 KiB
Text
107 lines
2.8 KiB
Text
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
|