gpu.render: allow uchar-array, ushort-array, and uint-array to be passed directly to render as element arrays

db4
Joe Groff 2010-05-14 14:29:48 -07:00
parent ad7636045f
commit 51c3e8a1b9
2 changed files with 23 additions and 5 deletions

View File

@ -293,6 +293,7 @@ HELP: vertex-indexes
{ "An " { $link index-elements } " value submits vertex array elements in an order specified by an array of indexes." }
{ "A " { $link multi-index-range } " value submits multiple sequential slices of a vertex array." }
{ "A " { $link multi-index-elements } " value submits multiple separate lists of indexed vertex array elements." }
{ "Specialized arrays of " { $link c:uchar } ", " { $link c:ushort } ", or " { $link c:uint } " elements may also be used directly as arrays of indexes." }
} } ;
ARTICLE: "gpu.render" "Rendering"

View File

@ -11,10 +11,7 @@ specialized-arrays strings ui.gadgets.worlds variants
vocabs.parser words math.vectors.simd ;
FROM: math => float ;
QUALIFIED-WITH: alien.c-types c
SPECIALIZED-ARRAY: c:float
SPECIALIZED-ARRAY: int
SPECIALIZED-ARRAY: uint
SPECIALIZED-ARRAY: void*
SPECIALIZED-ARRAYS: c:float c:int c:uchar c:ushort c:uint c:void* ;
IN: gpu.render
UNION: ?integer integer POSTPONE: f ;
@ -98,7 +95,10 @@ UNION: vertex-indexes
index-range
multi-index-range
index-elements
multi-index-elements ;
multi-index-elements
uchar-array
ushort-array
uint-array ;
VARIANT: primitive-mode
points-mode
@ -145,6 +145,11 @@ GENERIC: render-vertex-indexes ( primitive-mode vertex-indexes -- )
GENERIC# render-vertex-indexes-instanced 1 ( primitive-mode vertex-indexes instances -- )
GENERIC: gl-array-element-type ( array -- type )
M: uchar-array gl-array-element-type drop GL_UNSIGNED_BYTE ; inline
M: ushort-array gl-array-element-type drop GL_UNSIGNED_SHORT ; inline
M: uint-array gl-array-element-type drop GL_UNSIGNED_INT ; inline
M: index-range render-vertex-indexes
[ gl-primitive-mode ] [ [ start>> ] [ count>> ] bi ] bi* glDrawArrays ;
@ -167,6 +172,18 @@ M: index-elements render-vertex-indexes-instanced
[ ] tri*
swap index-buffer [ swap glDrawElementsInstanced ] with-gpu-data-ptr ;
M: specialized-array render-vertex-indexes
GL_ELEMENT_ARRAY_BUFFER 0 glBindBuffer
[ gl-primitive-mode ]
[ [ length ] [ gl-array-element-type ] [ >c-ptr ] tri ] bi*
glDrawElements ;
M: specialized-array render-vertex-indexes-instanced
GL_ELEMENT_ARRAY_BUFFER 0 glBindBuffer
[ gl-primitive-mode ]
[ [ length ] [ gl-array-element-type ] [ >c-ptr ] tri ]
[ ] tri* glDrawElementsInstanced ;
M: multi-index-elements render-vertex-indexes
[ gl-primitive-mode ]
[ { [ counts>> ] [ index-type>> gl-index-type ] [ ptrs>> dup length ] [ buffer>> ] } cleave ]