]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/windows/opengl32/opengl32.factor
use radix literals
[factor.git] / basis / windows / opengl32 / opengl32.factor
old mode 100755 (executable)
new mode 100644 (file)
index 63384e8..642b834
@@ -1,91 +1,45 @@
 ! Copyright (C) 2005, 2006 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien alien.c-types alien.syntax parser namespaces kernel
-math math.bitwise windows.types windows.types init assocs
-sequences libc ;
+math math.bitwise windows.types init assocs splitting
+sequences libc opengl.gl opengl.gl.extensions opengl.gl.windows ;
 IN: windows.opengl32
 
-! PIXELFORMATDESCRIPTOR flags
-: PFD_DOUBLEBUFFER            HEX: 00000001 ; inline
-: PFD_STEREO                  HEX: 00000002 ; inline
-: PFD_DRAW_TO_WINDOW          HEX: 00000004 ; inline
-: PFD_DRAW_TO_BITMAP          HEX: 00000008 ; inline
-: PFD_SUPPORT_GDI             HEX: 00000010 ; inline
-: PFD_SUPPORT_OPENGL          HEX: 00000020 ; inline
-: PFD_GENERIC_FORMAT          HEX: 00000040 ; inline
-: PFD_NEED_PALETTE            HEX: 00000080 ; inline
-: PFD_NEED_SYSTEM_PALETTE     HEX: 00000100 ; inline
-: PFD_SWAP_EXCHANGE           HEX: 00000200 ; inline
-: PFD_SWAP_COPY               HEX: 00000400 ; inline
-: PFD_SWAP_LAYER_BUFFERS      HEX: 00000800 ; inline
-: PFD_GENERIC_ACCELERATED     HEX: 00001000 ; inline
-: PFD_SUPPORT_DIRECTDRAW      HEX: 00002000 ; inline
-
-! PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only
-: PFD_DEPTH_DONTCARE          HEX: 20000000 ; inline
-: PFD_DOUBLEBUFFER_DONTCARE   HEX: 40000000 ; inline
-: PFD_STEREO_DONTCARE         HEX: 80000000 ; inline
-
-! pixel types
-: PFD_TYPE_RGBA        0 ; inline
-: PFD_TYPE_COLORINDEX  1 ; inline
-! layer types
-: PFD_MAIN_PLANE       0 ; inline
-: PFD_OVERLAY_PLANE    1 ; inline
-: PFD_UNDERLAY_PLANE   -1 ; inline
-
-: LPD_TYPE_RGBA        0 ; inline
-: LPD_TYPE_COLORINDEX  1 ; inline
+CONSTANT: LPD_TYPE_RGBA        0
+CONSTANT: LPD_TYPE_COLORINDEX  1
 
 ! wglSwapLayerBuffers flags
