1 ! Copyright (C) 2008 Joe Groff.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel namespaces make sequences splitting opengl.gl
4 continuations math.parser math arrays sets math.order ;
5 IN: opengl.capabilities
7 : (require-gl) ( thing require-quot make-error-quot -- )
10 [ swap " " make throw ]
13 : gl-extensions ( -- seq )
14 GL_EXTENSIONS glGetString " " split ;
15 : has-gl-extensions? ( extensions -- ? )
16 gl-extensions swap [ over member? ] all? nip ;
17 : (make-gl-extensions-error) ( required-extensions -- )
19 "Required OpenGL extensions not supported:\n" %
20 [ " " % % "\n" % ] each ;
21 : require-gl-extensions ( extensions -- )
22 [ has-gl-extensions? ]
23 [ (make-gl-extensions-error) ]
26 : version-seq ( version-string -- version-seq )
27 "." split [ string>number ] map ;
29 : version-before? ( version1 version2 -- ? )
30 swap version-seq swap version-seq before=? ;
32 : (gl-version) ( -- version vendor )
33 GL_VERSION glGetString " " split1 ;
34 : gl-version ( -- version )
36 : gl-vendor-version ( -- version )
38 : has-gl-version? ( version -- ? )
39 gl-version version-before? ;
40 : (make-gl-version-error) ( required-version -- )
41 "Required OpenGL version " % % " not supported (" % gl-version % " available)" % ;
42 : require-gl-version ( version -- )
44 [ (make-gl-version-error) ]
47 : (glsl-version) ( -- version vendor )
48 GL_SHADING_LANGUAGE_VERSION glGetString " " split1 ;
49 : glsl-version ( -- version )
51 : glsl-vendor-version ( -- version )
53 : has-glsl-version? ( version -- ? )
54 glsl-version version-before? ;
55 : require-glsl-version ( version -- )
57 [ "Required GLSL version " % % " not supported (" % glsl-version % " available)" % ]
60 : has-gl-version-or-extensions? ( version extensions -- ? )
61 has-gl-extensions? swap has-gl-version? or ;
63 : require-gl-version-or-extensions ( version extensions -- )
64 2array [ first2 has-gl-version-or-extensions? ] [
65 dup first (make-gl-version-error) "\n" %
66 second (make-gl-extensions-error) "\n" %