⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gl_rmain.pas

📁 雷神之锤2(Quake2)Delphi源码
💻 PAS
📖 第 1 页 / 共 4 页
字号:
begin
  if ( !( gl_config.renderer & GL_RENDERER_INTERGRAPH ) )
   return;

  if (!gl_state.stereo_enabled)
   return;

  R_SetGL2D();

  qglDrawBuffer (GL_BACK_LEFT);

  for i:=0 to 19 do
    begin
      qglBegin (GL_LINES);
        GL_DrawColoredStereoLinePair (1, 0, 0, 0 );
        GL_DrawColoredStereoLinePair (1, 0, 0, 2 );
        GL_DrawColoredStereoLinePair (1, 0, 0, 4 );
        GL_DrawColoredStereoLinePair (1, 0, 0, 6 );
        GL_DrawColoredStereoLinePair (0, 1, 0, 8 );
        GL_DrawColoredStereoLinePair (1, 1, 0, 10);
        GL_DrawColoredStereoLinePair (1, 1, 0, 12);
        GL_DrawColoredStereoLinePair (0, 1, 0, 14);
      qglEnd();

      GLimp_EndFrame();
    end;
end;//procedure*)

{*
====================
R_SetLightLevel

====================
*}
procedure R_SetLightLevel;
var
  shadelight : vec3_t;
begin
  // if (r_newrefdef.rdflags & RDF_NOWORLDMODEL)
  if (r_newrefdef.rdflags AND RDF_NOWORLDMODEL) <> 0 then
    Exit;

  // save off light value for server to look at (BIG HACK!)

//Y  R_LightPoint (r_newrefdef.vieworg, shadelight);

  // pick the greatest component, which should be the same
  // as the mono value returned by software
  if (shadelight[0] > shadelight[1])
  then
    if (shadelight[0] > shadelight[2])
    then r_lightlevel.value := 150*shadelight[0]
    else r_lightlevel.value := 150*shadelight[2]
  else
    if (shadelight[1] > shadelight[2])
    then r_lightlevel.value := 150*shadelight[1]
    else r_lightlevel.value := 150*shadelight[2];
end;//procedure

{*
@@@@@@@@@@@@@@@@@@@@@
R_RenderFrame

@@@@@@@@@@@@@@@@@@@@@
*}
procedure R_RenderFrame (fd : refdef_p); cdecl;
begin
  R_RenderView (fd);
  R_SetLightLevel ();
  R_SetGL2D ();
end;//procedure

