| 
									
										
										
										
											2008-11-30 18:47:29 -05:00
										 |  |  | USING: alien alien.syntax alien.parser combinators | 
					
						
							| 
									
										
										
										
											2008-11-29 16:21:12 -05:00
										 |  |  | kernel parser sequences system words namespaces hashtables init | 
					
						
							| 
									
										
										
										
											2008-12-17 19:10:01 -05:00
										 |  |  | math arrays assocs continuations lexer fry locals vocabs.parser ;
 | 
					
						
							| 
									
										
										
										
											2008-04-06 22:07:21 -04:00
										 |  |  | IN: opengl.gl.extensions | 
					
						
							| 
									
										
										
										
											2008-04-02 19:25:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ERROR: unknown-gl-platform ;
 | 
					
						
							| 
									
										
										
										
											2008-02-08 01:43:05 -05:00
										 |  |  | << { | 
					
						
							| 
									
										
										
										
											2008-04-02 19:25:33 -04:00
										 |  |  |     { [ os windows? ] [ "opengl.gl.windows" ] } | 
					
						
							|  |  |  |     { [ os macosx? ]  [ "opengl.gl.macosx" ] } | 
					
						
							|  |  |  |     { [ os unix? ] [ "opengl.gl.unix" ] } | 
					
						
							| 
									
										
										
										
											2008-04-11 13:56:48 -04:00
										 |  |  |     [ unknown-gl-platform ] | 
					
						
							| 
									
										
										
										
											2009-05-14 23:31:29 -04:00
										 |  |  | } cond use-vocab >> | 
					
						
							| 
									
										
										
										
											2008-02-08 01:43:05 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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 ;
 | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2008-02-27 20:24:50 -05:00
										 |  |  | [ reset-gl-function-pointers ] "opengl.gl" add-init-hook | 
					
						
							| 
									
										
										
										
											2008-02-08 01:43:05 -05:00
										 |  |  | reset-gl-function-pointers | 
					
						
							|  |  |  | reset-gl-function-number-counter | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : gl-function-number ( -- n )
 | 
					
						
							|  |  |  |     +gl-function-number-counter+ get-global
 | 
					
						
							| 
									
										
										
										
											2009-08-13 20:21:44 -04:00
										 |  |  |     dup 1 + +gl-function-number-counter+ set-global ;
 | 
					
						
							| 
									
										
										
										
											2008-02-08 01:43:05 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : gl-function-pointer ( names n -- funptr )
 | 
					
						
							|  |  |  |     gl-function-context 2array dup +gl-function-pointers+ get-global at
 | 
					
						
							|  |  |  |     [ 2nip ] [ | 
					
						
							| 
									
										
										
										
											2008-11-30 18:47:29 -05:00
										 |  |  |         [ | 
					
						
							|  |  |  |             [ gl-function-address ] map [ ] find nip
 | 
					
						
							|  |  |  |             dup [ "OpenGL function not available" throw ] unless
 | 
					
						
							|  |  |  |             dup
 | 
					
						
							|  |  |  |         ] dip
 | 
					
						
							| 
									
										
										
										
											2008-02-08 01:43:05 -05:00
										 |  |  |         +gl-function-pointers+ get-global set-at
 | 
					
						
							|  |  |  |     ] if* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-29 16:21:12 -05:00
										 |  |  | : indirect-quot ( function-ptr-quot return types abi -- quot )
 | 
					
						
							| 
									
										
										
										
											2008-11-30 18:47:29 -05:00
										 |  |  |     '[ @  _ _ _ alien-indirect ] ;
 | 
					
						
							| 
									
										
										
										
											2008-11-29 16:21:12 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-30 18:47:29 -05:00
										 |  |  | :: define-indirect ( abi return function-ptr-quot function-name parameters -- )
 | 
					
						
							|  |  |  |     function-name create-in dup reset-generic | 
					
						
							|  |  |  |     function-ptr-quot return
 | 
					
						
							|  |  |  |     parameters return parse-arglist [ abi indirect-quot ] dip
 | 
					
						
							|  |  |  |     define-declared ;
 | 
					
						
							| 
									
										
										
										
											2008-11-29 16:21:12 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-21 02:27:50 -04:00
										 |  |  | SYNTAX: GL-FUNCTION: | 
					
						
							| 
									
										
										
										
											2008-02-08 01:43:05 -05:00
										 |  |  |     gl-function-calling-convention | 
					
						
							|  |  |  |     scan | 
					
						
							|  |  |  |     scan dup
 | 
					
						
							| 
									
										
										
										
											2008-03-31 20:18:05 -04:00
										 |  |  |     scan drop "}" parse-tokens swap prefix
 | 
					
						
							| 
									
										
										
										
											2008-02-08 01:43:05 -05:00
										 |  |  |     gl-function-number | 
					
						
							|  |  |  |     [ gl-function-pointer ] 2curry swap
 | 
					
						
							| 
									
										
										
										
											2008-04-26 00:17:08 -04:00
										 |  |  |     ";" parse-tokens [ "()" subseq? not ] filter
 | 
					
						
							| 
									
										
										
										
											2009-03-21 02:27:50 -04:00
										 |  |  |     define-indirect ;
 |