Skip to content

Commit

Permalink
Merge pull request #24 from Triadica/texture
Browse files Browse the repository at this point in the history
demo of binding for textures
  • Loading branch information
NoEgAm authored Apr 16, 2024
2 parents 6b98f27 + ebd7db8 commit 7ec8d02
Show file tree
Hide file tree
Showing 6 changed files with 1,069 additions and 9,490 deletions.
10,235 changes: 757 additions & 9,478 deletions calcit.cirru

Large diffs are not rendered by default.

118 changes: 112 additions & 6 deletions compact.cirru
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

{} (:package |lagopus)
:configs $ {} (:init-fn |lagopus.main/main!) (:reload-fn |lagopus.main/reload!) (:version |0.5.2)
:configs $ {} (:init-fn |lagopus.main/main!) (:reload-fn |lagopus.main/reload!) (:version |0.5.5)
:modules $ [] |memof/ |quaternion/
:entries $ {}
:files $ {}
Expand Down Expand Up @@ -120,6 +120,8 @@
collect-array! indices collect!
, *arr
&map:get options :get-params
js-array & $ either (&map:get options :textures) ([])
&map:get options :label
|object-writer $ %{} :CodeEntry (:doc |)
:code $ quote
defn object-writer (options)
Expand Down Expand Up @@ -221,6 +223,14 @@
on-drag
v3 (.-0 move) (.-1 move) (.-2 move)
, d!
|comp-flat-button $ %{} :CodeEntry (:doc |)
:code $ quote
defn comp-flat-button (props on-click)
compFlatButton
-> props
update :position $ fn (p) (.to-js p)
to-js-data
, on-click
|comp-slider $ %{} :CodeEntry (:doc |)
:code $ quote
defn comp-slider (props on-slide)
Expand All @@ -233,6 +243,7 @@
:code $ quote
ns lagopus.comp.button $ :require
"\"@triadica/lagopus" :refer $ compButton compSlider compDragPoint
"\"@triadica/lagopus/lib/comp/button.mjs" :refer $ compFlatButton
quaternion.vector :refer $ v3
quaternion.complex :refer $ complex
|lagopus.comp.container $ %{} :FileEntry
Expand Down Expand Up @@ -281,7 +292,7 @@
[] (:: :vertex p0 5 4) (:: :vertex p0 5 6) (:: :vertex p0 5 7)
|comp-container $ %{} :CodeEntry (:doc |)
:code $ quote
defn comp-container (store)
defn comp-container (store textures-dict)
let
cursor $ []
states $ :states store
Expand Down Expand Up @@ -313,6 +324,8 @@
:stitch $ comp-stitch-demo
:bubbles $ comp-bubbles-demo
:triangles $ comp-triangles-demo
:image $ comp-image-demo textures-dict
:kaleidoscope $ comp-kaleidoscope textures-dict
|comp-control-demo $ %{} :CodeEntry (:doc |)
:code $ quote
defn comp-control-demo (states)
Expand All @@ -330,6 +343,12 @@
:color $ [] 0.6 0.6 1.0 1.0
fn (move d!)
d! $ : :state cursor (assoc state :pos move)
comp-flat-button
{}
:position $ v3 100 20 0
:color $ [] 0.9 0.4 0.5 1
:size 40
fn (e d!) (js/console.log "\"CLICKED")
|comp-mountains $ %{} :CodeEntry (:doc |)
:code $ quote
defn comp-mountains () $ object
Expand Down Expand Up @@ -477,6 +496,20 @@
:size 20
fn (e d!)
d! $ : tab :triangles
comp-button
{}
:position $ v3 180 220 0
:color $ [] 0.9 0.2 0.99 1
:size 20
fn (e d!)
d! $ : tab :image
comp-button
{}
:position $ v3 220 220 0
:color $ [] 0.9 0.8 0.99 1
:size 20
fn (e d!)
d! $ : tab :kaleidoscope
|comp-triangles-demo $ %{} :CodeEntry (:doc |)
:code $ quote
defn comp-triangles-demo () $ let
Expand Down Expand Up @@ -512,7 +545,7 @@
lagopus.alias :refer $ group object
"\"../shaders/mountains.wgsl" :default mountains-wgsl
"\"../shaders/city.wgsl" :default city-wgsl
lagopus.comp.button :refer $ comp-button comp-slider comp-drag-point
lagopus.comp.button :refer $ comp-button comp-slider comp-drag-point comp-flat-button
lagopus.comp.curves :refer $ comp-curves comp-axis comp-polylines comp-polylines-marked break-mark
lagopus.comp.spots :refer $ comp-spots comp-bubbles
memof.once :refer $ memof1-call
Expand All @@ -523,6 +556,8 @@
lagopus.cursor :refer $ >>
lagopus.comp.stitch :refer $ comp-stitch
"\"@calcit/std" :refer $ rand-shift rand
lagopus.config :refer $ inline-shader
lagopus.comp.image :refer $ comp-image-demo comp-kaleidoscope
|lagopus.comp.cube $ %{} :FileEntry
:defs $ {}
|comp-cube $ %{} :CodeEntry (:doc |)
Expand Down Expand Up @@ -793,6 +828,60 @@
lagopus.alias :refer $ object group object-writer
quaternion.vector :refer $ &v+ v-cross v-scale v-dot &v- v3
lagopus.comp.stitch :refer $ comp-stitch
|lagopus.comp.image $ %{} :FileEntry
:defs $ {}
|comp-image-demo $ %{} :CodeEntry (:doc |)
:code $ quote
defn comp-image-demo (textures-dict)
object $ {} (:label :image) (:shader wgsl-image)
:topology $ do :line-strip :triangle-list
:attrs-list $ []
{} (:field :position) (:format "\"float32x3")
{} (:field :uv) (:format "\"float32x2")
:data $ []
[]
:: :vertex ([] 0 0 0) ([] 0 0)
:: :vertex ([] 100 0 0) ([] 1 0)
:: :vertex ([] 100 100 0) ([] 1 1)
[]
:: :vertex ([] 100 100 0) ([] 1 1)
:: :vertex ([] 0 100 0) ([] 0 1)
:: :vertex ([] 0 0 0) ([] 0 0)
:textures $ [] (get textures-dict :tiye)
|comp-kaleidoscope $ %{} :CodeEntry (:doc |)
:code $ quote
defn comp-kaleidoscope (textures-dict)
object $ {} (:label :image) (:shader wgsl-kaleidoscope)
:topology $ do :line-strip :triangle-list
:attrs-list $ []
{} (:field :position) (:format "\"float32x3")
{} (:field :uv) (:format "\"float32x2")
:data $ []
[]
:: :vertex ([] 0 0 0) ([] 0 0)
:: :vertex ([] 100 0 0) ([] 1 0)
:: :vertex ([] 100 100 0) ([] 1 1)
[]
:: :vertex ([] 100 100 0) ([] 1 1)
:: :vertex ([] 0 100 0) ([] 0 1)
:: :vertex ([] 0 0 0) ([] 0 0)
:textures $ [] (get textures-dict :tiye)
|wgsl-image $ %{} :CodeEntry (:doc |)
:code $ quote
def wgsl-image $ inline-shader "\"image"
|wgsl-kaleidoscope $ %{} :CodeEntry (:doc |)
:code $ quote
def wgsl-kaleidoscope $ inline-shader "\"kaleidoscope"
:ns $ %{} :CodeEntry (:doc |)
:code $ quote
ns lagopus.comp.image $ :require
lagopus.alias :refer $ group object
lagopus.comp.button :refer $ comp-button comp-slider comp-drag-point
memof.once :refer $ memof1-call
quaternion.vector :refer $ v+ v3
lagopus.cursor :refer $ >>
"\"@calcit/std" :refer $ rand-shift rand
lagopus.config :refer $ inline-shader
|lagopus.comp.plate $ %{} :FileEntry
:defs $ {}
|calc-ratio $ %{} :CodeEntry (:doc |)
Expand Down Expand Up @@ -1237,6 +1326,9 @@
:code $ quote (ns lagopus.cursor)
|lagopus.main $ %{} :FileEntry
:defs $ {}
|*global-textures $ %{} :CodeEntry (:doc "|track textures with a hashmap, this is global states passing to container")
:code $ quote
defatom *global-textures $ {}
|*store $ %{} :CodeEntry (:doc |)
:code $ quote
defatom *store $ {}
Expand All @@ -1256,14 +1348,28 @@
update-states store c s
(:tab t) (assoc store :tab t)
if (not= next-store store) (reset! *store next-store)
|load-images! $ %{} :CodeEntry (:doc |)
:code $ quote
defn load-images! (gpu-device *textures) (hint-fn async)
let
response $ js-await (js/fetch "\"https://cdn.tiye.me/logo/tiye.jpg")
bitmap $ js-await
js/createImageBitmap $ js-await (.!blob response)
texture $ createTextureFromSource gpu-device
js-object (:source bitmap)
:w $ .-width bitmap
:h $ .-height bitmap
swap! *textures assoc :tiye texture
|main! $ %{} :CodeEntry (:doc |)
:code $ quote
defn main! () (hint-fn async)
if
and bloom? $ not (.-any mobile-info)
enableBloom
if dev? $ load-console-formatter!
js-await $ initializeContext
let
context $ js-await (initializeContext)
js-await $ load-images! (.-device context) *global-textures
initializeCanvasTextures
reset-clear-color! $ either bg-color
{} (:r 0.18) (:g 0.2) (:b 0.36) (:a 1)
Expand All @@ -1289,13 +1395,13 @@
|render-app! $ %{} :CodeEntry (:doc |)
:code $ quote
defn render-app! () $ let
tree $ comp-container @*store
tree $ comp-container @*store @*global-textures
renderLagopusTree tree dispatch!
:ns $ %{} :CodeEntry (:doc |)
:code $ quote
ns lagopus.main $ :require
lagopus.comp.container :refer $ comp-container
"\"@triadica/lagopus" :refer $ setupMouseEvents onControlEvent paintLagopusTree renderLagopusTree initializeContext resetCanvasSize initializeCanvasTextures registerShaderResult enableBloom loadGamepadControl
"\"@triadica/lagopus" :refer $ setupMouseEvents onControlEvent paintLagopusTree renderLagopusTree initializeContext resetCanvasSize initializeCanvasTextures registerShaderResult enableBloom loadGamepadControl createTextureFromSource
"\"@triadica/touch-control" :refer $ renderControl startControlLoop
lagopus.config :refer $ dev? mobile-info bloom? bg-color remote-control?
lagopus.util :refer $ handle-compilation reset-clear-color!
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"version": "0.5.2",
"version": "0.5.5",
"dependencies": {
"@calcit/procs": "^0.8.50",
"@calcit/std": "^0.0.3",
"@triadica/lagopus": "0.0.20",
"@triadica/lagopus": "0.0.22",
"@triadica/touch-control": "^0.0.4-a1",
"ismobilejs": "^1.1.1"
},
Expand Down
31 changes: 31 additions & 0 deletions shaders/image.wgsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

#import lagopus::perspective

@group(1) @binding(0) var mySampler : sampler;
@group(1) @binding(1) var myTexture : texture_2d<f32>;

// main

struct VertexOut {
@builtin(position) position: vec4f,
@location(0) uv: vec2f,
};

@vertex
fn vertex_main(
@builtin(vertex_index) idx: u32, @location(0) position: vec4f,
@location(1) uv: vec2f
) -> VertexOut {
var output: VertexOut;
let p = transform_perspective(position.xyz).point_position;
let scale: f32 = 0.002;

output.position = vec4(p[0] * scale, p[1] * scale, p[2] * scale, 1.0);
output.uv = vec2f(uv.x, 1. - uv.y);
return output;
}

@fragment
fn fragment_main(vtx_out: VertexOut) -> @location(0) vec4f {
return textureSample(myTexture, mySampler, vtx_out.uv);
}
Loading

0 comments on commit 7ec8d02

Please sign in to comment.