gpu.render: factor out and make public a "bind-uniforms" word for binding a uniform-tuple to a program-instance independent of a render-set
parent
2a156795c5
commit
08768d0e2f
|
@ -226,6 +226,11 @@ HELP: render-set
|
||||||
} }
|
} }
|
||||||
{ $notes "User-created framebuffers require OpenGL 3.0 or one of the " { $snippet "GL_EXT_framebuffer_object" } " or " { $snippet "GL_ARB_framebuffer_object" } " extensions. Disabling rasterization requires OpenGL 3.0 or the " { $snippet "GL_EXT_transform_feedback" } " extension. Named output-attachment values are available in GLSL 1.30 or later, and GLSL 1.20 and earlier using the " { $snippet "GL_EXT_gpu_shader4" } " extension. Transform feedback requires OpenGL 3.0 or one of the " { $snippet "GL_EXT_transform_feedback" } " or " { $snippet "GL_ARB_transform_feedback" } " extensions." } ;
|
{ $notes "User-created framebuffers require OpenGL 3.0 or one of the " { $snippet "GL_EXT_framebuffer_object" } " or " { $snippet "GL_ARB_framebuffer_object" } " extensions. Disabling rasterization requires OpenGL 3.0 or the " { $snippet "GL_EXT_transform_feedback" } " extension. Named output-attachment values are available in GLSL 1.30 or later, and GLSL 1.20 and earlier using the " { $snippet "GL_EXT_gpu_shader4" } " extension. Transform feedback requires OpenGL 3.0 or one of the " { $snippet "GL_EXT_transform_feedback" } " or " { $snippet "GL_ARB_transform_feedback" } " extensions." } ;
|
||||||
|
|
||||||
|
HELP: bind-uniforms
|
||||||
|
{ $values { "program-instance" program-instance } { "uniforms" uniform-tuple } }
|
||||||
|
{ $description "Binds the uniform shader parameters for " { $snippet "program-instance" } " using values from the given uniform tuple." }
|
||||||
|
{ $notes "The " { $link render } " word uses this word. Calling this word directly is only necessary if uniform parameters need to be bound independently of a " { $snippet "render" } " operation." } ;
|
||||||
|
|
||||||
{ render render-set } related-words
|
{ render render-set } related-words
|
||||||
|
|
||||||
HELP: texture-uniform
|
HELP: texture-uniform
|
||||||
|
|
|
@ -168,12 +168,12 @@ M: multi-index-elements render-vertex-indexes
|
||||||
: (bind-texture-unit) ( texture texture-unit -- )
|
: (bind-texture-unit) ( texture texture-unit -- )
|
||||||
swap [ GL_TEXTURE0 + glActiveTexture ] [ bind-texture drop ] bi* ; inline
|
swap [ GL_TEXTURE0 + glActiveTexture ] [ bind-texture drop ] bi* ; inline
|
||||||
|
|
||||||
GENERIC: bind-uniform-textures ( program-instance uniform-tuple -- )
|
GENERIC: (bind-uniform-textures) ( program-instance uniform-tuple -- )
|
||||||
GENERIC: bind-uniforms ( program-instance uniform-tuple -- )
|
GENERIC: (bind-uniforms) ( program-instance uniform-tuple -- )
|
||||||
|
|
||||||
M: uniform-tuple bind-uniform-textures
|
M: uniform-tuple (bind-uniform-textures)
|
||||||
2drop ;
|
2drop ;
|
||||||
M: uniform-tuple bind-uniforms
|
M: uniform-tuple (bind-uniforms)
|
||||||
2drop ;
|
2drop ;
|
||||||
|
|
||||||
: uniform-slot-type ( uniform -- type )
|
: uniform-slot-type ( uniform -- type )
|
||||||
|
@ -363,7 +363,7 @@ DEFER: [bind-uniform-tuple]
|
||||||
|
|
||||||
:: [bind-uniforms] ( superclass uniforms -- quot )
|
:: [bind-uniforms] ( superclass uniforms -- quot )
|
||||||
superclass "uniform-tuple-texture-units" word-prop 0 or :> first-texture-unit
|
superclass "uniform-tuple-texture-units" word-prop 0 or :> first-texture-unit
|
||||||
superclass \ bind-uniforms method :> next-method
|
superclass \ (bind-uniforms) method :> next-method
|
||||||
first-texture-unit uniforms "" [bind-uniform-tuple] nip :> bind-quot
|
first-texture-unit uniforms "" [bind-uniform-tuple] nip :> bind-quot
|
||||||
|
|
||||||
{ 2dup next-method } bind-quot [ ] append-as ;
|
{ 2dup next-method } bind-quot [ ] append-as ;
|
||||||
|
@ -371,10 +371,10 @@ DEFER: [bind-uniform-tuple]
|
||||||
: define-uniform-tuple-methods ( class superclass uniforms -- )
|
: define-uniform-tuple-methods ( class superclass uniforms -- )
|
||||||
[
|
[
|
||||||
2drop
|
2drop
|
||||||
[ \ bind-uniform-textures create-method-in ]
|
[ \ (bind-uniform-textures) create-method-in ]
|
||||||
[ [bind-uniform-textures] ] bi define
|
[ [bind-uniform-textures] ] bi define
|
||||||
] [
|
] [
|
||||||
[ \ bind-uniforms create-method-in ] 2dip
|
[ \ (bind-uniforms) create-method-in ] 2dip
|
||||||
[bind-uniforms] define
|
[bind-uniforms] define
|
||||||
] 3bi ;
|
] 3bi ;
|
||||||
|
|
||||||
|
@ -481,12 +481,15 @@ TUPLE: render-set
|
||||||
: 3<render-set> ( x y z quot-assoc -- render-set )
|
: 3<render-set> ( x y z quot-assoc -- render-set )
|
||||||
render-set swap 3make-tuple ; inline
|
render-set swap 3make-tuple ; inline
|
||||||
|
|
||||||
|
: bind-uniforms ( program-instance uniforms -- )
|
||||||
|
[ (bind-uniform-textures) ] [ (bind-uniforms) ] 2bi ; inline
|
||||||
|
|
||||||
: render ( render-set -- )
|
: render ( render-set -- )
|
||||||
{
|
{
|
||||||
[ vertex-array>> program-instance>> handle>> glUseProgram ]
|
[ vertex-array>> program-instance>> handle>> glUseProgram ]
|
||||||
[
|
[
|
||||||
[ vertex-array>> program-instance>> ] [ uniforms>> ] bi
|
[ vertex-array>> program-instance>> ] [ uniforms>> ] bi
|
||||||
[ bind-uniform-textures ] [ bind-uniforms ] 2bi
|
bind-uniforms
|
||||||
]
|
]
|
||||||
[
|
[
|
||||||
framebuffer>>
|
framebuffer>>
|
||||||
|
|
Loading…
Reference in New Issue