icculus quake2 doxygen  1.0 dev
glw_imp.c File Reference
#include <assert.h>
#include <windows.h>
#include "../ref_gl/gl_local.h"
#include "glw_win.h"
#include "winquake.h"

Go to the source code of this file.

Macros

#define WINDOW_CLASS_NAME   "Quake 2"
 
#define OSR2_BUILD_NUMBER   1111
 

Functions

static qboolean GLimp_SwitchFullscreen (int width, int height)
 
qboolean GLimp_InitGL (void)
 
static qboolean VerifyDriver (void)
 
qboolean VID_CreateWindow (int width, int height, qboolean fullscreen)
 
rserr_t GLimp_SetMode (int *pwidth, int *pheight, int mode, qboolean fullscreen)
 
void GLimp_Shutdown (void)
 
qboolean GLimp_Init (void *hinstance, void *wndproc)
 
void GLimp_BeginFrame (float camera_separation)
 
void GLimp_EndFrame (void)
 
void GLimp_AppActivate (qboolean active)
 

Variables

glwstate_t glw_state
 
cvar_tvid_fullscreen
 
cvar_tvid_ref
 

Macro Definition Documentation

◆ OSR2_BUILD_NUMBER

#define OSR2_BUILD_NUMBER   1111

◆ WINDOW_CLASS_NAME

#define WINDOW_CLASS_NAME   "Quake 2"

Definition at line 62 of file glw_imp.c.

Function Documentation

◆ GLimp_AppActivate()

void GLimp_AppActivate ( qboolean  active)

Definition at line 604 of file glw_imp.c.

605 {
606  if ( active )
607  {
608  SetForegroundWindow( glw_state.hWnd );
609  ShowWindow( glw_state.hWnd, SW_RESTORE );
610  }
611  else
612  {
613  if ( vid_fullscreen->value )
614  ShowWindow( glw_state.hWnd, SW_MINIMIZE );
615  }
616 }

Referenced by GetRefAPI().

◆ GLimp_BeginFrame()

void GLimp_BeginFrame ( float  camera_separation)

Definition at line 554 of file glw_imp.c.

555 {
556  if ( gl_bitdepth->modified )
557  {
559  {
560  ri.Cvar_SetValue( "gl_bitdepth", 0 );
561  ri.Con_Printf( PRINT_ALL, "gl_bitdepth requires Win95 OSR2.x or WinNT 4.x\n" );
562  }
563  gl_bitdepth->modified = false;
564  }
565 
566  if ( camera_separation < 0 && gl_state.stereo_enabled )
567  {
568  qglDrawBuffer( GL_BACK_LEFT );
569  }
570  else if ( camera_separation > 0 && gl_state.stereo_enabled )
571  {
572  qglDrawBuffer( GL_BACK_RIGHT );
573  }
574  else
575  {
576  qglDrawBuffer( GL_BACK );
577  }
578 }

Referenced by R_BeginFrame().

◆ GLimp_EndFrame()

void GLimp_EndFrame ( void  )

Definition at line 587 of file glw_imp.c.

588 {
589  int err;
590 
591  err = qglGetError();
592  assert( err == GL_NO_ERROR );
593 
594  if ( stricmp( gl_drawbuffer->string, "GL_BACK" ) == 0 )
595  {
596  if ( !qwglSwapBuffers( glw_state.hDC ) )
597  ri.Sys_Error( ERR_FATAL, "GLimp_EndFrame() - SwapBuffers() failed!\n" );
598  }
599 }

Referenced by GetRefAPI().

◆ GLimp_Init()

qboolean GLimp_Init ( void hinstance,
void wndproc 
)

Definition at line 347 of file glw_imp.c.

