67 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
! Copyright (C) 2008 Joe Groff.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: kernel namespaces make sequences splitting opengl.gl
 | 
						|
continuations math.parser math arrays sets math.order fry ;
 | 
						|
IN: opengl.capabilities
 | 
						|
 | 
						|
: (require-gl) ( thing require-quot make-error-quot -- )
 | 
						|
    [ dupd call [ drop ] ] dip '[ _ " " make throw ] if ; inline
 | 
						|
 | 
						|
: gl-extensions ( -- seq )
 | 
						|
    GL_EXTENSIONS glGetString " " split ;
 | 
						|
: has-gl-extensions? ( extensions -- ? )
 | 
						|
    gl-extensions swap [ over member? ] all? nip ;
 | 
						|
: (make-gl-extensions-error) ( required-extensions -- )
 | 
						|
    gl-extensions diff
 | 
						|
    "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 ;
 | 
						|
 | 
						|
: version-before? ( version1 version2 -- ? )
 | 
						|
    swap version-seq swap version-seq before=? ;
 | 
						|
 | 
						|
: (gl-version) ( -- version vendor )
 | 
						|
    GL_VERSION glGetString " " split1 ;
 | 
						|
: gl-version ( -- version )
 | 
						|
    (gl-version) drop ;
 | 
						|
: gl-vendor-version ( -- version )
 | 
						|
    (gl-version) nip ;
 | 
						|
: gl-vendor ( -- name )
 | 
						|
    GL_VENDOR glGetString ;
 | 
						|
: has-gl-version? ( version -- ? )
 | 
						|
    gl-version version-before? ;
 | 
						|
: (make-gl-version-error) ( required-version -- )
 | 
						|
    "Required OpenGL version " % % " not supported (" % gl-version % " available)" % ;
 | 
						|
: require-gl-version ( version -- )
 | 
						|
    [ has-gl-version? ]
 | 
						|
    [ (make-gl-version-error) ]
 | 
						|
    (require-gl) ;
 | 
						|
 | 
						|
: (glsl-version) ( -- version vendor )
 | 
						|
    GL_SHADING_LANGUAGE_VERSION glGetString " " split1 ;
 | 
						|
: glsl-version ( -- version )
 | 
						|
    (glsl-version) drop ;
 | 
						|
: glsl-vendor-version ( -- version )
 | 
						|
    (glsl-version) nip ;
 | 
						|
: has-glsl-version? ( version -- ? )
 | 
						|
    glsl-version version-before? ;
 | 
						|
: require-glsl-version ( version -- )
 | 
						|
    [ has-glsl-version? ]
 | 
						|
    [ "Required GLSL version " % % " not supported (" % glsl-version % " available)" % ]
 | 
						|
    (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) ;
 |