]> gitweb.factorcode.org Git - factor.git/commitdiff
gpu.render: allow uchar-array, ushort-array, and uint-array to be passed directly...
authorJoe Groff <arcata@gmail.com>
Fri, 14 May 2010 21:29:48 +0000 (14:29 -0700)
committerJoe Groff <arcata@gmail.com>
Fri, 14 May 2010 23:00:27 +0000 (16:00 -0700)
extra/gpu/render/render-docs.factor
extra/gpu/render/render.factor

index 95187b6ce72a75678bb4f312b812ffbc4d974855..4891a2601acdac4041bc95b0803a4f5755ad7eb6 100644 (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"
index d1cb0357eddbc20e6cae87500251b5cb5edeece8..1d80a86cf6ac7034a974ad95fca5b060f78f3221 100755 (executable)
@@ -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 ]