ReactOS  0.4.14-dev-77-gd9e7c48
wingl.c
Go to the documentation of this file.
1 /*
2  * ReactOS Gdi32
3  * Copyright (C) 2003 ReactOS Team
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  *
19  *
20  *
21  *
22  */
23 
24 #include <precomp.h>
25 
26 #define NDEBUG
27 #include <debug.h>
28 
29 
30 
33 typedef BOOL (WINAPI *SWAPBUFFERS) (HDC hdc);
35 typedef int (WINAPI *GETPIXELFMT) (HDC);
36 
37 
43 
44 /*
45  OpenGL Handle.
46 */
48 
50  FARPROC *funcptr)
51 {
52  PVOID func;
53 
55  if (func != NULL)
56  {
58  func,
59  NULL);
60  return TRUE;
61  }
62 
63  return FALSE;
64 }
65 
66 static BOOL OpenGLEnable(void)
67 {
68  HMODULE hModOpengl32;
69  BOOL Ret = TRUE;
70 
71  hModOpengl32 = LoadLibraryW(L"OPENGL32.DLL");
72  if (hModOpengl32 == NULL)
73  return FALSE;
74 
76  (PVOID)hModOpengl32,
77  NULL) != NULL)
78  {
79  FreeLibrary(hModOpengl32);
80 
81  /* NOTE: Even though another thread was faster loading the
82  library we can't just bail out here. We really need
83  to *try* to locate every function. This is slow but
84  thread-safe */
85  }
86 
87  /* The cast is required on x64, because FARPROC has INT_PTR sized return */
88  if (!OpenGLInitFunction("wglChoosePixelFormat", (FARPROC*)&glChoosePixelFormat))
89  Ret = FALSE;
90 
91  if (!OpenGLInitFunction("wglSetPixelFormat", (FARPROC*)&glSetPixelFormat))
92  Ret = FALSE;
93 
94  if (!OpenGLInitFunction("wglSwapBuffers", (FARPROC*)&glSwapBuffers))
95  Ret = FALSE;
96 
97  if (!OpenGLInitFunction("wglDescribePixelFormat", (FARPROC*)&glDescribePixelFormat))
98  Ret = FALSE;
99 
100  if (!OpenGLInitFunction("wglGetPixelFormat", (FARPROC*)&glGetPixelFormat))
101  Ret = FALSE;
102 
103  return Ret;
104 }
105 
106 
107 
108 /*
109  * @implemented
110  */
111 INT
112 WINAPI
115 {
116  if (glChoosePixelFormat == NULL)
117  if (OpenGLEnable() == FALSE)
118  return(0);
119 
120  return(glChoosePixelFormat(hdc, ppfd));
121 }
122 
123 
124 
125 /*
126  * @implemented
127  */
128 INT
129 WINAPI
132  UINT nBytes,
134 {
136  if (OpenGLEnable() == FALSE)
137  return(0);
138 
139  return(glDescribePixelFormat(hdc, iPixelFormat, nBytes, ppfd));
140 }
141 
142 
143 
144 /*
145  * @implemented
146  */
147 INT
148 WINAPI
150 {
151  if (glGetPixelFormat == NULL)
152  if (OpenGLEnable() == FALSE)
153  return(0);
154 
155  return(glGetPixelFormat(hdc));
156 }
157 
158 
159 
160 /*
161  * @implemented
162  */
163 BOOL
164 WINAPI
168 {
169  /* Can only be set once */
171  if(current) return current == iPixelFormat ;
172 
173  if (glSetPixelFormat == NULL)
174  if (OpenGLEnable() == FALSE)
175  return(0);
176 
178 }
179 
180 
181 
182 /*
183  * @implemented
184  */
185 BOOL
186 WINAPI
188 {
189  if (glSwapBuffers == NULL)
190  if (OpenGLEnable() == FALSE)
191  return(0);
192 
193 
194  return(glSwapBuffers(hdc));
195 }
196 
197 
198 /*
199  Do this here for now.
200 */
201 
202 /* EOF */
GLenum func
Definition: glext.h:6028
static BOOL OpenGLInitFunction(PCSTR name, FARPROC *funcptr)
Definition: wingl.c:49
#define TRUE
Definition: types.h:120
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
static DESCRIBEPIXELFMT glDescribePixelFormat
Definition: wingl.c:41
struct tagPIXELFORMATDESCRIPTOR * LPPIXELFORMATDESCRIPTOR
int(WINAPI * DESCRIBEPIXELFMT)(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR)
Definition: wingl.c:34
static HDC
Definition: imagelist.c:92
_In_ LONG _In_ ULONG _Out_opt_ PIXELFORMATDESCRIPTOR * ppfd
Definition: winddi.h:3488
#define BOOL
Definition: nt_native.h:43
int32_t INT
Definition: typedefs.h:56
BOOL WINAPI SetPixelFormat(HDC hdc, INT iPixelFormat, CONST PIXELFORMATDESCRIPTOR *ppfd)
Definition: wingl.c:165
INT WINAPI ChoosePixelFormat(HDC hdc, CONST PIXELFORMATDESCRIPTOR *ppfd)
Definition: wingl.c:113
INT WINAPI DescribePixelFormat(HDC hdc, INT iPixelFormat, UINT nBytes, LPPIXELFORMATDESCRIPTOR ppfd)
Definition: wingl.c:130
BOOL(WINAPI * SETPIXELFMT)(HDC, int, CONST PIXELFORMATDESCRIPTOR *)
Definition: wingl.c:32
unsigned int BOOL
Definition: ntddk_ex.h:94
int(WINAPI * GETPIXELFMT)(HDC)
Definition: wingl.c:35
#define InterlockedCompareExchangePointer
Definition: interlocked.h:129
#define LoadLibraryW(x)
Definition: compat.h:404
smooth NULL
Definition: ftsmooth.c:416
void * PVOID
Definition: retypes.h:9
#define FreeLibrary(x)
Definition: compat.h:405
#define WINAPI
Definition: msvc.h:8
static SETPIXELFMT glSetPixelFormat
Definition: wingl.c:39
static GETPIXELFMT glGetPixelFormat
Definition: wingl.c:42
BOOL WINAPI SwapBuffers(HDC hdc)
Definition: wingl.c:187
static const WCHAR L[]
Definition: oid.c:1250
HDC hdc
Definition: main.c:9
HINSTANCE hOpenGL
Definition: wingl.c:47
static CHOOSEPIXELFMT glChoosePixelFormat
Definition: wingl.c:38
_In_ LONG iPixelFormat
Definition: winddi.h:3488
INT WINAPI GetPixelFormat(HDC hdc)
Definition: wingl.c:149
unsigned int UINT
Definition: ndis.h:50
Definition: name.c:36
static BOOL OpenGLEnable(void)
Definition: wingl.c:66
#define GetProcAddress(x, y)
Definition: compat.h:410
const char * PCSTR
Definition: typedefs.h:51
int(WINAPI * CHOOSEPIXELFMT)(HDC, CONST PIXELFORMATDESCRIPTOR *)
Definition: wingl.c:31
BOOL(WINAPI * SWAPBUFFERS)(HDC hdc)
Definition: wingl.c:33
#define CONST
Definition: pedump.c:81
int(* FARPROC)()
Definition: compat.h:28
struct task_struct * current
Definition: linux.c:32
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
static SWAPBUFFERS glSwapBuffers
Definition: wingl.c:40