~/bend-docscommunity

render.bend checks

raw source on the hub · import 0xc517d5d3635f5bc3ec47170caccaebf0/render.bend as Render

1 import
import Base

Types

type Cam source · line 8 · raw

Data

type Ray source · line 11 · raw

Data

Definitions

def Render.cam_from source · line 15 · raw

@px:F32 -> @py:F32 -> @pz:F32 -> @yaw:F32 -> @pitch:F32 -> @fov:F32 -> Cam

Camera constructor helper.

def Render.nonzero_go source · line 19 · raw

@x:F32 -> @z:Bool -> F32

Division guard: replace 0.0 with a small epsilon (keeps math total).

def Render.nonzero source · line 26 · raw

@+x:F32 -> F32

def Render.chan source · line 30 · raw

@c:U32 -> @k:Nat -> U32

Extract byte k (0n=B, 8n=G, 16n=R) from a packed 0xRRGGBB color.

def Render.pack source · line 34 · raw

@r:U32 -> @g:U32 -> @b:U32 -> U32

Pack R/G/B bytes into 0xRRGGBB.

def Render.mix_chan source · line 40 · raw

@a:U32 -> @b:U32 -> @t:F32 -> U32

Lerp one channel a -> b by t (t in 0..1).

def Render.mix_rgb source · line 46 · raw

@+c0:U32 -> @+c1:U32 -> @+t:F32 -> U32

Lerp packed colors c0 -> c1 by t.

def Render.shade_chan source · line 52 · raw

@c:U32 -> @k:Nat -> @b:F32 -> U32

Scale one channel by brightness b.

def Render.shade source · line 56 · raw

@+c:U32 -> @steps:U32 -> U32

Distance fog: brightness 1.0 -> 0.2 over ~64 steps, applied per channel.

def Render.sky source · line 64 · raw

@dx:F32 -> @dy:F32 -> @dz:F32 -> @time:F32 -> U32

Sky gradient: day (horizon 0x87CEEB -> zenith 0x3B7DDD) lerped to night 0x0B1026 by a daylight factor from time (day cycle 0..1).

def Render.pixel_ray source · line 75 · raw

@cam:Cam -> @u:F32 -> @v:F32 -> @w:U32 -> @h:U32 -> Ray

Primary ray through pixel (u, v) of a w-by-h frame. NDC = (u/w*2-1)*aspect etc., pinhole with tan(fov/2), then yaw (Y) and pitch (X) rotation, normalized. All divisions epsilon-guarded.

def Render.is_cross source · line 115 · raw

@+x:U32 -> @+y:U32 -> @+w:U32 -> @+h:U32 -> Bool

Crosshair test: within 2px of frame center.

def Render.face_br05 source · line 174 · raw

@n:Nat -> F32

---- Additive pure helpers (appended; old defs untouched) ----

def Render.face_br04 source · line 181 · raw

@n:Nat -> F32

def Render.face_br03 source · line 188 · raw

@n:Nat -> F32

def Render.face_br02 source · line 195 · raw

@n:Nat -> F32

def Render.face_br01 source · line 202 · raw

@n:Nat -> F32

def Render.face_br00 source · line 209 · raw

@n:Nat -> F32

def Render.face_br source · line 216 · raw

@face:U32 -> F32

def Render.face_shade source · line 219 · raw

@+color:U32 -> @face:U32 -> U32

def Render.sun_dir source · line 225 · raw

@time:F32 -> Pair(F32, Pair(F32, F32))

def Render.sun_hit source · line 231 · raw

@dx:F32 -> @dy:F32 -> @dz:F32 -> @sx:F32 -> @sy:F32 -> @sz:F32 -> Bool

def Render.sun_pick source · line 239 · raw

@hit:Bool -> @sky:U32 -> U32

def Render.sun_finish source · line 246 · raw

@sy:F32 -> @sz:F32 -> @sx:F32 -> @+dx:F32 -> @+dy:F32 -> @+dz:F32 -> @time:F32 -> U32

def Render.sun_mid source · line 251 · raw

@inner:Pair(F32, F32) -> @sx:F32 -> @+dx:F32 -> @+dy:F32 -> @+dz:F32 -> @time:F32 -> U32

def Render.sun_split source · line 255 · raw

