]> gitweb.factorcode.org Git - factor.git/blob - basis/windows/opengl32/opengl32.factor
Merge branch 'master' into irc
[factor.git] / basis / windows / opengl32 / opengl32.factor
1 ! Copyright (C) 2005, 2006 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.syntax parser namespaces kernel
4 math math.bitwise windows.types init assocs splitting
5 sequences libc opengl.gl opengl.gl.extensions opengl.gl.windows ;
6 IN: windows.opengl32
7
8 ! PIXELFORMATDESCRIPTOR flags
9 CONSTANT: PFD_DOUBLEBUFFER            HEX: 00000001
10 CONSTANT: PFD_STEREO                  HEX: 00000002
11 CONSTANT: PFD_DRAW_TO_WINDOW          HEX: 00000004
12 CONSTANT: PFD_DRAW_TO_BITMAP          HEX: 00000008
13 CONSTANT: PFD_SUPPORT_GDI             HEX: 00000010
14 CONSTANT: PFD_SUPPORT_OPENGL          HEX: 00000020
15 CONSTANT: PFD_GENERIC_FORMAT          HEX: 00000040
16 CONSTANT: PFD_NEED_PALETTE            HEX: 00000080
17 CONSTANT: PFD_NEED_SYSTEM_PALETTE     HEX: 00000100
18 CONSTANT: PFD_SWAP_EXCHANGE           HEX: 00000200
19 CONSTANT: PFD_SWAP_COPY               HEX: 00000400
20 CONSTANT: PFD_SWAP_LAYER_BUFFERS      HEX: 00000800
21 CONSTANT: PFD_GENERIC_ACCELERATED     HEX: 00001000
22 CONSTANT: PFD_SUPPORT_DIRECTDRAW      HEX: 00002000
23
24 ! PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only
25 CONSTANT: PFD_DEPTH_DONTCARE          HEX: 20000000
26 CONSTANT: PFD_DOUBLEBUFFER_DONTCARE   HEX: 40000000
27 CONSTANT: PFD_STEREO_DONTCARE         HEX: 80000000
28
29 ! pixel types
30 CONSTANT: PFD_TYPE_RGBA        0
31 CONSTANT: PFD_TYPE_COLORINDEX  1
32  
33 ! layer types
34 CONSTANT: PFD_MAIN_PLANE       0
35 CONSTANT: PFD_OVERLAY_PLANE    1
36 CONSTANT: PFD_UNDERLAY_PLANE   -1
37
38 CONSTANT: LPD_TYPE_RGBA        0
39 CONSTANT: LPD_TYPE_COLORINDEX  1
40
41 ! wglSwapLayerBuffers flags
42 CONSTANT: WGL_SWAP_MAIN_PLANE     HEX: 00000001
43 CONSTANT: WGL_SWAP_OVERLAY1       HEX: 00000002
44 CONSTANT: WGL_SWAP_OVERLAY2       HEX: 00000004
45 CONSTANT: WGL_SWAP_OVERLAY3       HEX: 00000008
46 CONSTANT: WGL_SWAP_OVERLAY4       HEX: 00000010
47 CONSTANT: WGL_SWAP_OVERLAY5       HEX: 00000020
48 CONSTANT: WGL_SWAP_OVERLAY6       HEX: 00000040
49 CONSTANT: WGL_SWAP_OVERLAY7       HEX: 00000080
50 CONSTANT: WGL_SWAP_OVERLAY8       HEX: 00000100
51 CONSTANT: WGL_SWAP_OVERLAY9       HEX: 00000200
52 CONSTANT: WGL_SWAP_OVERLAY10      HEX: 00000400
53 CONSTANT: WGL_SWAP_OVERLAY11      HEX: 00000800
54 CONSTANT: WGL_SWAP_OVERLAY12      HEX: 00001000
55 CONSTANT: WGL_SWAP_OVERLAY13      HEX: 00002000
56 CONSTANT: WGL_SWAP_OVERLAY14      HEX: 00004000
57 CONSTANT: WGL_SWAP_OVERLAY15      HEX: 00008000
58 CONSTANT: WGL_SWAP_UNDERLAY1      HEX: 00010000
59 CONSTANT: WGL_SWAP_UNDERLAY2      HEX: 00020000
60 CONSTANT: WGL_SWAP_UNDERLAY3      HEX: 00040000
61 CONSTANT: WGL_SWAP_UNDERLAY4      HEX: 00080000
62 CONSTANT: WGL_SWAP_UNDERLAY5      HEX: 00100000
63 CONSTANT: WGL_SWAP_UNDERLAY6      HEX: 00200000
64 CONSTANT: WGL_SWAP_UNDERLAY7      HEX: 00400000
65 CONSTANT: WGL_SWAP_UNDERLAY8      HEX: 00800000
66 CONSTANT: WGL_SWAP_UNDERLAY9      HEX: 01000000
67 CONSTANT: WGL_SWAP_UNDERLAY10     HEX: 02000000
68 CONSTANT: WGL_SWAP_UNDERLAY11     HEX: 04000000
69 CONSTANT: WGL_SWAP_UNDERLAY12     HEX: 08000000
70 CONSTANT: WGL_SWAP_UNDERLAY13     HEX: 10000000
71 CONSTANT: WGL_SWAP_UNDERLAY14     HEX: 20000000
72 CONSTANT: WGL_SWAP_UNDERLAY15     HEX: 40000000
73
74
75 LIBRARY: gl
76
77
78 ! FUNCTION: int ReleaseDC ( HWND hWnd, HDC hDC ) ;
79 ! FUNCTION: HDC ResetDC ( HDC hdc, DEVMODE* lpInitData ) ;
80 ! FUNCTION: BOOL RestoreDC ( HDC hdc, int nSavedDC ) ;
81 ! FUNCTION: int SaveDC( HDC hDC ) ;
82 ! FUNCTION: HGDIOBJ SelectObject ( HDC hDC, HGDIOBJ hgdiobj ) ;
83
84 FUNCTION: HGLRC wglCreateContext ( HDC hDC ) ;
85 FUNCTION: BOOL wglDeleteContext ( HGLRC hRC ) ;
86 FUNCTION: BOOL wglMakeCurrent ( HDC hDC, HGLRC hglrc ) ;
87
88 ! WGL_ARB_extensions_string extension
89
90 GL-FUNCTION: char* wglGetExtensionsStringARB { } ( HDC hDC ) ;
91
92 ! WGL_ARB_pixel_format extension
93
94 CONSTANT: WGL_NUMBER_PIXEL_FORMATS_ARB    HEX: 2000
95 CONSTANT: WGL_DRAW_TO_WINDOW_ARB          HEX: 2001
96 CONSTANT: WGL_DRAW_TO_BITMAP_ARB          HEX: 2002
97 CONSTANT: WGL_ACCELERATION_ARB            HEX: 2003
98 CONSTANT: WGL_NEED_PALETTE_ARB            HEX: 2004
99 CONSTANT: WGL_NEED_SYSTEM_PALETTE_ARB     HEX: 2005
100 CONSTANT: WGL_SWAP_LAYER_BUFFERS_ARB      HEX: 2006
101 CONSTANT: WGL_SWAP_METHOD_ARB             HEX: 2007
102 CONSTANT: WGL_NUMBER_OVERLAYS_ARB         HEX: 2008
103 CONSTANT: WGL_NUMBER_UNDERLAYS_ARB        HEX: 2009
104 CONSTANT: WGL_TRANSPARENT_ARB             HEX: 200A
105 CONSTANT: WGL_TRANSPARENT_RED_VALUE_ARB   HEX: 2037
106 CONSTANT: WGL_TRANSPARENT_GREEN_VALUE_ARB HEX: 2038
107 CONSTANT: WGL_TRANSPARENT_BLUE_VALUE_ARB  HEX: 2039
108 CONSTANT: WGL_TRANSPARENT_ALPHA_VALUE_ARB HEX: 203A
109 CONSTANT: WGL_TRANSPARENT_INDEX_VALUE_ARB HEX: 203B
110 CONSTANT: WGL_SHARE_DEPTH_ARB             HEX: 200C
111 CONSTANT: WGL_SHARE_STENCIL_ARB           HEX: 200D
112 CONSTANT: WGL_SHARE_ACCUM_ARB             HEX: 200E
113 CONSTANT: WGL_SUPPORT_GDI_ARB             HEX: 200F
114 CONSTANT: WGL_SUPPORT_OPENGL_ARB          HEX: 2010
115 CONSTANT: WGL_DOUBLE_BUFFER_ARB           HEX: 2011
116 CONSTANT: WGL_STEREO_ARB                  HEX: 2012
117 CONSTANT: WGL_PIXEL_TYPE_ARB              HEX: 2013
118 CONSTANT: WGL_COLOR_BITS_ARB              HEX: 2014
119 CONSTANT: WGL_RED_BITS_ARB                HEX: 2015
120 CONSTANT: WGL_RED_SHIFT_ARB               HEX: 2016
121 CONSTANT: WGL_GREEN_BITS_ARB              HEX: 2017
122 CONSTANT: WGL_GREEN_SHIFT_ARB             HEX: 2018
123 CONSTANT: WGL_BLUE_BITS_ARB               HEX: 2019
124 CONSTANT: WGL_BLUE_SHIFT_ARB              HEX: 201A
125 CONSTANT: WGL_ALPHA_BITS_ARB              HEX: 201B
126 CONSTANT: WGL_ALPHA_SHIFT_ARB             HEX: 201C
127 CONSTANT: WGL_ACCUM_BITS_ARB              HEX: 201D
128 CONSTANT: WGL_ACCUM_RED_BITS_ARB          HEX: 201E
129 CONSTANT: WGL_ACCUM_GREEN_BITS_ARB        HEX: 201F
130 CONSTANT: WGL_ACCUM_BLUE_BITS_ARB         HEX: 2020
131 CONSTANT: WGL_ACCUM_ALPHA_BITS_ARB        HEX: 2021
132 CONSTANT: WGL_DEPTH_BITS_ARB              HEX: 2022
133 CONSTANT: WGL_STENCIL_BITS_ARB            HEX: 2023
134 CONSTANT: WGL_AUX_BUFFERS_ARB             HEX: 2024
135
136 CONSTANT: WGL_NO_ACCELERATION_ARB         HEX: 2025
137 CONSTANT: WGL_GENERIC_ACCELERATION_ARB    HEX: 2026
138 CONSTANT: WGL_FULL_ACCELERATION_ARB       HEX: 2027
139
140 CONSTANT: WGL_SWAP_EXCHANGE_ARB           HEX: 2028
141 CONSTANT: WGL_SWAP_COPY_ARB               HEX: 2029
142 CONSTANT: WGL_SWAP_UNDEFINED_ARB          HEX: 202A
143
144 CONSTANT: WGL_TYPE_RGBA_ARB               HEX: 202B
145 CONSTANT: WGL_TYPE_COLORINDEX_ARB         HEX: 202C
146
147 GL-FUNCTION: BOOL wglGetPixelFormatAttribivARB { } (
148         HDC hdc,
149         int iPixelFormat,
150         int iLayerPlane,
151         UINT nAttributes,
152         int* piAttributes,
153         int* piValues
154     ) ;
155
156 GL-FUNCTION: BOOL wglGetPixelFormatAttribfvARB { } (
157         HDC hdc,
158         int iPixelFormat,
159         int iLayerPlane,
160         UINT nAttributes,
161         int* piAttributes,
162         FLOAT* pfValues
163     ) ;
164
165 GL-FUNCTION: BOOL wglChoosePixelFormatARB { } (
166         HDC hdc,
167         int* piAttribIList,
168         FLOAT* pfAttribFList,
169         UINT nMaxFormats,
170         int* piFormats,
171         UINT* nNumFormats
172     ) ;
173
174 ! WGL_ARB_multisample extension
175
176 CONSTANT: WGL_SAMPLE_BUFFERS_ARB HEX: 2041
177 CONSTANT: WGL_SAMPLES_ARB        HEX: 2042
178
179 ! WGL_ARB_pixel_format_float extension
180
181 CONSTANT: WGL_TYPE_RGBA_FLOAT_ARB HEX: 21A0
182
183 ! wgl extensions querying
184
185 : has-wglGetExtensionsStringARB? ( -- ? )
186     "wglGetExtensionsStringARB" wglGetProcAddress >boolean ;
187
188 : wgl-extensions ( hdc -- extensions )
189     has-wglGetExtensionsStringARB? [ wglGetExtensionsStringARB " " split ] [ drop { } ] if ;
190
191 : has-wgl-extensions? ( hdc extensions -- ? )
192     swap wgl-extensions [ member? ] curry all? ;
193
194 : has-wgl-pixel-format-extension? ( hdc -- ? )
195     { "WGL_ARB_pixel_format" } has-wgl-extensions? ;