procedure R_Register;
begin
  r_lefthand           := ri.Cvar_Get ('hand',                 '0', CVAR_USERINFO or CVAR_ARCHIVE);
  r_norefresh          := ri.Cvar_Get ('r_norefresh',          '0', 0);
  r_fullbright         := ri.Cvar_Get ('r_fullbright',         '0', 0);
  r_drawentities       := ri.Cvar_Get ('r_drawentities',       '1', 0);
  _r_drawworld         := ri.Cvar_Get ('r_drawworld',          '1', 0);
  r_novis              := ri.Cvar_Get ('r_novis',              '0', 0);
  r_nocull             := ri.Cvar_Get ('r_nocull',             '0', 0);
  r_lerpmodels         := ri.Cvar_Get ('r_lerpmodels',         '1', 0);
  r_speeds             := ri.Cvar_Get ('r_speeds',             '0', 0);

  r_lightlevel         := ri.Cvar_Get ('r_lightlevel',         '0', 0);

  gl_nosubimage        := ri.Cvar_Get ('gl_nosubimage',        '0', 0);
  gl_allow_software    := ri.Cvar_Get ('gl_allow_software',    '0', 0);

  gl_particle_min_size := ri.Cvar_Get ('gl_particle_min_size', '2',    CVAR_ARCHIVE);
  gl_particle_max_size := ri.Cvar_Get ('gl_particle_max_size', '40',   CVAR_ARCHIVE);
  gl_particle_size     := ri.Cvar_Get ('gl_particle_size',     '40',   CVAR_ARCHIVE);
  gl_particle_att_a    := ri.Cvar_Get ('gl_particle_att_a',    '0.01', CVAR_ARCHIVE);
  gl_particle_att_b    := ri.Cvar_Get ('gl_particle_att_b',    '0.0',  CVAR_ARCHIVE);
  gl_particle_att_c    := ri.Cvar_Get ('gl_particle_att_c',    '0.01', CVAR_ARCHIVE);

  _gl_modulate         := ri.Cvar_Get ('gl_modulate',          '1', CVAR_ARCHIVE);
  gl_log               := ri.Cvar_Get ('gl_log',               '0', 0);
  gl_bitdepth          := ri.Cvar_Get ('gl_bitdepth',          '0', 0);
  gl_mode              := ri.Cvar_Get ('gl_mode',              '3', CVAR_ARCHIVE);
  gl_lightmap          := ri.Cvar_Get ('gl_lightmap',          '0', 0);
  gl_shadows           := ri.Cvar_Get ('gl_shadows',           '0', CVAR_ARCHIVE);
  gl_dynamic           := ri.Cvar_Get ('gl_dynamic',           '1', 0);
  gl_nobind            := ri.Cvar_Get ('gl_nobind',            '0', 0);
  gl_round_down        := ri.Cvar_Get ('gl_round_down',        '1', 0);
  gl_picmip            := ri.Cvar_Get ('gl_picmip',            '0', 0);
  gl_skymip            := ri.Cvar_Get ('gl_skymip',            '0', 0);
  gl_showtris          := ri.Cvar_Get ('gl_showtris',          '0', 0);
  gl_ztrick            := ri.Cvar_Get ('gl_ztrick',            '0', 0);
  gl_finish            := ri.Cvar_Get ('gl_finish',            '0', CVAR_ARCHIVE);
  _gl_clear            := ri.Cvar_Get ('gl_clear',             '0', 0);
  gl_cull              := ri.Cvar_Get ('gl_cull',              '1', 0);
  gl_polyblend         := ri.Cvar_Get ('gl_polyblend',         '1', 0);
  gl_flashblend        := ri.Cvar_Get ('gl_flashblend',        '0', 0);
  gl_playermip         := ri.Cvar_Get ('gl_playermip',         '0', 0);
  gl_monolightmap      := ri.Cvar_Get ('gl_monolightmap',      '0', 0);
  gl_driver            := ri.Cvar_Get ('gl_driver',            'opengl32', CVAR_ARCHIVE);
  _gl_texturemode      := ri.Cvar_Get ('gl_texturemode',       'GL_LINEAR_MIPMAP_NEAREST', CVAR_ARCHIVE);
  _gl_texturealphamode := ri.Cvar_Get ('gl_texturealphamode',  'default',  CVAR_ARCHIVE);
  _gl_texturesolidmode := ri.Cvar_Get ('gl_texturesolidmode',  'default',  CVAR_ARCHIVE);
  gl_lockpvs           := ri.Cvar_Get ('gl_lockpvs',           '0',        0);

  gl_vertex_arrays     := ri.Cvar_Get ('gl_vertex_arrays',     '0', CVAR_ARCHIVE);

  gl_ext_swapinterval          := ri.Cvar_Get ('gl_ext_swapinterval',    '1', CVAR_ARCHIVE);
  gl_ext_palettedtexture       := ri.Cvar_Get ('gl_ext_palettedtexture', '1', CVAR_ARCHIVE);
  gl_ext_multitexture          := ri.Cvar_Get ('gl_ext_multitexture',    '1', CVAR_ARCHIVE);
  gl_ext_pointparameters       := ri.Cvar_Get ('gl_ext_pointparameters', '1', CVAR_ARCHIVE);
  gl_ext_compiled_vertex_array := ri.Cvar_Get ('gl_ext_compiled_vertex_array', '1', CVAR_ARCHIVE);

  gl_drawbuffer        := ri.Cvar_Get ('gl_drawbuffer',        'GL_BACK', 0);
  gl_swapinterval      := ri.Cvar_Get ('gl_swapinterval',      '1', CVAR_ARCHIVE);

  gl_saturatelighting  := ri.Cvar_Get ('gl_saturatelighting',  '0', 0);

  gl_3dlabs_broken     := ri.Cvar_Get ('gl_3dlabs_broken',     '1', CVAR_ARCHIVE);

  vid_fullscreen       := ri.Cvar_Get ('vid_fullscreen',       '0',    CVAR_ARCHIVE);
  vid_gamma            := ri.Cvar_Get ('vid_gamma',            '1.0',  CVAR_ARCHIVE);
  vid_ref              := ri.Cvar_Get ('vid_ref',              'soft', CVAR_ARCHIVE);

  ri.Cmd_AddCommand ('imagelist',  GL_ImageList_f);
