Modernize the bunny demo code
parent
e68f0848c2
commit
07b91613e4
|
@ -13,7 +13,7 @@ TUPLE: bunny-gadget model geom draw-seq draw-n ;
|
||||||
0.0 0.0 0.375 <demo-gadget>
|
0.0 0.0 0.375 <demo-gadget>
|
||||||
maybe-download read-model {
|
maybe-download read-model {
|
||||||
set-delegate
|
set-delegate
|
||||||
set-bunny-gadget-model
|
(>>model)
|
||||||
} bunny-gadget construct ;
|
} bunny-gadget construct ;
|
||||||
|
|
||||||
: bunny-gadget-draw ( gadget -- draw )
|
: bunny-gadget-draw ( gadget -- draw )
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
USING: arrays bunny.model continuations kernel multiline opengl opengl.shaders
|
USING: arrays bunny.model continuations kernel multiline opengl opengl.shaders
|
||||||
opengl.capabilities opengl.gl sequences sequences.lib ;
|
opengl.capabilities opengl.gl sequences sequences.lib accessors ;
|
||||||
IN: bunny.cel-shaded
|
IN: bunny.cel-shaded
|
||||||
|
|
||||||
STRING: vertex-shader-source
|
STRING: vertex-shader-source
|
||||||
|
@ -68,11 +68,12 @@ TUPLE: bunny-cel-shaded program ;
|
||||||
: <bunny-cel-shaded> ( gadget -- draw )
|
: <bunny-cel-shaded> ( gadget -- draw )
|
||||||
drop
|
drop
|
||||||
cel-shading-supported? [
|
cel-shading-supported? [
|
||||||
|
bunny-cel-shaded new
|
||||||
vertex-shader-source <vertex-shader> check-gl-shader
|
vertex-shader-source <vertex-shader> check-gl-shader
|
||||||
cel-shaded-fragment-shader-lib-source <fragment-shader> check-gl-shader
|
cel-shaded-fragment-shader-lib-source <fragment-shader> check-gl-shader
|
||||||
cel-shaded-fragment-shader-main-source <fragment-shader> check-gl-shader
|
cel-shaded-fragment-shader-main-source <fragment-shader> check-gl-shader
|
||||||
3array <gl-program> check-gl-program
|
3array <gl-program> check-gl-program
|
||||||
{ set-bunny-cel-shaded-program } bunny-cel-shaded construct
|
>>program
|
||||||
] [ f ] if ;
|
] [ f ] if ;
|
||||||
|
|
||||||
: (draw-cel-shaded-bunny) ( geom program -- )
|
: (draw-cel-shaded-bunny) ( geom program -- )
|
||||||
|
@ -85,8 +86,8 @@ TUPLE: bunny-cel-shaded program ;
|
||||||
} [ bunny-geom ] with-gl-program ;
|
} [ bunny-geom ] with-gl-program ;
|
||||||
|
|
||||||
M: bunny-cel-shaded draw-bunny
|
M: bunny-cel-shaded draw-bunny
|
||||||
bunny-cel-shaded-program (draw-cel-shaded-bunny) ;
|
program>> (draw-cel-shaded-bunny) ;
|
||||||
|
|
||||||
M: bunny-cel-shaded dispose
|
M: bunny-cel-shaded dispose
|
||||||
bunny-cel-shaded-program delete-gl-program ;
|
program>> delete-gl-program ;
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ TUPLE: bunny-fixed-pipeline ;
|
||||||
|
|
||||||
: <bunny-fixed-pipeline> ( gadget -- draw )
|
: <bunny-fixed-pipeline> ( gadget -- draw )
|
||||||
drop
|
drop
|
||||||
{ } bunny-fixed-pipeline construct ;
|
bunny-fixed-pipeline new ;
|
||||||
|
|
||||||
M: bunny-fixed-pipeline draw-bunny
|
M: bunny-fixed-pipeline draw-bunny
|
||||||
drop
|
drop
|
||||||
|
|
|
@ -2,7 +2,7 @@ USING: alien alien.c-types arrays sequences math math.vectors
|
||||||
math.matrices math.parser io io.files kernel opengl opengl.gl
|
math.matrices math.parser io io.files kernel opengl opengl.gl
|
||||||
opengl.glu io.encodings.ascii opengl.capabilities shuffle
|
opengl.glu io.encodings.ascii opengl.capabilities shuffle
|
||||||
http.client vectors splitting tools.time system combinators
|
http.client vectors splitting tools.time system combinators
|
||||||
float-arrays continuations namespaces sequences.lib ;
|
float-arrays continuations namespaces sequences.lib accessors ;
|
||||||
IN: bunny.model
|
IN: bunny.model
|
||||||
|
|
||||||
: numbers ( str -- seq )
|
: numbers ( str -- seq )
|
||||||
|
@ -85,24 +85,24 @@ M: bunny-dlist bunny-geom
|
||||||
bunny-dlist-list glCallList ;
|
bunny-dlist-list glCallList ;
|
||||||
|
|
||||||
M: bunny-buffers bunny-geom
|
M: bunny-buffers bunny-geom
|
||||||
dup {
|
dup { array>> element-array>> } get-slots [
|
||||||
bunny-buffers-array
|
|
||||||
bunny-buffers-element-array
|
|
||||||
} get-slots [
|
|
||||||
{ GL_VERTEX_ARRAY GL_NORMAL_ARRAY } [
|
{ GL_VERTEX_ARRAY GL_NORMAL_ARRAY } [
|
||||||
GL_DOUBLE 0 0 buffer-offset glNormalPointer
|
GL_DOUBLE 0 0 buffer-offset glNormalPointer
|
||||||
dup bunny-buffers-nv "double" heap-size * buffer-offset
|
[
|
||||||
|
nv>> "double" heap-size * buffer-offset
|
||||||
3 GL_DOUBLE 0 roll glVertexPointer
|
3 GL_DOUBLE 0 roll glVertexPointer
|
||||||
bunny-buffers-ni
|
] [
|
||||||
|
ni>>
|
||||||
GL_TRIANGLES swap GL_UNSIGNED_INT 0 buffer-offset glDrawElements
|
GL_TRIANGLES swap GL_UNSIGNED_INT 0 buffer-offset glDrawElements
|
||||||
|
] bi
|
||||||
] all-enabled-client-state
|
] all-enabled-client-state
|
||||||
] with-array-element-buffers ;
|
] with-array-element-buffers ;
|
||||||
|
|
||||||
M: bunny-dlist dispose
|
M: bunny-dlist dispose
|
||||||
bunny-dlist-list delete-dlist ;
|
list>> delete-dlist ;
|
||||||
|
|
||||||
M: bunny-buffers dispose
|
M: bunny-buffers dispose
|
||||||
{ bunny-buffers-array bunny-buffers-element-array } get-slots
|
{ array>> element-array>> } get-slots
|
||||||
delete-gl-buffer delete-gl-buffer ;
|
delete-gl-buffer delete-gl-buffer ;
|
||||||
|
|
||||||
: <bunny-geom> ( model -- geom )
|
: <bunny-geom> ( model -- geom )
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
USING: arrays bunny.model bunny.cel-shaded continuations kernel
|
USING: arrays bunny.model bunny.cel-shaded continuations kernel
|
||||||
math multiline opengl opengl.shaders opengl.framebuffers
|
math multiline opengl opengl.shaders opengl.framebuffers
|
||||||
opengl.gl opengl.capabilities sequences ui.gadgets combinators ;
|
opengl.gl opengl.capabilities sequences ui.gadgets combinators
|
||||||
|
accessors ;
|
||||||
IN: bunny.outlined
|
IN: bunny.outlined
|
||||||
|
|
||||||
STRING: outlined-pass1-fragment-shader-main-source
|
STRING: outlined-pass1-fragment-shader-main-source
|
||||||
|
@ -139,9 +140,9 @@ TUPLE: bunny-outlined
|
||||||
: <bunny-outlined> ( gadget -- draw )
|
: <bunny-outlined> ( gadget -- draw )
|
||||||
outlining-supported? [
|
outlining-supported? [
|
||||||
pass1-program pass2-program {
|
pass1-program pass2-program {
|
||||||
set-bunny-outlined-gadget
|
(>>gadget)
|
||||||
set-bunny-outlined-pass1-program
|
(>>pass1-program)
|
||||||
set-bunny-outlined-pass2-program
|
(>>pass2-program)
|
||||||
} bunny-outlined construct
|
} bunny-outlined construct
|
||||||
] [ drop f ] if ;
|
] [ drop f ] if ;
|
||||||
|
|
||||||
|
@ -169,34 +170,33 @@ TUPLE: bunny-outlined
|
||||||
] with-framebuffer ;
|
] with-framebuffer ;
|
||||||
|
|
||||||
: dispose-framebuffer ( draw -- )
|
: dispose-framebuffer ( draw -- )
|
||||||
dup bunny-outlined-framebuffer-dim [
|
dup framebuffer-dim>> [
|
||||||
{
|
{
|
||||||
[ bunny-outlined-framebuffer [ delete-framebuffer ] when* ]
|
[ framebuffer>> [ delete-framebuffer ] when* ]
|
||||||
[ bunny-outlined-color-texture [ delete-texture ] when* ]
|
[ color-texture>> [ delete-texture ] when* ]
|
||||||
[ bunny-outlined-normal-texture [ delete-texture ] when* ]
|
[ normal-texture>> [ delete-texture ] when* ]
|
||||||
[ bunny-outlined-depth-texture [ delete-texture ] when* ]
|
[ depth-texture>> [ delete-texture ] when* ]
|
||||||
[ f swap set-bunny-outlined-framebuffer-dim ]
|
[ f >>framebuffer-dim drop ]
|
||||||
} cleave
|
} cleave
|
||||||
] [ drop ] if ;
|
] [ drop ] if ;
|
||||||
|
|
||||||
: remake-framebuffer-if-needed ( draw -- )
|
: remake-framebuffer-if-needed ( draw -- )
|
||||||
dup bunny-outlined-gadget rect-dim
|
dup [ gadget>> dim>> ] [ framebuffer-dim>> ] bi
|
||||||
over bunny-outlined-framebuffer-dim
|
|
||||||
over =
|
over =
|
||||||
[ 2drop ] [
|
[ 2drop ] [
|
||||||
swap dup dispose-framebuffer >r
|
[ dup dispose-framebuffer dup ] dip {
|
||||||
dup GL_RGBA16F_ARB GL_RGBA (framebuffer-texture)
|
[
|
||||||
swap dup GL_RGBA16F_ARB GL_RGBA (framebuffer-texture)
|
GL_RGBA16F_ARB GL_RGBA (framebuffer-texture)
|
||||||
swap dup GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT (framebuffer-texture)
|
[ >>color-texture drop ] keep
|
||||||
swap >r
|
] [
|
||||||
[ (make-framebuffer) ] 3keep
|
GL_RGBA16F_ARB GL_RGBA (framebuffer-texture)
|
||||||
r> r> {
|
[ >>normal-texture drop ] keep
|
||||||
set-bunny-outlined-framebuffer
|
] [
|
||||||
set-bunny-outlined-color-texture
|
GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT (framebuffer-texture)
|
||||||
set-bunny-outlined-normal-texture
|
[ >>depth-texture drop ] keep
|
||||||
set-bunny-outlined-depth-texture
|
]
|
||||||
set-bunny-outlined-framebuffer-dim
|
} 2cleave
|
||||||
} set-slots
|
(make-framebuffer) >>framebuffer drop
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
: clear-framebuffer ( -- )
|
: clear-framebuffer ( -- )
|
||||||
|
@ -208,23 +208,27 @@ TUPLE: bunny-outlined
|
||||||
GL_COLOR_BUFFER_BIT glClear ;
|
GL_COLOR_BUFFER_BIT glClear ;
|
||||||
|
|
||||||
: (pass1) ( geom draw -- )
|
: (pass1) ( geom draw -- )
|
||||||
dup bunny-outlined-framebuffer [
|
dup framebuffer>> [
|
||||||
clear-framebuffer
|
clear-framebuffer
|
||||||
{ GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT } set-draw-buffers
|
{ GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT } set-draw-buffers
|
||||||
bunny-outlined-pass1-program (draw-cel-shaded-bunny)
|
pass1-program>> (draw-cel-shaded-bunny)
|
||||||
] with-framebuffer ;
|
] with-framebuffer ;
|
||||||
|
|
||||||
: (pass2) ( draw -- )
|
: (pass2) ( draw -- )
|
||||||
init-matrices
|
init-matrices {
|
||||||
dup bunny-outlined-color-texture GL_TEXTURE_2D GL_TEXTURE0 bind-texture-unit
|
[ color-texture>> GL_TEXTURE_2D GL_TEXTURE0 bind-texture-unit ]
|
||||||
dup bunny-outlined-normal-texture GL_TEXTURE_2D GL_TEXTURE1 bind-texture-unit
|
[ normal-texture>> GL_TEXTURE_2D GL_TEXTURE1 bind-texture-unit ]
|
||||||
dup bunny-outlined-depth-texture GL_TEXTURE_2D GL_TEXTURE2 bind-texture-unit
|
[ depth-texture>> GL_TEXTURE_2D GL_TEXTURE2 bind-texture-unit ]
|
||||||
bunny-outlined-pass2-program {
|
[
|
||||||
|
pass2-program>> {
|
||||||
{ "colormap" [ 0 glUniform1i ] }
|
{ "colormap" [ 0 glUniform1i ] }
|
||||||
{ "normalmap" [ 1 glUniform1i ] }
|
{ "normalmap" [ 1 glUniform1i ] }
|
||||||
{ "depthmap" [ 2 glUniform1i ] }
|
{ "depthmap" [ 2 glUniform1i ] }
|
||||||
{ "line_color" [ 0.1 0.0 0.1 1.0 glUniform4f ] }
|
{ "line_color" [ 0.1 0.0 0.1 1.0 glUniform4f ] }
|
||||||
} [ { -1.0 -1.0 } { 1.0 1.0 } rect-vertices ] with-gl-program ;
|
} [ { -1.0 -1.0 } { 1.0 1.0 } rect-vertices ]
|
||||||
|
with-gl-program
|
||||||
|
]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
M: bunny-outlined draw-bunny
|
M: bunny-outlined draw-bunny
|
||||||
[ remake-framebuffer-if-needed ]
|
[ remake-framebuffer-if-needed ]
|
||||||
|
@ -232,6 +236,6 @@ M: bunny-outlined draw-bunny
|
||||||
[ (pass2) ] tri ;
|
[ (pass2) ] tri ;
|
||||||
|
|
||||||
M: bunny-outlined dispose
|
M: bunny-outlined dispose
|
||||||
[ bunny-outlined-pass1-program [ delete-gl-program ] when* ]
|
[ pass1-program>> [ delete-gl-program ] when* ]
|
||||||
[ bunny-outlined-pass2-program [ delete-gl-program ] when* ]
|
[ pass2-program>> [ delete-gl-program ] when* ]
|
||||||
[ dispose-framebuffer ] tri ;
|
[ dispose-framebuffer ] tri ;
|
||||||
|
|
Loading…
Reference in New Issue