gpu.render: allow uchar-array, ushort-array, and uint-array to be passed directly to render as element arrays
parent
ad7636045f
commit
51c3e8a1b9
|
@ -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." }
|
{ "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-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." }
|
{ "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"
|
ARTICLE: "gpu.render" "Rendering"
|
||||||
|
|
|
@ -11,10 +11,7 @@ specialized-arrays strings ui.gadgets.worlds variants
|
||||||
vocabs.parser words math.vectors.simd ;
|
vocabs.parser words math.vectors.simd ;
|
||||||
FROM: math => float ;
|
FROM: math => float ;
|
||||||
QUALIFIED-WITH: alien.c-types c
|
QUALIFIED-WITH: alien.c-types c
|
||||||
SPECIALIZED-ARRAY: c:float
|
SPECIALIZED-ARRAYS: c:float c:int c:uchar c:ushort c:uint c:void* ;
|
||||||
SPECIALIZED-ARRAY: int
|
|
||||||
SPECIALIZED-ARRAY: uint
|
|
||||||
SPECIALIZED-ARRAY: void*
|
|
||||||
IN: gpu.render
|
IN: gpu.render
|
||||||
|
|
||||||
UNION: ?integer integer POSTPONE: f ;
|
UNION: ?integer integer POSTPONE: f ;
|
||||||
|
@ -98,7 +95,10 @@ UNION: vertex-indexes
|
||||||
index-range
|
index-range
|
||||||
multi-index-range
|
multi-index-range
|
||||||
index-elements
|
index-elements
|
||||||
multi-index-elements ;
|
multi-index-elements
|
||||||
|
uchar-array
|
||||||
|
ushort-array
|
||||||
|
uint-array ;
|
||||||
|
|
||||||
VARIANT: primitive-mode
|
VARIANT: primitive-mode
|
||||||
points-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# 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
|
M: index-range render-vertex-indexes
|
||||||
[ gl-primitive-mode ] [ [ start>> ] [ count>> ] bi ] bi* glDrawArrays ;
|
[ gl-primitive-mode ] [ [ start>> ] [ count>> ] bi ] bi* glDrawArrays ;
|
||||||
|
|
||||||
|
@ -167,6 +172,18 @@ M: index-elements render-vertex-indexes-instanced
|
||||||
[ ] tri*
|
[ ] tri*
|
||||||
swap index-buffer [ swap glDrawElementsInstanced ] with-gpu-data-ptr ;
|
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
|
M: multi-index-elements render-vertex-indexes
|
||||||
[ gl-primitive-mode ]
|
[ gl-primitive-mode ]
|
||||||
[ { [ counts>> ] [ index-type>> gl-index-type ] [ ptrs>> dup length ] [ buffer>> ] } cleave ]
|
[ { [ counts>> ] [ index-type>> gl-index-type ] [ ptrs>> dup length ] [ buffer>> ] } cleave ]
|
||||||
|
|
Loading…
Reference in New Issue