accept transform-feedback-output target from render
parent
eeb02815bc
commit
bfcb95edaf
|
@ -15,7 +15,8 @@ VARIANT: buffer-access-mode
|
|||
|
||||
VARIANT: buffer-kind
|
||||
vertex-buffer index-buffer
|
||||
pixel-unpack-buffer pixel-pack-buffer ;
|
||||
pixel-unpack-buffer pixel-pack-buffer
|
||||
transform-feedback-buffer ;
|
||||
|
||||
TUPLE: buffer < gpu-object
|
||||
{ upload-pattern buffer-upload-pattern }
|
||||
|
@ -52,6 +53,7 @@ TUPLE: buffer < gpu-object
|
|||
{ index-buffer [ GL_ELEMENT_ARRAY_BUFFER ] }
|
||||
{ pixel-unpack-buffer [ GL_PIXEL_UNPACK_BUFFER ] }
|
||||
{ pixel-pack-buffer [ GL_PIXEL_PACK_BUFFER ] }
|
||||
{ transform-feedback-buffer [ GL_TRANSFORM_FEEDBACK_BUFFER ] }
|
||||
} case ; inline
|
||||
|
||||
: get-buffer-int ( target enum -- value )
|
||||
|
@ -82,7 +84,7 @@ UNION: gpu-data-ptr buffer-ptr c-ptr ;
|
|||
: buffer-ptr>range ( buffer-ptr -- buffer-range )
|
||||
[ buffer>> ] [ offset>> ] bi
|
||||
2dup [ buffer-size ] dip -
|
||||
buffer-range boa ;
|
||||
buffer-range boa ; inline
|
||||
|
||||
:: allocate-buffer ( buffer size initial-data -- )
|
||||
buffer bind-buffer :> target
|
||||
|
|
|
@ -431,9 +431,33 @@ SYNTAX: UNIFORM-TUPLE:
|
|||
dup first sequence?
|
||||
[ bind-named-output-attachments ] [ [ drop ] 2dip bind-unnamed-output-attachments ] if ;
|
||||
|
||||
GENERIC: bind-transform-feedback-output ( output -- )
|
||||
|
||||
M: buffer bind-transform-feedback-output
|
||||
[ GL_TRANSFORM_FEEDBACK_BUFFER 0 ] dip handle>> glBindBufferBase ; inline
|
||||
|
||||
M: buffer-range bind-transform-feedback-output
|
||||
[ GL_TRANSFORM_FEEDBACK_BUFFER 0 ] dip
|
||||
[ handle>> ] [ offset>> ] [ size>> ] tri glBindBufferRange ; inline
|
||||
|
||||
M: buffer-ptr bind-transform-feedback-output
|
||||
buffer-ptr>range bind-transform-feedback-output ; inline
|
||||
|
||||
: gl-feedback-primitive-mode ( primitive-mode -- gl-mode )
|
||||
{
|
||||
{ points-mode [ GL_POINTS ] }
|
||||
{ lines-mode [ GL_LINES ] }
|
||||
{ line-strip-mode [ GL_LINES ] }
|
||||
{ line-loop-mode [ GL_LINES ] }
|
||||
{ triangles-mode [ GL_TRIANGLES ] }
|
||||
{ triangle-strip-mode [ GL_TRIANGLES ] }
|
||||
{ triangle-fan-mode [ GL_TRIANGLES ] }
|
||||
} case ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
UNION: ?any-framebuffer any-framebuffer POSTPONE: f ;
|
||||
UNION: transform-feedback-output buffer buffer-range POSTPONE: f ;
|
||||
|
||||
TUPLE: render-set
|
||||
{ primitive-mode primitive-mode read-only }
|
||||
|
@ -442,7 +466,8 @@ TUPLE: render-set
|
|||
{ indexes vertex-indexes initial: T{ index-range } read-only }
|
||||
{ instances ?integer initial: f read-only }
|
||||
{ framebuffer ?any-framebuffer initial: system-framebuffer read-only }
|
||||
{ output-attachments sequence initial: { default-attachment } read-only } ;
|
||||
{ output-attachments sequence initial: { default-attachment } read-only }
|
||||
{ transform-feedback-output transform-feedback-output initial: f read-only } ;
|
||||
|
||||
: <render-set> ( x quot-assoc -- render-set )
|
||||
render-set swap make-tuple ; inline
|
||||
|
@ -472,11 +497,20 @@ TUPLE: render-set
|
|||
bind-output-attachments
|
||||
]
|
||||
[ vertex-array>> bind-vertex-array ]
|
||||
[
|
||||
dup transform-feedback-output>> [
|
||||
[ primitive-mode>> gl-feedback-primitive-mode glBeginTransformFeedback ]
|
||||
[ bind-transform-feedback-output ] bi*
|
||||
] [ drop ] if*
|
||||
]
|
||||
|
||||
[
|
||||
[ primitive-mode>> ] [ indexes>> ] [ instances>> ] tri
|
||||
[ render-vertex-indexes-instanced ]
|
||||
[ render-vertex-indexes ] if*
|
||||
]
|
||||
|
||||
[ transform-feedback-output>> [ glEndTransformFeedback ] when ]
|
||||
[ framebuffer>> [ GL_RASTERIZER_DISCARD glDisable ] unless ]
|
||||
} cleave ; inline
|
||||
|
||||
|
|
|
@ -301,7 +301,8 @@ DEFER: <shader-instance>
|
|||
[ compile-shader-error ] if ;
|
||||
|
||||
: (link-program) ( program shader-instances -- program-instance )
|
||||
[ [ handle>> ] map ] [ feedback-format>> [ link-feedback-format ] curry ] bi (gl-program)
|
||||
[ [ handle>> ] map ] curry
|
||||
[ feedback-format>> [ link-feedback-format ] curry ] bi (gl-program)
|
||||
dup gl-program-ok?
|
||||
[ swap world get \ program-instance boa window-resource ]
|
||||
[ link-program-error ] if ;
|
||||
|
|
Loading…
Reference in New Issue