//Y  ri.Cmd_AddCommand ('screenshot', GL_ScreenShot_f);*)
  ri.Cmd_AddCommand ('modellist',  Mod_Modellist_f);
//  ri.Cmd_AddCommand ('gl_strings', GL_Strings_f);*)
end;//procedure

{*
==================
R_SetMode
==================
*}
function R_SetMode : qboolean;
var
  err        : rserr_t;
  fullscreen : qboolean;
begin
  if (vid_fullscreen.modified) AND (NOT gl_config.allow_cds) then
  begin
    ri.Con_Printf (PRINT_ALL, 'R_SetMode() - CDS not allowed with this driver\n', []);
//Y???    ri.Cvar_SetValue ('vid_fullscreen', !vid_fullscreen.value);
    vid_fullscreen.modified := false;
  end;

  fullscreen := (vid_fullscreen.value <> 0); //Y ???

  vid_fullscreen.modified := false;
  gl_mode.modified := false;

  err := GLimp_SetMode (vid.width, vid.height, Trunc(gl_mode.value), fullscreen); //Y???
  if (err = rserr_ok)
  then gl_state.prev_mode := Trunc(gl_mode.value) //Y???
  else begin
    if (err = rserr_invalid_fullscreen)
    then begin
      ri.Cvar_SetValue ('vid_fullscreen', 0);
      vid_fullscreen.modified := false;
      ri.Con_Printf (PRINT_ALL, 'ref_gl::R_SetMode() - fullscreen unavailable in this mode\n', []);
      err := GLimp_SetMode (vid.width, vid.height, TRunc(gl_mode.value), false); //Y???
      if (err = rserr_ok) then
      begin
        Result := true;
        Exit;
      end;
    end
    else
      if (err = rserr_invalid_mode) then
      begin
        ri.Cvar_SetValue ('gl_mode', gl_state.prev_mode);
        gl_mode.modified := false;
        ri.Con_Printf( PRINT_ALL, 'ref_gl::R_SetMode() - invalid mode\n', []);
      end;

    // try setting it back to something safe
    err := GLimp_SetMode (vid.width, vid.height, gl_state.prev_mode, false);
    if (err <> rserr_ok) then
    begin
      ri.Con_Printf (PRINT_ALL, 'ref_gl::R_SetMode() - could not revert to safe mode\n', []);
      Result := false;
      Exit;
    end;
  end;//else
  Result := true;
end;//function

{*
===============
R_Init
===============
*}
//function R_Init ( void *hinstance, void *hWnd ) : integer;
//function R_Init (hinstance, hWnd : pointer) : integer;
function R_Init (hinstance : HINST; hWnd : pointer{TFarProc}) : integer; cdecl;
var
{	char renderer_buffer[1000];
	char vendor_buffer[1000];}
  renderer_buffer,
  vendor_buffer   : PChar;

  err : integer;
  j   : integer;
