| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  | ! Copyright (C) 2008 Joe Groff. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2014-06-08 02:06:25 -04:00
										 |  |  | USING: arrays fry kernel make math.order math.parser opengl.gl | 
					
						
							|  |  |  | sequences sets splitting strings system ;
 | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  | IN: opengl.capabilities | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : (require-gl) ( thing require-quot make-error-quot -- )
 | 
					
						
							| 
									
										
										
										
											2008-12-22 06:41:01 -05:00
										 |  |  |     [ dupd call [ drop ] ] dip '[ _ " " make throw ] if ; inline
 | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-22 13:06:30 -04:00
										 |  |  | : (has-extension?) ( query-extension(s) available-extensions -- ? )
 | 
					
						
							|  |  |  |     over string?  [ member? ] [ [ member? ] curry any? ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  | : gl-extensions ( -- seq )
 | 
					
						
							|  |  |  |     GL_EXTENSIONS glGetString " " split ;
 | 
					
						
							|  |  |  | : has-gl-extensions? ( extensions -- ? )
 | 
					
						
							| 
									
										
										
										
											2009-07-22 13:06:30 -04:00
										 |  |  |     gl-extensions [ (has-extension?) ] curry all? ;
 | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  | : (make-gl-extensions-error) ( required-extensions -- )
 | 
					
						
							| 
									
										
										
										
											2008-04-26 03:01:43 -04:00
										 |  |  |     gl-extensions diff | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  |     "Required OpenGL extensions not supported:\n" % | 
					
						
							|  |  |  |     [ "    " % % "\n" % ] each ;
 | 
					
						
							|  |  |  | : require-gl-extensions ( extensions -- )
 | 
					
						
							|  |  |  |     [ has-gl-extensions? ] | 
					
						
							|  |  |  |     [ (make-gl-extensions-error) ] | 
					
						
							|  |  |  |     (require-gl) ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : version-seq ( version-string -- version-seq )
 | 
					
						
							|  |  |  |     "." split [ string>number ] map ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-26 18:33:48 -05:00
										 |  |  | : version-before? ( version1 version2 -- ? )
 | 
					
						
							| 
									
										
										
										
											2011-10-26 16:01:04 -04:00
										 |  |  |     [ version-seq ] bi@ before=? ;
 | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-08 21:14:20 -04:00
										 |  |  | : (gl-version) ( -- version1 version2 )
 | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  |     GL_VERSION glGetString " " split1 ;
 | 
					
						
							| 
									
										
										
										
											2014-06-08 21:14:20 -04:00
										 |  |  | : gl-version ( -- version ) (gl-version) drop ;
 | 
					
						
							|  |  |  | : gl-vendor-version ( -- version ) (gl-version) nip ;
 | 
					
						
							|  |  |  | : gl-vendor ( -- vendor ) GL_VENDOR glGetString ;
 | 
					
						
							| 
									
										
										
										
											2014-06-08 00:22:29 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  | : has-gl-version? ( version -- ? )
 | 
					
						
							| 
									
										
										
										
											2014-06-08 00:22:29 -04:00
										 |  |  |     gl-version [ version-before? ] [ drop f ] if* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  | : (make-gl-version-error) ( required-version -- )
 | 
					
						
							| 
									
										
										
										
											2014-06-08 02:06:25 -04:00
										 |  |  |     "Required OpenGL version " % % " not supported (" % gl-version "(null)" or % " available)" % | 
					
						
							|  |  |  |     os linux = [ | 
					
						
							|  |  |  |         "\nIf you have several libGL.so installed, Factor tried the first one in: ldconfig -p | grep libGL.so$" % | 
					
						
							| 
									
										
										
										
											2015-04-09 16:05:20 -04:00
										 |  |  |         "\nYou can change the library used like so: LD_LIBRARY_PATH=/usr/lib/fglrx/ ./factor" % | 
					
						
							| 
									
										
										
										
											2014-06-08 02:06:25 -04:00
										 |  |  |     ] when ;
 | 
					
						
							| 
									
										
										
										
											2014-06-08 00:22:29 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  | : require-gl-version ( version -- )
 | 
					
						
							|  |  |  |     [ has-gl-version? ] | 
					
						
							|  |  |  |     [ (make-gl-version-error) ] | 
					
						
							|  |  |  |     (require-gl) ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : (glsl-version) ( -- version vendor )
 | 
					
						
							|  |  |  |     GL_SHADING_LANGUAGE_VERSION glGetString " " split1 ;
 | 
					
						
							| 
									
										
										
										
											2014-06-08 21:14:20 -04:00
										 |  |  | : glsl-version ( -- version ) (glsl-version) drop ;
 | 
					
						
							|  |  |  | : glsl-vendor-version ( -- version ) (glsl-version) nip ;
 | 
					
						
							| 
									
										
										
										
											2014-06-08 00:22:29 -04:00
										 |  |  | : has-glsl-version? ( version -- ? ) glsl-version version-before? ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  | : require-glsl-version ( version -- )
 | 
					
						
							|  |  |  |     [ has-glsl-version? ] | 
					
						
							| 
									
										
										
										
											2014-06-08 00:22:29 -04:00
										 |  |  |     [ "Required GLSL version " % % " not supported (" % glsl-version "(null)" or % " available)" % ] | 
					
						
							| 
									
										
										
										
											2008-02-03 18:59:47 -05:00
										 |  |  |     (require-gl) ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : has-gl-version-or-extensions? ( version extensions -- ? )
 | 
					
						
							|  |  |  |     has-gl-extensions? swap has-gl-version? or ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : require-gl-version-or-extensions ( version extensions -- )
 | 
					
						
							|  |  |  |     2array [ first2 has-gl-version-or-extensions? ] [ | 
					
						
							|  |  |  |         dup first (make-gl-version-error) "\n" % | 
					
						
							|  |  |  |         second (make-gl-extensions-error) "\n" % | 
					
						
							|  |  |  |     ] (require-gl) ;
 |