aboutsummaryrefslogtreecommitdiffstats
path: root/alv-lib
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2025-09-03 21:32:10 +0000
committers-ol <s+removethis@s-ol.nu>2025-09-14 15:39:20 +0000
commit76fcdb02fc595d4381e4f1d13f816c1fbee235e1 (patch)
treefd12e68968f351056b6966b308135df61b8ee5d8 /alv-lib
parentrefactor Tag/Registry, reuse deleted tags (diff)
downloadalive-76fcdb02fc595d4381e4f1d13f816c1fbee235e1.tar.gz
alive-76fcdb02fc595d4381e4f1d13f816c1fbee235e1.zip
lib/glsl-view: use tag for texture, uniform names
Diffstat (limited to 'alv-lib')
-rw-r--r--alv-lib/glsl-view.moon49
1 files changed, 27 insertions, 22 deletions
diff --git a/alv-lib/glsl-view.moon b/alv-lib/glsl-view.moon
index 74c53a2..d3c8e75 100644
--- a/alv-lib/glsl-view.moon
+++ b/alv-lib/glsl-view.moon
@@ -57,10 +57,9 @@ video_source = Constant.meta
meta:
name: 'video'
summary: "load a video texture source."
- examples: { '(video-source [socket] name type filename [format] [args])' }
+ examples: { '(video-source [socket] type filename [format] [args])' }
description: "Creates a texture source from a video or image file.
-- `name` is a unique name for this texture source.
- `type` can be one of:
- `2D`: `sampler2D` (loads first frame only)
- `3D` or `2D_ARRAY`: `sampler3D`/`sampler2DArray` (loads whole video)
@@ -70,29 +69,28 @@ video_source = Constant.meta
- `args` is a struct of optional arguments for the ffmpeg/avformat input format."
value: class extends Op
- pattern = -sig['osc/out'] + const.str + const.str + const.str + -const.str + -const!
+ pattern = -sig['osc/out'] + const.str + const.str + -const.str + -const!
setup: (inputs, scope) =>
- { socket, name, type, filename, format, args } = pattern\match inputs
+ { socket, type, filename, format, args } = pattern\match inputs
@prefix = COPILOT.active_module.file\match'(.*/)[^/]*$'
super
socket: Input.hot socket or scope\get '*oscout*'
- name: Input.cold name
type: Input.cold type
filename: Input.cold filename
format: format and Input.cold format
args: args and Input.cold args
samplertype = assert GLSL_SAMPLER_TYPES[@inputs.type!]
- @setup_out '=', Uniform, type: samplertype, val: @inputs.name!
+ @setup_out '=', Uniform, type: samplertype, val: "alv-#{@tag}"
tick: =>
- { :socket, :name, :type, :filename, :format, :args } = @unwrap_all!
+ { :socket, :type, :filename, :format, :args } = @unwrap_all!
with @inputs.socket!
filename = tryprefix @prefix, filename
- msg = Message.new{ address: "/source/#{name}/video", types: "ss", "TEXTURE_#{type}", filename }
+ msg = Message.new{ address: "/source/alv-#{@tag}/video", types: "ss", "TEXTURE_#{type}", filename }
msg\add 's', format if format
add_item msg, @inputs.args\type!, args if args
\send Message.pack msg.content
@@ -106,10 +104,9 @@ stream_source = Constant.meta
meta:
name: 'stream'
summary: "load a stream texture source."
- examples: { '(stream-source [socket] name type uri [format] [args])' }
+ examples: { '(stream-source [socket] type uri [format] [args])' }
description: "Creates a realtime stream from a capture source.
-- `name` is a unique name for this texture source.
- `type` must be `2D`.
- `uri` is the ffmpeg URI to load. If it starts with `./` it will be resolved relative to the current alv module.
- `format` optionally specifies the ffmpeg/avformat input format to use.
@@ -119,29 +116,28 @@ stream_source = Constant.meta
(stream-source 'testpt' '2D' 'testsrc=size=1280x720:rate=30' 'lavfi')"
value: class extends Op
- pattern = -sig['osc/out'] + const.str + const.str + const.str + -const.str + -const!
+ pattern = -sig['osc/out'] + const.str + const.str + -const.str + -const!
setup: (inputs, scope) =>
- { socket, name, type, filename, format, args } = pattern\match inputs
+ { socket, type, filename, format, args } = pattern\match inputs
@prefix = COPILOT.active_module.file\match'(.*/)[^/]*$'
super
socket: Input.hot socket or scope\get '*oscout*'
- name: Input.cold name
type: Input.cold type
filename: Input.cold filename
format: format and Input.cold format
args: args and Input.cold args
samplertype = assert GLSL_SAMPLER_TYPES[@inputs.type!]
- @setup_out '=', Uniform, type: samplertype, val: @inputs.name!
+ @setup_out '=', Uniform, type: samplertype, val: "alv-#{@tag}"
tick: =>
{ :socket, :name, :type, :filename, :format, :args } = @unwrap_all!
with @inputs.socket!
filename = tryprefix @prefix, filename
- msg = Message.new{ address: "/source/#{name}/stream", types: "ss", "TEXTURE_#{type}", filename }
+ msg = Message.new{ address: "/source/alv-#{@tag}/stream", types: "ss", "TEXTURE_#{type}", filename }
msg\add 's', format if format
add_item msg, @inputs.args\type!, args if args
\send Message.pack msg.content
@@ -153,7 +149,7 @@ tsv_source = Constant.meta
examples: { '(tsv-source [socket] name [type])' }
description: "Creates a texture source from a texture-share-vk texture.
-- `name` is a unique name for this texture source.
+- `name` is the tsv name of this texture source.
- `type` defaults to `2D`."
value: class extends Op
@@ -167,13 +163,13 @@ tsv_source = Constant.meta
type: Input.hot type or Constant.str "2D"
samplertype = assert GLSL_SAMPLER_TYPES[@inputs.type!]
- @setup_out '=', Uniform, type: samplertype, val: @inputs.name!
+ @setup_out '=', Uniform, type: samplertype, val: "alv-#{@tag}"
tick: =>
{ :socket, :name, :type } = @unwrap_all!
with @inputs.socket!
- \send Message.pack { address: "/source/#{name}/tsv", types: "ss", "TEXTURE_#{type}", name }
+ \send Message.pack { address: "/source/alv-#{@tag}/tsv", types: "ss", "TEXTURE_#{type}", name }
freeze = Constant.meta
meta:
@@ -239,7 +235,7 @@ shader_ = Constant.meta
value: class extends PureOp
pattern: const! + sig!^0
- name: (i) => "alv_u_#{i}"
+ name: (i) => "alv_u#{(tostring @tag)\gsub '%.', '_'}_#{i}"
type: (args) =>
uniforms = {}
@@ -247,9 +243,14 @@ shader_ = Constant.meta
type = val\type!
if type == T.str
continue
- elseif type.__class == Struct
- assert (type\get 'type') == T.str, "struct substituton needs type key"
- type = assert (type\get 'val'), "struct substituton needs val key"
+ else if type.__class == Struct and type.types['shader']
+ for name, typ in pairs type.types['uniforms'].types
+ uniforms[name] = typ
+ continue
+ else
+ if type.__class == Struct
+ assert type.types['type'] == T.str, "struct substituton needs type key"
+ type = type.types['val'], "struct substituton needs val key"
uniforms[@name i] = type
@@ -267,6 +268,10 @@ shader_ = Constant.meta
typestr = GLSL_TYPES[tostring type]
if type == T.str
val
+ elseif type.__class == Struct and type.types['shader']
+ for k, v in pairs val.uniforms
+ uniforms[k] = v
+ val.shader
else
if type.__class == Struct
typestr = val.type