-: WGL_SWAP_MAIN_PLANE     HEX: 00000001 ; inline
-: WGL_SWAP_OVERLAY1       HEX: 00000002 ; inline
-: WGL_SWAP_OVERLAY2       HEX: 00000004 ; inline
-: WGL_SWAP_OVERLAY3       HEX: 00000008 ; inline
-: WGL_SWAP_OVERLAY4       HEX: 00000010 ; inline
-: WGL_SWAP_OVERLAY5       HEX: 00000020 ; inline
-: WGL_SWAP_OVERLAY6       HEX: 00000040 ; inline
-: WGL_SWAP_OVERLAY7       HEX: 00000080 ; inline
-: WGL_SWAP_OVERLAY8       HEX: 00000100 ; inline
-: WGL_SWAP_OVERLAY9       HEX: 00000200 ; inline
-: WGL_SWAP_OVERLAY10      HEX: 00000400 ; inline
-: WGL_SWAP_OVERLAY11      HEX: 00000800 ; inline
-: WGL_SWAP_OVERLAY12      HEX: 00001000 ; inline
-: WGL_SWAP_OVERLAY13      HEX: 00002000 ; inline
-: WGL_SWAP_OVERLAY14      HEX: 00004000 ; inline
-: WGL_SWAP_OVERLAY15      HEX: 00008000 ; inline
-: WGL_SWAP_UNDERLAY1      HEX: 00010000 ; inline
-: WGL_SWAP_UNDERLAY2      HEX: 00020000 ; inline
-: WGL_SWAP_UNDERLAY3      HEX: 00040000 ; inline
-: WGL_SWAP_UNDERLAY4      HEX: 00080000 ; inline
-: WGL_SWAP_UNDERLAY5      HEX: 00100000 ; inline
-: WGL_SWAP_UNDERLAY6      HEX: 00200000 ; inline
-: WGL_SWAP_UNDERLAY7      HEX: 00400000 ; inline
-: WGL_SWAP_UNDERLAY8      HEX: 00800000 ; inline
-: WGL_SWAP_UNDERLAY9      HEX: 01000000 ; inline
-: WGL_SWAP_UNDERLAY10     HEX: 02000000 ; inline
-: WGL_SWAP_UNDERLAY11     HEX: 04000000 ; inline
-: WGL_SWAP_UNDERLAY12     HEX: 08000000 ; inline
-: WGL_SWAP_UNDERLAY13     HEX: 10000000 ; inline
-: WGL_SWAP_UNDERLAY14     HEX: 20000000 ; inline
-: WGL_SWAP_UNDERLAY15     HEX: 40000000 ; inline
-
-: windowed-pfd-dwFlags ( -- n )
-    { PFD_DRAW_TO_WINDOW PFD_SUPPORT_OPENGL PFD_DOUBLEBUFFER } flags ;
-: offscreen-pfd-dwFlags ( -- n )
-    { PFD_DRAW_TO_BITMAP PFD_SUPPORT_OPENGL } flags ;
-
-! TODO: compare to http://www.nullterminator.net/opengl32.html
-: make-pfd ( flags bits -- pfd )
-    "PIXELFORMATDESCRIPTOR" <c-object>
-    "PIXELFORMATDESCRIPTOR" heap-size over set-PIXELFORMATDESCRIPTOR-nSize
-    1 over set-PIXELFORMATDESCRIPTOR-nVersion
-    rot over set-PIXELFORMATDESCRIPTOR-dwFlags
-    PFD_TYPE_RGBA over set-PIXELFORMATDESCRIPTOR-iPixelType
-    [ set-PIXELFORMATDESCRIPTOR-cColorBits ] keep
-    16 over set-PIXELFORMATDESCRIPTOR-cDepthBits
-    PFD_MAIN_PLANE over set-PIXELFORMATDESCRIPTOR-dwLayerMask ;
+CONSTANT: WGL_SWAP_MAIN_PLANE     0x00000001
+CONSTANT: WGL_SWAP_OVERLAY1       0x00000002
+CONSTANT: WGL_SWAP_OVERLAY2       0x00000004
+CONSTANT: WGL_SWAP_OVERLAY3       0x00000008
+CONSTANT: WGL_SWAP_OVERLAY4       0x00000010
+CONSTANT: WGL_SWAP_OVERLAY5       0x00000020
+CONSTANT: WGL_SWAP_OVERLAY6       0x00000040
+CONSTANT: WGL_SWAP_OVERLAY7       0x00000080
+CONSTANT: WGL_SWAP_OVERLAY8       0x00000100
+CONSTANT: WGL_SWAP_OVERLAY9       0x00000200
+CONSTANT: WGL_SWAP_OVERLAY10      0x00000400
+CONSTANT: WGL_SWAP_OVERLAY11      0x00000800
+CONSTANT: WGL_SWAP_OVERLAY12      0x00001000
+CONSTANT: WGL_SWAP_OVERLAY13      0x00002000
+CONSTANT: WGL_SWAP_OVERLAY14      0x00004000
+CONSTANT: WGL_SWAP_OVERLAY15      0x00008000
+CONSTANT: WGL_SWAP_UNDERLAY1      0x00010000
+CONSTANT: WGL_SWAP_UNDERLAY2      0x00020000
+CONSTANT: WGL_SWAP_UNDERLAY3      0x00040000
+CONSTANT: WGL_SWAP_UNDERLAY4      0x00080000
+CONSTANT: WGL_SWAP_UNDERLAY5      0x00100000
+CONSTANT: WGL_SWAP_UNDERLAY6      0x00200000
+CONSTANT: WGL_SWAP_UNDERLAY7      0x00400000
+CONSTANT: WGL_SWAP_UNDERLAY8      0x00800000
+CONSTANT: WGL_SWAP_UNDERLAY9      0x01000000
+CONSTANT: WGL_SWAP_UNDERLAY10     0x02000000
+CONSTANT: WGL_SWAP_UNDERLAY11     0x04000000
+CONSTANT: WGL_SWAP_UNDERLAY12     0x08000000
+CONSTANT: WGL_SWAP_UNDERLAY13     0x10000000
+CONSTANT: WGL_SWAP_UNDERLAY14     0x20000000
+CONSTANT: WGL_SWAP_UNDERLAY15     0x40000000
 
 
 LIBRARY: gl
