gpu.shaders: change around vertex-array construction a bit. rename <vertex-array> to <multi-vertex-array> and buffer>vertex-array to <vertex-array*> . add new <vertex-array> that takes a single buffer and reads it with the program's linked vertex-format

db4
Joe Groff 2010-02-10 15:27:57 -08:00
parent 910f1b603c
commit ce11431fdb
5 changed files with 41 additions and 24 deletions

View File

@ -163,7 +163,7 @@ CONSTANT: bunny-model-url "http://factorcode.org/bun_zipper.ply"
: fill-bunny-state ( bunny-state -- ) : fill-bunny-state ( bunny-state -- )
dup [ vertexes>> ] [ indexes>> ] bi <bunny-buffers> dup [ vertexes>> ] [ indexes>> ] bi <bunny-buffers>
[ bunny-program <program-instance> bunny-vertex buffer>vertex-array >>vertex-array ] [ bunny-program <program-instance> <vertex-array> >>vertex-array ]
[ 0 <buffer-ptr> ] [ 0 <buffer-ptr> ]
[ uint-indexes <index-elements> >>index-elements ] tri* [ uint-indexes <index-elements> >>index-elements ] tri*
drop ; drop ;
@ -180,7 +180,7 @@ CONSTANT: bunny-model-url "http://factorcode.org/bun_zipper.ply"
: <sobel-state> ( window-vertex-buffer -- sobel-state ) : <sobel-state> ( window-vertex-buffer -- sobel-state )
sobel-state new sobel-state new
swap sobel-program <program-instance> window-vertex buffer>vertex-array >>vertex-array swap sobel-program <program-instance> <vertex-array> >>vertex-array
RGBA half-components T{ texture-parameters RGBA half-components T{ texture-parameters
{ wrap clamp-texcoord-to-edge } { wrap clamp-texcoord-to-edge }
@ -207,7 +207,7 @@ CONSTANT: bunny-model-url "http://factorcode.org/bun_zipper.ply"
: <loading-state> ( window-vertex-buffer -- loading-state ) : <loading-state> ( window-vertex-buffer -- loading-state )
loading-state new loading-state new
swap swap
loading-program <program-instance> window-vertex buffer>vertex-array >>vertex-array loading-program <program-instance> <vertex-array> >>vertex-array
RGBA ubyte-components T{ texture-parameters RGBA ubyte-components T{ texture-parameters
{ wrap clamp-texcoord-to-edge } { wrap clamp-texcoord-to-edge }

View File

@ -19,10 +19,11 @@ HELP: <shader-instance>
HELP: <multi-vertex-array> HELP: <multi-vertex-array>
{ $values { $values
{ "program-instance" program-instance } { "vertex-formats" "a list of " { $link buffer-ptr } "/" { $link vertex-format } " pairs" } { "vertex-formats" "a list of " { $link buffer-ptr } "/" { $link vertex-format } " pairs" }
{ "program-instance" program-instance }
{ "vertex-array" vertex-array } { "vertex-array" vertex-array }
} }
{ $description "Creates a new " { $link vertex-array } " to feed data to " { $snippet "program-instance" } " from the set of " { $link buffer } "s specified in " { $snippet "vertex-formats" } "." } ; { $description "Creates a new " { $link vertex-array } " to feed data to " { $snippet "program-instance" } " from the set of " { $link buffer } "s specified in " { $snippet "vertex-formats" } ". The first element of each pair in " { $snippet "vertex-formats" } " can be either a " { $link buffer-ptr } " or a " { $link buffer } "; in the latter case, vertex data in the associated format is read from the beginning of the buffer." } ;
HELP: feedback-format: HELP: feedback-format:
{ $syntax "feedback-format: vertex-format" } { $syntax "feedback-format: vertex-format" }
@ -66,14 +67,21 @@ HELP: attribute-index
} }
{ $description "Returns the numeric index of the vertex attribute named " { $snippet "attribute-name" } " in " { $snippet "program-instance" } "." } ; { $description "Returns the numeric index of the vertex attribute named " { $snippet "attribute-name" } " in " { $snippet "program-instance" } "." } ;
HELP: <vertex-array*> HELP: <vertex-array>
{ $values { $values
{ "vertex-buffer" buffer } { "program-instance" program-instance } { "format" vertex-format } { "vertex-buffer" "a " { $link buffer } " or " { $link buffer-ptr } } { "program-instance" program-instance }
{ "vertex-array" vertex-array } { "vertex-array" vertex-array }
} }
{ $description "Creates a new " { $link vertex-array } " from the entire contents of a single " { $link buffer } " in a single " { $link vertex-format } " for use with " { $snippet "program-instance" } "." } ; { $description "Creates a new " { $link vertex-array } " from the entire contents of a single " { $link buffer } " for use with a " { $link program-instance } ". The data in " { $snippet "buffer" } " is taken in the first " { $link vertex-format } " specified in the program instance's originating " { $link POSTPONE: GLSL-PROGRAM: } " definition. If the program has no associated vertex formats, an error will be thrown. To specify a different vertex format, use " { $link <vertex-array*> } "." } ;
{ vertex-array <multi-vertex-array> <vertex-array*> } related-words HELP: <vertex-array*>
{ $values
{ "vertex-buffer" "a " { $link buffer } " or " { $link buffer-ptr } } { "program-instance" program-instance } { "format" vertex-format }
{ "vertex-array" vertex-array }
}
{ $description "Creates a new " { $link vertex-array } " from the entire contents of a single " { $link buffer } " for use with a " { $link program-instance } ". The data in " { $snippet "buffer" } " is taken in the specified " { $link vertex-format } "." } ;
{ vertex-array <multi-vertex-array> <vertex-array> <vertex-array*> } related-words
HELP: compile-shader-error HELP: compile-shader-error
{ $class-description "An error compiling the source for a " { $link shader } "." { $class-description "An error compiling the source for a " { $link shader } "."

View File

@ -326,19 +326,28 @@ TUPLE: vertex-array < gpu-object
M: vertex-array dispose M: vertex-array dispose
[ [ delete-vertex-array ] when* f ] change-handle drop ; [ [ delete-vertex-array ] when* f ] change-handle drop ;
: <vertex-array> ( program-instance vertex-formats -- vertex-array ) : ?>buffer-ptr ( buffer/ptr -- buffer-ptr )
gen-vertex-array dup buffer-ptr? [ 0 <buffer-ptr> ] unless ; inline
[ glBindVertexArray [ first2 bind-vertex-format ] with each ] : ?>buffer ( buffer/ptr -- buffer )
[ -rot [ first buffer>> ] map vertex-array boa ] 3bi dup buffer? [ buffer>> ] unless ; inline
window-resource ; inline
TYPED: buffer>vertex-array ( vertex-buffer: buffer :: <multi-vertex-array> ( vertex-formats program-instance -- vertex-array )
program-instance: program-instance gen-vertex-array :> handle
format: vertex-format handle glBindVertexArray
--
vertex-array: vertex-array ) vertex-formats [ program-instance swap first2 [ ?>buffer-ptr ] dip bind-vertex-format ] each
[ swap ] dip handle program-instance vertex-formats [ first ?>buffer ] map
[ 0 <buffer-ptr> ] dip 2array 1array <vertex-array> ; inline vertex-array boa window-resource ; inline
:: <vertex-array*> ( vertex-buffer program-instance format -- vertex-array )
gen-vertex-array :> handle
handle glBindVertexArray
program-instance vertex-buffer ?>buffer-ptr format bind-vertex-format
handle program-instance vertex-buffer ?>buffer 1array
vertex-array boa window-resource ; inline
: <vertex-array> ( vertex-buffer program-instance -- vertex-array )
dup program>> vertex-formats>> first <vertex-array*> ; inline
TYPED: vertex-array-buffer ( vertex-array: vertex-array -- vertex-buffer: buffer ) TYPED: vertex-array-buffer ( vertex-array: vertex-array -- vertex-buffer: buffer )
vertex-buffers>> first ; vertex-buffers>> first ;
@ -424,7 +433,7 @@ TUPLE: feedback-format
: shaders-and-formats ( words -- shaders vertex-formats feedback-format ) : shaders-and-formats ( words -- shaders vertex-formats feedback-format )
[ [ ?shader ] map sift ] [ [ ?shader ] map sift ]
[ [ vertex-format? ] filter ] [ [ vertex-format-attributes ] filter ]
[ [ feedback-format? ] filter validate-feedback-format ] tri ; [ [ feedback-format? ] filter validate-feedback-format ] tri ;
PRIVATE> PRIVATE>

View File

@ -62,4 +62,4 @@ CONSTANT: window-vertexes
byte-array>buffer ; inline byte-array>buffer ; inline
: <window-vertex-array> ( program-instance -- vertex-array ) : <window-vertex-array> ( program-instance -- vertex-array )
[ <window-vertex-buffer> ] dip window-vertex buffer>vertex-array ; inline [ <window-vertex-buffer> ] dip window-vertex <vertex-array*> ; inline

View File

@ -130,7 +130,7 @@ TUPLE: vbo
[ [
[ [
[ vertex-buffer>> obj-program <program-instance> ] [ vertex-buffer>> obj-program <program-instance> ]
[ vertex-format>> ] bi buffer>vertex-array [ vertex-format>> ] bi <vertex-array*>
] map >>vertex-arrays drop ] map >>vertex-arrays drop
] ]
[ [