Fable.jl icon indicating copy to clipboard operation
Fable.jl copied to clipboard

Rework of Fable

Open leios opened this issue 5 months ago • 0 comments

This is a complete overhaul of Fable to allow users to write their own kernels:

using KernelAbstractions
using Images
include("from_scratch.jl")

function output_and_scale(pix, cam, pt, clr, x_scale; y_scale = 3)
    pt_2 = FablePoint(pt.x*x_scale, pt.y*y_scale)

    simple_output(pix, cam, pt_2, clr)
end

@kernel function generate_square(pix, cam, g)
    A = FablePoint(-0.5, 0.5)
    B = FablePoint(0.5, 0.5)
    C = FablePoint(0.5, -0.5)
    D = FablePoint(-0.5, -0.5)

    pt = FablePoint(0.0,0.0)
    clr = RGBA{Float32}(0,0,0,1)
    square_clr = RGBA{Float32}(1,0,1,1)
    square(pix, cam, 100, pt, clr, 
           A, square_clr, B, square_clr, C, square_clr, D, square_clr, g, 2; y_s
cale = 0.5)
           #pix, cam, pt, clr)
end

function main(;ArrayType = Array)
    width = 1920
    height = 1080
    pixels = ArrayType(zeros(RGBA{Float32},height, width))

    world_size_x = 4;
    ppu = width / world_size_x;
    world_size_y = height/ppu;

    world_size = FablePoint(world_size_x, world_size_y)
    world_position = FablePoint(-world_size.x * 0.5, -world_size.y*0.5)

    cam = FableSimpleCamera(ppu, world_size, world_position)

    backend = get_backend(pixels)
    kernel! = generate_square(backend, 256)
    kernel!(pixels, cam, output_and_scale; ndrange = width*height)
    return pixels
    save("check.png", Array(pixels))
end

Things still to do:

  • [ ] update docs
  • [ ] redo all examples
  • [ ] tests
  • [ ] allow for colors to also be functions for generators
  • [ ] Generally make generators nicer (more kwargs, less args)

leios avatar Jul 29 '25 22:07 leios