@@ -100,5 +54,112 @@ LIBRARY: gl
 FUNCTION: HGLRC wglCreateContext ( HDC hDC ) ;
 FUNCTION: BOOL wglDeleteContext ( HGLRC hRC ) ;
 FUNCTION: BOOL wglMakeCurrent ( HDC hDC, HGLRC hglrc ) ;
-FUNCTION: HGLRC wglGetCurrentContext ( ) ;
-FUNCTION: void* wglGetProcAddress ( char* name ) ;
+
+! WGL_ARB_extensions_string extension
+
+GL-FUNCTION: c-string wglGetExtensionsStringARB { } ( HDC hDC ) ;
+
+! WGL_ARB_pixel_format extension
+
+CONSTANT: WGL_NUMBER_PIXEL_FORMATS_ARB    0x2000
+CONSTANT: WGL_DRAW_TO_WINDOW_ARB          0x2001
+CONSTANT: WGL_DRAW_TO_BITMAP_ARB          0x2002
+CONSTANT: WGL_ACCELERATION_ARB            0x2003
+CONSTANT: WGL_NEED_PALETTE_ARB            0x2004
+CONSTANT: WGL_NEED_SYSTEM_PALETTE_ARB     0x2005
+CONSTANT: WGL_SWAP_LAYER_BUFFERS_ARB      0x2006
+CONSTANT: WGL_SWAP_METHOD_ARB             0x2007
+CONSTANT: WGL_NUMBER_OVERLAYS_ARB         0x2008
+CONSTANT: WGL_NUMBER_UNDERLAYS_ARB        0x2009
+CONSTANT: WGL_TRANSPARENT_ARB             0x200A
+CONSTANT: WGL_TRANSPARENT_RED_VALUE_ARB   0x2037
+CONSTANT: WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
+CONSTANT: WGL_TRANSPARENT_BLUE_VALUE_ARB  0x2039
+CONSTANT: WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
+CONSTANT: WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
+CONSTANT: WGL_SHARE_DEPTH_ARB             0x200C
+CONSTANT: WGL_SHARE_STENCIL_ARB           0x200D
+CONSTANT: WGL_SHARE_ACCUM_ARB             0x200E
+CONSTANT: WGL_SUPPORT_GDI_ARB             0x200F
+CONSTANT: WGL_SUPPORT_OPENGL_ARB          0x2010
+CONSTANT: WGL_DOUBLE_BUFFER_ARB           0x2011
+CONSTANT: WGL_STEREO_ARB                  0x2012
+CONSTANT: WGL_PIXEL_TYPE_ARB              0x2013
+CONSTANT: WGL_COLOR_BITS_ARB              0x2014
+CONSTANT: WGL_RED_BITS_ARB                0x2015
+CONSTANT: WGL_RED_SHIFT_ARB               0x2016
+CONSTANT: WGL_GREEN_BITS_ARB              0x2017
+CONSTANT: WGL_GREEN_SHIFT_ARB             0x2018
+CONSTANT: WGL_BLUE_BITS_ARB               0x2019
+CONSTANT: WGL_BLUE_SHIFT_ARB              0x201A
+CONSTANT: WGL_ALPHA_BITS_ARB              0x201B
+CONSTANT: WGL_ALPHA_SHIFT_ARB             0x201C
+CONSTANT: WGL_ACCUM_BITS_ARB              0x201D
+CONSTANT: WGL_ACCUM_RED_BITS_ARB          0x201E
+CONSTANT: WGL_ACCUM_GREEN_BITS_ARB        0x201F
+CONSTANT: WGL_ACCUM_BLUE_BITS_ARB         0x2020
+CONSTANT: WGL_ACCUM_ALPHA_BITS_ARB        0x2021
+CONSTANT: WGL_DEPTH_BITS_ARB              0x2022
+CONSTANT: WGL_STENCIL_BITS_ARB            0x2023
+CONSTANT: WGL_AUX_BUFFERS_ARB             0x2024
+
+CONSTANT: WGL_NO_ACCELERATION_ARB         0x2025
+CONSTANT: WGL_GENERIC_ACCELERATION_ARB    0x2026
+CONSTANT: WGL_FULL_ACCELERATION_ARB       0x2027
+
+CONSTANT: WGL_SWAP_EXCHANGE_ARB           0x2028
+CONSTANT: WGL_SWAP_COPY_ARB               0x2029
+CONSTANT: WGL_SWAP_UNDEFINED_ARB          0x202A
+
+CONSTANT: WGL_TYPE_RGBA_ARB               0x202B
+CONSTANT: WGL_TYPE_COLORINDEX_ARB         0x202C
+
+GL-FUNCTION: BOOL wglGetPixelFormatAttribivARB { } (
+        HDC hdc,
+        int iPixelFormat,
+        int iLayerPlane,
+        UINT nAttributes,
+        int* piAttributes,
+        int* piValues
+    ) ;
+
+GL-FUNCTION: BOOL wglGetPixelFormatAttribfvARB { } (
+        HDC hdc,
+        int iPixelFormat,
+        int iLayerPlane,
+        UINT nAttributes,
+        int* piAttributes,
+        FLOAT* pfValues
+    ) ;
+
+GL-FUNCTION: BOOL wglChoosePixelFormatARB { } (
+        HDC hdc,
+        int* piAttribIList,
+        FLOAT* pfAttribFList,
+        UINT nMaxFormats,
+        int* piFormats,
+        UINT* nNumFormats
+    ) ;
+
+! WGL_ARB_multisample extension
+
+CONSTANT: WGL_SAMPLE_BUFFERS_ARB 0x2041
+CONSTANT: WGL_SAMPLES_ARB        0x2042
+
+! WGL_ARB_pixel_format_float extension
+
+CONSTANT: WGL_TYPE_RGBA_FLOAT_ARB 0x21A0
+
+! wgl extensions querying
+
+: has-wglGetExtensionsStringARB? ( -- ? )
+    "wglGetExtensionsStringARB" wglGetProcAddress >boolean ;
+
+: wgl-extensions ( hdc -- extensions )
+    has-wglGetExtensionsStringARB? [ wglGetExtensionsStringARB " " split ] [ drop { } ] if ;
+
+: has-wgl-extensions? ( hdc extensions -- ? )
+    swap wgl-extensions [ member? ] curry all? ;
+
+: has-wgl-pixel-format-extension? ( hdc -- ? )
+    { "WGL_ARB_pixel_format" } has-wgl-extensions? ;