//	extern float r_turbsin[256]; //is GLOBAL_var
begin
(*Y  for j:=0 to 255 do
    r_turbsin[j] *= 0.5;*)

  ri.Con_Printf (PRINT_ALL, 'ref_gl version: "REF_VERSION"\n', []);

  Draw_GetPalette ();

  R_Register();

  // initialize our QGL dynamic bindings
  if NOT QGL_Init (gl_driver.string_) then
  begin
    QGL_Shutdown();
    ri.Con_Printf (PRINT_ALL, 'ref_gl::R_Init() - could not load \"%s\"\n', [gl_driver.string_]);
    Result := -1;
    Exit;
  end;

  // initialize OS-specific parts of OpenGL
  if NOT GLimp_Init (hinstance, hWnd) then
  begin
    QGL_Shutdown();
    Result := -1;
    Exit;
  end;

  // set our "safe" modes
  gl_state.prev_mode := 3;

  // create the window and set up the context
  if NOT R_SetMode () then
  begin
    QGL_Shutdown();
    ri.Con_Printf (PRINT_ALL, 'ref_gl::R_Init() - could not R_SetMode()\n', []);
    Result := -1;
    Exit;
  end;

  ri.Vid_MenuInit();

  {*
  ** get our various GL strings
  *}
  gl_config.vendor_string     := PChar(qglGetString (GL_VENDOR));
  ri.Con_Printf (PRINT_ALL,   'GL_VENDOR: %s\n',     [gl_config.vendor_string]);
  gl_config.renderer_string   := PChar(qglGetString (GL_RENDERER));
  ri.Con_Printf (PRINT_ALL,   'GL_RENDERER: %s\n',   [gl_config.renderer_string]);
  gl_config.version_string    := PChar(qglGetString (GL_VERSION));
  ri.Con_Printf (PRINT_ALL,   'GL_VERSION: %s\n',    [gl_config.version_string]);
  gl_config.extensions_string := PChar(qglGetString (GL_EXTENSIONS));
  ri.Con_Printf (PRINT_ALL,   'GL_EXTENSIONS: %s\n', [gl_config.extensions_string]);

  CPas.strcpy (renderer_buffer, gl_config.renderer_string);
//  strlwr( renderer_buffer );

  CPas.strcpy (vendor_buffer, gl_config.vendor_string);
//  strlwr( vendor_buffer );

  if (CPas.strstr (renderer_buffer, 'voodoo') <> Nil)
  then begin
//    if (!strstr (renderer_buffer, 'rush'))
    if (CPas.strstr (renderer_buffer, 'rush') = Nil)
    then gl_config.renderer := GL_RENDERER_VOODOO
    else gl_config.renderer := GL_RENDERER_VOODOO_RUSH;
  end
  else begin
    if (CPas.strstr (vendor_buffer, 'sgi') <> Nil)
     then gl_config.renderer := GL_RENDERER_SGI
     else
       if (CPas.strstr (renderer_buffer, 'permedia') <> Nil)
       then gl_config.renderer := GL_RENDERER_PERMEDIA2
       else
         if (CPas.strstr (renderer_buffer, 'glint') <> Nil)
         then gl_config.renderer := GL_RENDERER_GLINT_MX
         else
           if (CPas.strstr (renderer_buffer, 'glzicd') <> Nil)
           then gl_config.renderer := GL_RENDERER_REALIZM
           else
             if (CPas.strstr (renderer_buffer, 'gdi') <> Nil)
             then gl_config.renderer := GL_RENDERER_MCD
             else
               if (CPas.strstr (renderer_buffer, 'pcx2') <> Nil)
               then gl_config.renderer := GL_RENDERER_PCX2
               else
                 if (CPas.strstr (renderer_buffer, 'verite') <> Nil)
                 then gl_config.renderer := GL_RENDERER_RENDITION
                 else gl_config.renderer := GL_RENDERER_OTHER;
  end;//else

//  if ( toupper( gl_monolightmap.string[1] ) != 'F' )
  if (UpCase(gl_monolightmap.string_[1]) <> 'F')                       
  then begin
    if (gl_config.renderer = GL_RENDERER_PERMEDIA2)
    then begin
      ri.Cvar_Set   ('gl_monolightmap', 'A');
      ri.Con_Printf (PRINT_ALL, '...using gl_monolightmap "a"\n', []);
    end
    else
//      if ( gl_config.renderer & GL_RENDERER_POWERVR )
      if (gl_config.renderer AND GL_RENDERER_POWERVR) <> 0
      then ri.Cvar_Set ('gl_monolightmap', '0')
      else ri.Cvar_Set ('gl_monolightmap', '0');
  end;

  // power vr can't have anything stay in the framebuffer, so
  // the screen needs to redraw the tiled background every frame
//  if ( gl_config.renderer & GL_RENDERER_POWERVR )
  if (gl_config.renderer AND GL_RENDERER_POWERVR) <> 0
  then ri.Cvar_Set ('scr_drawall', '1')
  else ri.Cvar_Set ('scr_drawall', '0');

  // MCD has buffering issues
  if (gl_config.renderer = GL_RENDERER_MCD) then
    ri.Cvar_SetValue ('gl_finish', 1);