@sun:Pair(F32, Pair(F32, F32)) -> @+dx:F32 -> @+dy:F32 -> @+dz:F32 -> @+time:F32 -> U32

def Render.sun_color source · line 259 · raw

@+dx:F32 -> @+dy:F32 -> @+dz:F32 -> @+time:F32 -> U32

def Render.cloud_pick source · line 262 · raw

@hit:Bool -> Bool

def Render.cloud_hit source · line 269 · raw

@x:F32 -> @z:F32 -> @time:F32 -> Bool

def Render.water_tint source · line 277 · raw

@+color:U32 -> U32

def Render.mix_hurt source · line 283 · raw

@hit:Bool -> @+color:U32 -> U32

def Render.hurt_flash source · line 290 · raw

@+color:U32 -> @ticks:U32 -> U32

def Render.vig_pick source · line 293 · raw

@edge:Bool -> @+color:U32 -> U32

def Render.vignette source · line 303 · raw

@+x:U32 -> @+y:U32 -> @+w:U32 -> @+h:U32 -> @+color:U32 -> U32

def Render.particle04 source · line 317 · raw

@n:Nat -> U32

def Render.particle03 source · line 324 · raw

@n:Nat -> U32

def Render.particle02 source · line 331 · raw

@n:Nat -> U32

def Render.particle01 source · line 338 · raw

@n:Nat -> U32

def Render.particle00 source · line 345 · raw

@n:Nat -> U32

def Render.particle source · line 352 · raw

@+kind:U32 -> @+life:U32 -> U32

def Render.shade_face source · line 362 · raw

@color:U32 -> @steps:U32 -> @face:U32 -> U32

Templates

template Render.march source · line 126 · raw

@-get:(@_:U32 -> @_:U32 -> @_:U32 -> U32) -> @-color_of:(@_:U32 -> U32) -> @fuel:Nat -> @bid:U32 -> @empty:Bool -> @px:F32 -> @py:F32 -> @pz:F32 -> @+dx:F32 -> @+dy:F32 -> @+dz:F32 -> @+steps:U32 -> @+time:F32 -> U32

Fixed-step raymarcher (0.25 voxels/step). fuel bounds the steps, so it is termination-safe. Hit => fog-shaded palette color, miss => sky. NOTE: ~get must answer 0 for out-of-bounds coords (including the huge U32 values that negative F32 positions convert to).

template Render.trace source · line 142 · raw

@-get:(@_:U32 -> @_:U32 -> @_:U32 -> U32) -> @-color_of:(@_:U32 -> U32) -> @fuel:Nat -> @ox:F32 -> @oy:F32 -> @oz:F32 -> @dx:F32 -> @dy:F32 -> @dz:F32 -> @time:F32 -> U32

Entry point game.bend calls: march a ray, return final U32 color.

template Render.pixel_go source · line 146 · raw

@-get:(@_:U32 -> @_:U32 -> @_:U32 -> U32) -> @-color_of:(@_:U32 -> U32) -> @r:Ray -> @+x:U32 -> @+y:U32 -> @+w:U32 -> @+h:U32 -> @+time:F32 -> U32

One framebuffer pixel: ray + trace + white crosshair dot.

template Render.pixel source · line 152 · raw

@-get:(@_:U32 -> @_:U32 -> @_:U32 -> U32) -> @-color_of:(@_:U32 -> U32) -> @cam:Cam -> @+x:U32 -> @+y:U32 -> @+w:U32 -> @+h:U32 -> @+time:F32 -> U32

template Render.build source · line 157 · raw

@-get:(@_:U32 -> @_:U32 -> @_:U32 -> U32) -> @-color_of:(@_:U32 -> U32) -> @+size:Nat -> @+cam:Cam -> @+x0:U32 -> @+y0:U32 -> @+w:U32 -> @+h:U32 -> @+time:F32 -> Image

Quadtree tile builder: size is depth (0n => one Pix). The 4 quadrants are built with parallel lets; size shrinks first, so it terminates.

template Render.frame source · line 170 · raw

@-get:(@_:U32 -> @_:U32 -> @_:U32 -> U32) -> @-color_of:(@_:U32 -> U32) -> @cam:Cam -> @time:F32 -> Image

Full 256x256 frame (depth 8).