348 {
349 #define OSR2_BUILD_NUMBER 1111
350 
351  OSVERSIONINFO vinfo;
352 
353  vinfo.dwOSVersionInfoSize = sizeof(vinfo);
354 
356 
357  if ( GetVersionEx( &vinfo) )
358  {
359  if ( vinfo.dwMajorVersion > 4 )
360  {
362  }
363  else if ( vinfo.dwMajorVersion == 4 )
364  {
365  if ( vinfo.dwPlatformId == VER_PLATFORM_WIN32_NT )
366  {
368  }
369  else if ( vinfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
370  {
371  if ( LOWORD( vinfo.dwBuildNumber ) >= OSR2_BUILD_NUMBER )
372  {
374  }
375  }
376  }
377  }
378  else
379  {
380  ri.Con_Printf( PRINT_ALL, "GLimp_Init() - GetVersionEx failed\n" );
381  return false;
382  }
383 
384  glw_state.hInstance = ( HINSTANCE ) hinstance;
385  glw_state.wndproc = wndproc;
386 
387  return true;
388 }

Referenced by R_Init().

◆ GLimp_InitGL()

qboolean GLimp_InitGL ( void  )

Definition at line 390 of file glw_imp.c.

391 {
392  PIXELFORMATDESCRIPTOR pfd =
393  {
394  sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
395  1, // version number
396  PFD_DRAW_TO_WINDOW | // support window
397  PFD_SUPPORT_OPENGL | // support OpenGL
398  PFD_DOUBLEBUFFER, // double buffered
399  PFD_TYPE_RGBA, // RGBA type
400  24, // 24-bit color depth
401  0, 0, 0, 0, 0, 0, // color bits ignored
402  0, // no alpha buffer
403  0, // shift bit ignored
404  0, // no accumulation buffer
405  0, 0, 0, 0, // accum bits ignored
406  32, // 32-bit z-buffer
407  0, // no stencil buffer
408  0, // no auxiliary buffer
409  PFD_MAIN_PLANE, // main layer
410  0, // reserved
411  0, 0, 0 // layer masks ignored
412  };
413  int pixelformat;
414  cvar_t *stereo;
415 
416  stereo = ri.Cvar_Get( "cl_stereo", "0", 0 );
417 
418  /*
419  ** set PFD_STEREO if necessary
420  */
421  if ( stereo->value != 0 )
422  {
423  ri.Con_Printf( PRINT_ALL, "...attempting to use stereo\n" );
424  pfd.dwFlags |= PFD_STEREO;
425  gl_state.stereo_enabled = true;
426  }
427  else
428  {
429  gl_state.stereo_enabled = false;
430  }
431 
432  /*
433  ** figure out if we're running on a minidriver or not
434  */
435  if ( strstr( gl_driver->string, "opengl32" ) != 0 )
436  glw_state.minidriver = false;
437  else
438  glw_state.minidriver = true;
439 
440  /*
441  ** Get a DC for the specified window
442  */
443  if ( glw_state.hDC != NULL )
444  ri.Con_Printf( PRINT_ALL, "GLimp_Init() - non-NULL DC exists\n" );
445 
446  if ( ( glw_state.hDC = GetDC( glw_state.hWnd ) ) == NULL )
447  {
448  ri.Con_Printf( PRINT_ALL, "GLimp_Init() - GetDC failed\n" );
449  return false;
450  }
451 
452  if ( glw_state.minidriver )
453  {
454  if ( (pixelformat = qwglChoosePixelFormat( glw_state.hDC, &pfd)) == 0 )
455  {
456  ri.Con_Printf (PRINT_ALL, "GLimp_Init() - qwglChoosePixelFormat failed\n");
457  return false;
458  }
459  if ( qwglSetPixelFormat( glw_state.hDC, pixelformat, &pfd) == FALSE )
460  {
461  ri.Con_Printf (PRINT_ALL, "GLimp_Init() - qwglSetPixelFormat failed\n");
462  return false;
463  }
464  qwglDescribePixelFormat( glw_state.hDC, pixelformat, sizeof( pfd ), &pfd );
465  }
466  else
467  {
468  if ( ( pixelformat = ChoosePixelFormat( glw_state.hDC, &pfd)) == 0 )
469  {
470  ri.Con_Printf (PRINT_ALL, "GLimp_Init() - ChoosePixelFormat failed\n");
471  return false;
472  }
473  if ( SetPixelFormat( glw_state.hDC, pixelformat, &pfd) == FALSE )
474  {
475  ri.Con_Printf (PRINT_ALL, "GLimp_Init() - SetPixelFormat failed\n");
476  return false;
477  }
478  DescribePixelFormat( glw_state.hDC, pixelformat, sizeof( pfd ), &pfd );
479 
480  if ( !( pfd.dwFlags & PFD_GENERIC_ACCELERATED ) )
481  {
482  extern cvar_t *gl_allow_software;
483 
484  if ( gl_allow_software->value )
485  glw_state.mcd_accelerated = true;
486  else
487  glw_state.mcd_accelerated = false;
488  }
489  else
490  {
491  glw_state.mcd_accelerated = true;
492  }
493  }
494 
495  /*
496  ** report if stereo is desired but unavailable
497  */
498  if ( !( pfd.dwFlags & PFD_STEREO ) && ( stereo->value != 0 ) )
499  {
500  ri.Con_Printf( PRINT_ALL, "...failed to select stereo pixel format\n" );
501  ri.Cvar_SetValue( "cl_stereo", 0 );
502  gl_state.stereo_enabled = false;
503  }
504 
505  /*
506  ** startup the OpenGL subsystem by creating a context and making
507  ** it current
508  */
509  if ( ( glw_state.hGLRC = qwglCreateContext( glw_state.hDC ) ) == 0 )
510  {
511  ri.Con_Printf (PRINT_ALL, "GLimp_Init() - qwglCreateContext failed\n");
512 
513  goto fail;
514  }
515 
516  if ( !qwglMakeCurrent( glw_state.hDC, glw_state.hGLRC ) )
517  {
518  ri.Con_Printf (PRINT_ALL, "GLimp_Init() - qwglMakeCurrent failed\n");
519 
520  goto fail;
521  }
522 
523  if ( !VerifyDriver() )
524  {
525  ri.Con_Printf( PRINT_ALL, "GLimp_Init() - no hardware acceleration detected\n" );
526  goto fail;
527  }
528 
529  /*
530  ** print out PFD specifics
531  */
532  ri.Con_Printf( PRINT_ALL, "GL PFD: color(%d-bits) Z(%d-bit)\n", ( int ) pfd.cColorBits, ( int ) pfd.cDepthBits );
533 
534  return true;
535 
536 fail:
537  if ( glw_state.hGLRC )
538  {
539  qwglDeleteContext( glw_state.hGLRC );
540  glw_state.hGLRC = NULL;
541  }
542 
543  if ( glw_state.hDC )
544  {
545  ReleaseDC( glw_state.hWnd, glw_state.hDC );
546  glw_state.hDC = NULL;
547  }
548  return false;
549 }

Referenced by VID_CreateWindow().

◆ GLimp_SetMode()

rserr_t GLimp_SetMode ( int pwidth,
int pheight,
int  mode,
qboolean  fullscreen 
)

Definition at line 159 of file glw_imp.c.

160 {
161  int width, height;
162  const char *win_fs[] = { "W", "FS" };
163 
164  ri.Con_Printf( PRINT_ALL, "Initializing OpenGL display\n");
165 
166  ri.Con_Printf (PRINT_ALL, "...setting mode %d:", mode );
167 
168  if ( !ri.Vid_GetModeInfo( &width, &height, mode ) )
169  {
170  ri.Con_Printf( PRINT_ALL, " invalid mode\n" );
171  return rserr_invalid_mode;
172  }
173 
174  ri.Con_Printf( PRINT_ALL, " %d %d %s\n", width, height, win_fs[fullscreen] );
175 
176  // destroy the existing window
177  if (glw_state.hWnd)
178  {
179  GLimp_Shutdown ();
180  }
181 
182  // do a CDS if needed
183  if ( fullscreen )
184  {
185  DEVMODE dm;
186 
187  ri.Con_Printf( PRINT_ALL, "...attempting fullscreen\n" );
188 
189  memset( &dm, 0, sizeof( dm ) );
190 
191  dm.dmSize = sizeof( dm );
192 
193  dm.dmPelsWidth = width;
194  dm.dmPelsHeight = height;
195  dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
196 
197  if ( gl_bitdepth->value != 0 )
198  {
199  dm.dmBitsPerPel = gl_bitdepth->value;
200  dm.dmFields |= DM_BITSPERPEL;
201  ri.Con_Printf( PRINT_ALL, "...using gl_bitdepth of %d\n", ( int ) gl_bitdepth->value );
202  }
203  else
204  {
205  HDC hdc = GetDC( NULL );
206  int bitspixel = GetDeviceCaps( hdc, BITSPIXEL );
207 
208  ri.Con_Printf( PRINT_ALL, "...using desktop display depth of %d\n", bitspixel );
209 
210  ReleaseDC( 0, hdc );
211  }
212 
213  ri.Con_Printf( PRINT_ALL, "...calling CDS: " );
214  if ( ChangeDisplaySettings( &dm, CDS_FULLSCREEN ) == DISP_CHANGE_SUCCESSFUL )
215  {
216  *pwidth = width;
217  *pheight = height;
218 
219  gl_state.fullscreen = true;
220 
221  ri.Con_Printf( PRINT_ALL, "ok\n" );
222 
223  if ( !VID_CreateWindow (width, height, true) )
224  return rserr_invalid_mode;
225 
226  return rserr_ok;
227  }
228  else
229  {
230  *pwidth = width;
231  *pheight = height;
232 
233  ri.Con_Printf( PRINT_ALL, "failed\n" );
234 
235  ri.Con_Printf( PRINT_ALL, "...calling CDS assuming dual monitors:" );
236 
237  dm.dmPelsWidth = width * 2;
238  dm.dmPelsHeight = height;
239  dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
240 
241  if ( gl_bitdepth->value != 0 )
242  {
243  dm.dmBitsPerPel = gl_bitdepth->value;
244  dm.dmFields |= DM_BITSPERPEL;
245  }
246 
247  /*
248  ** our first CDS failed, so maybe we're running on some weird dual monitor
249  ** system
250  */
251  if ( ChangeDisplaySettings( &dm, CDS_FULLSCREEN ) != DISP_CHANGE_SUCCESSFUL )
252  {
253  ri.Con_Printf( PRINT_ALL, " failed\n" );
254 
255  ri.Con_Printf( PRINT_ALL, "...setting windowed mode\n" );
256 
257  ChangeDisplaySettings( 0, 0 );
258 
259  *pwidth = width;
260  *pheight = height;
261  gl_state.fullscreen = false;
262  if ( !VID_CreateWindow (width, height, false) )
263  return rserr_invalid_mode;
265  }
266  else
267  {
268  ri.Con_Printf( PRINT_ALL, " ok\n" );
269  if ( !VID_CreateWindow (width, height, true) )
270  return rserr_invalid_mode;
271 
272  gl_state.fullscreen = true;
273  return rserr_ok;
274  }
275  }
276  }
277  else
278  {
279  ri.Con_Printf( PRINT_ALL, "...setting windowed mode\n" );
280 
281  ChangeDisplaySettings( 0, 0 );
282 
283  *pwidth = width;
284  *pheight = height;
285  gl_state.fullscreen = false;
286  if ( !VID_CreateWindow (width, height, false) )
287  return rserr_invalid_mode;
288  }
289 
290  return rserr_ok;
291 }

Referenced by R_SetMode().

◆ GLimp_Shutdown()

void GLimp_Shutdown ( void  )

Definition at line 302 of file glw_imp.c.

303 {
304  if ( qwglMakeCurrent && !qwglMakeCurrent( NULL, NULL ) )
305  ri.Con_Printf( PRINT_ALL, "ref_gl::R_Shutdown() - wglMakeCurrent failed\n");
306  if ( glw_state.hGLRC )
307  {
308  if ( qwglDeleteContext && !qwglDeleteContext( glw_state.hGLRC ) )
309  ri.Con_Printf( PRINT_ALL, "ref_gl::R_Shutdown() - wglDeleteContext failed\n");
310  glw_state.hGLRC = NULL;
311  }
312  if (glw_state.hDC)
313  {
314  if ( !ReleaseDC( glw_state.hWnd, glw_state.hDC ) )
315  ri.Con_Printf( PRINT_ALL, "ref_gl::R_Shutdown() - ReleaseDC failed\n" );
316  glw_state.hDC = NULL;
317  }
318  if (glw_state.hWnd)
319  {
320  DestroyWindow ( glw_state.hWnd );
321  glw_state.hWnd = NULL;
322  }
323 
324  if ( glw_state.log_fp )
325  {
326  fclose( glw_state.log_fp );
327  glw_state.log_fp = 0;
328  }
329 
330  UnregisterClass (WINDOW_CLASS_NAME, glw_state.hInstance);
331 
332  if ( gl_state.fullscreen )
333  {
334  ChangeDisplaySettings( 0, 0 );
335  gl_state.fullscreen = false;
336  }
337 }

Referenced by GLimp_SetMode(), and R_Shutdown().

◆ GLimp_SwitchFullscreen()

static qboolean GLimp_SwitchFullscreen ( int  width,
int  height 
)
static

◆ VerifyDriver()

static qboolean VerifyDriver ( void  )
static

Definition at line 47 of file glw_imp.c.

48 {
49  char buffer[1024];
50 
51  strcpy( buffer, qglGetString( GL_RENDERER ) );
52  strlwr( buffer );
53  if ( strcmp( buffer, "gdi generic" ) == 0 )
55  return false;
56  return true;
57 }

Referenced by GLimp_InitGL().

◆ VID_CreateWindow()

qboolean VID_CreateWindow ( int  width,
int  height,
qboolean  fullscreen 
)

Definition at line 64 of file glw_imp.c.

65 {
66  WNDCLASS wc;
67  RECT r;
69  int stylebits;
70  int x, y, w, h;
71  int exstyle;
72 
73  /* Register the frame class */
74  wc.style = 0;
75  wc.lpfnWndProc = (WNDPROC)glw_state.wndproc;
76  wc.cbClsExtra = 0;
77  wc.cbWndExtra = 0;
78  wc.hInstance = glw_state.hInstance;
79  wc.hIcon = 0;
80  wc.hCursor = LoadCursor (NULL,IDC_ARROW);
81  wc.hbrBackground = (void *)COLOR_GRAYTEXT;
82  wc.lpszMenuName = 0;
83  wc.lpszClassName = WINDOW_CLASS_NAME;
84 
85  if (!RegisterClass (&wc) )
86  ri.Sys_Error (ERR_FATAL, "Couldn't register window class");
87 
88  if (fullscreen)
89  {
90  exstyle = WS_EX_TOPMOST;
91  stylebits = WS_POPUP|WS_VISIBLE;
92  }
93  else
94  {
95  exstyle = 0;
96  stylebits = WINDOW_STYLE;
97  }
98 
99  r.left = 0;
100  r.top = 0;
101  r.right = width;
102  r.bottom = height;
103 
104  AdjustWindowRect (&r, stylebits, FALSE);
105 
106  w = r.right - r.left;
107  h = r.bottom - r.top;
108 
109  if (fullscreen)
110  {
111  x = 0;
112  y = 0;
113  }
114  else
115  {
116  vid_xpos = ri.Cvar_Get ("vid_xpos", "0", 0);
117  vid_ypos = ri.Cvar_Get ("vid_ypos", "0", 0);
118  x = vid_xpos->value;
119  y = vid_ypos->value;
120  }
121 
122  glw_state.hWnd = CreateWindowEx (
123  exstyle,
125  "Quake 2",
126  stylebits,
127  x, y, w, h,
128  NULL,
129  NULL,
131  NULL);
132 
133  if (!glw_state.hWnd)
134  ri.Sys_Error (ERR_FATAL, "Couldn't create window");
135 
136  ShowWindow( glw_state.hWnd, SW_SHOW );
137  UpdateWindow( glw_state.hWnd );
138 
139  // init all the gl stuff for the window
140  if (!GLimp_InitGL ())
141  {
142  ri.Con_Printf( PRINT_ALL, "VID_CreateWindow() - GLimp_InitGL failed\n");
143  return false;
144  }
145 
146  SetForegroundWindow( glw_state.hWnd );
147  SetFocus( glw_state.hWnd );
148 
149  // let the sound and input subsystems know about the new window
151 
152  return true;
153 }

Referenced by GLimp_SetMode().

Variable Documentation

◆ glw_state

◆ vid_fullscreen

cvar_t* vid_fullscreen

Definition at line 46 of file vid_dll.c.

Referenced by GLimp_AppActivate(), SWimp_AppActivate(), and VID_CreateWindow().

◆ vid_ref

cvar_t* vid_ref

Definition at line 43 of file vid_dll.c.

vid_fullscreen
cvar_t * vid_fullscreen
Definition: vid_dll.c:46
VID_CreateWindow
qboolean VID_CreateWindow(int width, int height, qboolean fullscreen)
Definition: glw_imp.c:64
GLimp_Shutdown
void GLimp_Shutdown(void)
Definition: glw_imp.c:302
height
GLsizei height
Definition: qgl_win.c:69
glstate_t::stereo_enabled
qboolean stereo_enabled
Definition: gl_local.h:430
glw_state
glwstate_t glw_state
Definition: glw_imp.c:42
glwstate_t::hDC
HDC hDC
Definition: glw_win.h:32
gl_state
glstate_t gl_state
Definition: gl_rmain.c:36
ri
refimport_t ri
Definition: r_main.c:25
refimport_t::Vid_NewWindow
void(* Vid_NewWindow)(int width, int height)
Definition: ref.h:248
gl_driver
static cvar_t * gl_driver
Definition: vid_menu.c:35
cvar_s::modified
qboolean modified
Definition: q_shared.h:323
qglGetString
const GLubyte *APIENTRY * qglGetString(GLenum name)
refimport_t::Cvar_Get
cvar_t *(* Cvar_Get)(char *name, char *value, int flags)
Definition: ref.h:242
cvar_s::string
char * string
Definition: q_shared.h:320
x
GLint GLenum GLint x
Definition: qgl_win.c:116
glwstate_t::log_fp
FILE * log_fp
Definition: glw_win.h:42
buffer
GLenum GLfloat * buffer
Definition: qgl_win.c:151
width
GLint GLsizei width
Definition: qgl_win.c:115
cvar_s
Definition: q_shared.h:317
refimport_t::Vid_GetModeInfo
qboolean(* Vid_GetModeInfo)(int *width, int *height, int mode)
Definition: ref.h:246
refimport_t::Con_Printf
void(* Con_Printf)(int print_level, char *str,...)
Definition: ref.h:228
PRINT_ALL
#define PRINT_ALL
Definition: qcommon.h:743
gl_drawbuffer
cvar_t * gl_drawbuffer
Definition: gl_rmain.c:105
gl_allow_software
cvar_t * gl_allow_software
Definition: gl_rmain.c:86
GLimp_InitGL
qboolean GLimp_InitGL(void)
Definition: glw_imp.c:390
r
GLdouble GLdouble r
Definition: qgl_win.c:336
HDC
HDC(WINAPI *qwglGetCurrentDC)(VOID)
rserr_invalid_mode
@ rserr_invalid_mode
Definition: r_local.h:102
glwstate_t::hGLRC
HGLRC hGLRC
Definition: glw_win.h:34
glwstate_t::hWnd
HWND hWnd
Definition: glw_win.h:33
refimport_t::Sys_Error
void(* Sys_Error)(int err_level, char *str,...)
Definition: ref.h:220
glwstate_t::hInstance
HINSTANCE hInstance
Definition: glw_win.h:29
cvar_s::value
float value
Definition: q_shared.h:324
gl_bitdepth
cvar_t * gl_bitdepth
Definition: gl_rmain.c:104
NULL
#define NULL
Definition: q_shared.h:60
glwstate_t::allowdisplaydepthchange
qboolean allowdisplaydepthchange
Definition: glw_win.h:39
glwstate_t::minidriver
qboolean minidriver
Definition: glw_win.h:38
ERR_FATAL
#define ERR_FATAL
Definition: qcommon.h:735
y
GLint y
Definition: qgl_win.c:115
WINDOW_STYLE
#define WINDOW_STYLE
Definition: winquake.h:28
rserr_ok
@ rserr_ok
Definition: r_local.h:99
glstate_t::fullscreen
qboolean fullscreen
Definition: gl_local.h:418
WINDOW_CLASS_NAME
#define WINDOW_CLASS_NAME
Definition: glw_imp.c:62
OSR2_BUILD_NUMBER
#define OSR2_BUILD_NUMBER
glwstate_t::mcd_accelerated
qboolean mcd_accelerated
Definition: glw_win.h:40
glwstate_t::wndproc
void * wndproc
Definition: glw_win.h:30
vid_xpos
cvar_t * vid_xpos
Definition: vid_dll.c:44
VerifyDriver
static qboolean VerifyDriver(void)
Definition: glw_imp.c:47
w
GLdouble GLdouble GLdouble w
Definition: qgl_win.c:291
refimport_t::Cvar_SetValue
void(* Cvar_SetValue)(char *name, float value)
Definition: ref.h:244
mode
GLenum mode
Definition: qgl_win.c:113
vid_ypos
cvar_t * vid_ypos
Definition: vid_dll.c:45
rserr_invalid_fullscreen
@ rserr_invalid_fullscreen
Definition: r_local.h:101