//  if ( gl_config.renderer & GL_RENDERER_3DLABS )
  if (gl_config.renderer AND GL_RENDERER_3DLABS) <> 0
  then begin
    if (gl_3dlabs_broken.value <> 0)
    then gl_config.allow_cds := false
    else gl_config.allow_cds := true;
  end
  else gl_config.allow_cds := true;

  if (gl_config.allow_cds)
  then ri.Con_Printf (PRINT_ALL, '...allowing CDS\n', [])
  else ri.Con_Printf (PRINT_ALL, '...disabling CDS\n', []);

  {*
   ** grab extensions
   *}
{$ifdef WIN32}
  if (CPas.strstr (gl_config.extensions_string, 'GL_EXT_compiled_vertex_array') <> Nil) OR
     (CPas.strstr (gl_config.extensions_string, 'GL_SGI_compiled_vertex_array') <> Nil) 
  then begin
    ri.Con_Printf (PRINT_ALL, '...enabling GL_EXT_compiled_vertex_array\n', []);
    qglLockArraysEXT   := qwglGetProcAddress ('glLockArraysEXT');
    qglUnlockArraysEXT := qwglGetProcAddress ('glUnlockArraysEXT');
  end
  else
    ri.Con_Printf (PRINT_ALL, '...GL_EXT_compiled_vertex_array not found\n', []);

  if (CPas.strstr (gl_config.extensions_string, 'WGL_EXT_swap_control') <> Nil)
  then begin
    qwglSwapIntervalEXT := {( BOOL (WINAPI * )(int))} qwglGetProcAddress ('wglSwapIntervalEXT');
    ri.Con_Printf (PRINT_ALL, '...enabling WGL_EXT_swap_control\n', []);
  end
  else
    ri.Con_Printf (PRINT_ALL, '...WGL_EXT_swap_control not found\n', []);

  if (CPas.strstr (gl_config.extensions_string, 'GL_EXT_point_parameters') <> Nil)
  then begin
    if (gl_ext_pointparameters.value <> 0)
    then begin
      qglPointParameterfEXT  := {( void (APIENTRY * )( GLenum, GLfloat ) )}         qwglGetProcAddress ('glPointParameterfEXT');
      qglPointParameterfvEXT := {( void (APIENTRY * )( GLenum, const GLfloat * ) )} qwglGetProcAddress ('glPointParameterfvEXT');
      ri.Con_Printf (PRINT_ALL, '...using GL_EXT_point_parameters\n', []);
    end
    else
      ri.Con_Printf (PRINT_ALL, '...ignoring GL_EXT_point_parameters\n', []);
  end
  else
    ri.Con_Printf (PRINT_ALL, '...GL_EXT_point_parameters not found\n', []);

  if (CPas.strstr (gl_config.extensions_string, 'GL_EXT_paletted_texture') <> Nil) AND
     (CPas.strstr (gl_config.extensions_string, 'GL_EXT_shared_texture_palette') <> Nil)
  then begin
    if (gl_ext_palettedtexture.value <> 0)
    then begin
      ri.Con_Printf (PRINT_ALL, '...using GL_EXT_shared_texture_palette\n', []);
      qglColorTableEXT := {( void ( APIENTRY * ) ( int, int, int, int, int, const void * ) )} qwglGetProcAddress('glColorTableEXT');
    end
    else
      ri.Con_Printf (PRINT_ALL, '...ignoring GL_EXT_shared_texture_palette\n', []);
  end
  else
    ri.Con_Printf (PRINT_ALL, '...GL_EXT_shared_texture_palette not found\n', []);

  if (CPas.strstr (gl_config.extensions_string, 'GL_SGIS_multitexture') <> Nil)
  then begin
    if (gl_ext_multitexture.value <> 0)
    then begin
      ri.Con_Printf( PRINT_ALL, '...using GL_SGIS_multitexture\n', []);
(*Y      qglMTexCoord2fSGIS   := ( void * ) qwglGetProcAddress ('glMTexCoord2fSGIS');
      qglSelectTextureSGIS := ( void * ) qwglGetProcAddress ('glSelectTextureSGIS');*)
    end
    else
      ri.Con_Printf (PRINT_ALL, '...ignoring GL_SGIS_multitexture\n', []);
  end
  else
    ri.Con_Printf (PRINT_ALL, '...GL_SGIS_multitexture not found\n', []);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -