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
							 |