void R_SetDefaultState(void) { qglClearColor(1, 0, 0.5, 0.5); qglCullFace(GL_FRONT); qglEnable(GL_TEXTURE_2D); qglEnable(GL_ALPHA_TEST); qglAlphaFunc(GL_GREATER, 0.666); qglDisable(GL_DEPTH_TEST); qglDisable(GL_CULL_FACE); qglDisable(GL_BLEND); qglColor4f(1, 1, 1, 1); qglPolygonMode(GL_FRONT_AND_BACK, GL_FILL); qglShadeModel(GL_FLAT); R_TextureMode(gl_texturemode->string); R_TextureAlphaMode(gl_texturealphamode->string); R_TextureSolidMode(gl_texturesolidmode->string); qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); R_TexEnv(GL_REPLACE); if (qglPointParameterfEXT) { float attenuations[3]; attenuations[0] = gl_particle_att_a->value; attenuations[1] = gl_particle_att_b->value; attenuations[2] = gl_particle_att_c->value; /* GL_POINT_SMOOTH is not implemented by some OpenGL drivers, especially the crappy Mesa3D backends like i915.so. That the points are squares and not circles is not a problem by Quake II! */ qglEnable(GL_POINT_SMOOTH); qglPointParameterfEXT(GL_POINT_SIZE_MIN_EXT, gl_particle_min_size->value); qglPointParameterfEXT(GL_POINT_SIZE_MAX_EXT, gl_particle_max_size->value); qglPointParameterfvEXT(GL_DISTANCE_ATTENUATION_EXT, attenuations); } if (qglColorTableEXT && gl_ext_palettedtexture->value) { qglEnable(GL_SHARED_TEXTURE_PALETTE_EXT); R_SetTexturePalette(d_8to24table); } }
/** * @sa R_RenderFrame * @sa R_EndFrame */ void R_BeginFrame (void) { r_locals.frame++; /* avoid overflows, negatives and zero are reserved */ if (r_locals.frame > 0xffff) r_locals.frame = 1; if (Com_IsRenderModified()) { Com_Printf("Modified render related cvars\n"); if (Cvar_PendingCvars(CVAR_R_PROGRAMS)) R_RestartPrograms_f(); /* prevent reloading of some rendering cvars */ Cvar_ClearVars(CVAR_R_MASK); Com_SetRenderModified(false); } if (r_anisotropic->modified) { if (r_anisotropic->integer > r_config.maxAnisotropic) { Com_Printf("...max GL_EXT_texture_filter_anisotropic value is %i\n", r_config.maxAnisotropic); Cvar_SetValue("r_anisotropic", r_config.maxAnisotropic); } /*R_UpdateAnisotropy();*/ r_anisotropic->modified = false; } /* draw buffer stuff */ if (r_drawbuffer->modified) { r_drawbuffer->modified = false; if (Q_strcasecmp(r_drawbuffer->string, "GL_FRONT") == 0) glDrawBuffer(GL_FRONT); else glDrawBuffer(GL_BACK); R_CheckError(); } /* texturemode stuff */ /* Realtime set level of anisotropy filtering and change texture lod bias */ if (r_texturemode->modified) { R_TextureMode(r_texturemode->string); r_texturemode->modified = false; } if (r_texturealphamode->modified) { R_TextureAlphaMode(r_texturealphamode->string); r_texturealphamode->modified = false; } if (r_texturesolidmode->modified) { R_TextureSolidMode(r_texturesolidmode->string); r_texturesolidmode->modified = false; } /* threads */ if (r_threads->modified) { if (r_threads->integer) R_InitThreads(); else R_ShutdownThreads(); r_threads->modified = false; } R_Setup2D(); /* clear screen if desired */ R_Clear(); }