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