49 lines
1.4 KiB
Factor
49 lines
1.4 KiB
Factor
|
USING: alien alien.syntax combinators kernel parser sequences
|
||
|
system words namespaces hashtables init math arrays assocs
|
||
|
continuations lexer ;
|
||
|
IN: opengl.gl.extensions
|
||
|
|
||
|
ERROR: unknown-gl-platform ;
|
||
|
<< {
|
||
|
{ [ os windows? ] [ "opengl.gl.windows" ] }
|
||
|
{ [ os macosx? ] [ "opengl.gl.macosx" ] }
|
||
|
{ [ os unix? ] [ "opengl.gl.unix" ] }
|
||
|
[ unknown-gl-platform ]
|
||
|
} cond use+ >>
|
||
|
|
||
|
SYMBOL: +gl-function-number-counter+
|
||
|
SYMBOL: +gl-function-pointers+
|
||
|
|
||
|
: reset-gl-function-number-counter ( -- )
|
||
|
0 +gl-function-number-counter+ set-global ;
|
||
|
: reset-gl-function-pointers ( -- )
|
||
|
100 <hashtable> +gl-function-pointers+ set-global ;
|
||
|
|
||
|
[ reset-gl-function-pointers ] "opengl.gl" add-init-hook
|
||
|
reset-gl-function-pointers
|
||
|
reset-gl-function-number-counter
|
||
|
|
||
|
: gl-function-number ( -- n )
|
||
|
+gl-function-number-counter+ get-global
|
||
|
dup 1+ +gl-function-number-counter+ set-global ;
|
||
|
|
||
|
: gl-function-pointer ( names n -- funptr )
|
||
|
gl-function-context 2array dup +gl-function-pointers+ get-global at
|
||
|
[ 2nip ] [
|
||
|
>r [ gl-function-address ] map [ ] find nip
|
||
|
dup [ "OpenGL function not available" throw ] unless
|
||
|
dup r>
|
||
|
+gl-function-pointers+ get-global set-at
|
||
|
] if* ;
|
||
|
|
||
|
: GL-FUNCTION:
|
||
|
gl-function-calling-convention
|
||
|
scan
|
||
|
scan dup
|
||
|
scan drop "}" parse-tokens swap prefix
|
||
|
gl-function-number
|
||
|
[ gl-function-pointer ] 2curry swap
|
||
|
";" parse-tokens [ "()" subseq? not ] filter
|
||
|
define-indirect
|
||
|
; parsing
|