1/* 2Copyright (C) 1996-1997 Id Software, Inc. 3 4This program is free software; you can redistribute it and/or 5modify it under the terms of the GNU General Public License 6as published by the Free Software Foundation; either version 2 7of the License, or (at your option) any later version. 8 9This program is distributed in the hope that it will be useful, 10but WITHOUT ANY WARRANTY; without even the implied warranty of 11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 13See the GNU General Public License for more details. 14 15You should have received a copy of the GNU General Public License 16along with this program; if not, write to the Free Software 17Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19*/ 20// d_init.c: rasterization driver initialization 21 22#include "quakedef.h" 23#include "d_local.h" 24 25#define NUM_MIPS 4 26 27cvar_t d_subdiv16 = {"d_subdiv16", "1"}; 28cvar_t d_mipcap = {"d_mipcap", "0"}; 29cvar_t d_mipscale = {"d_mipscale", "1"}; 30 31surfcache_t *d_initial_rover; 32qboolean d_roverwrapped; 33int d_minmip; 34float d_scalemip[NUM_MIPS-1]; 35 36static float basemip[NUM_MIPS-1] = {1.0, 0.5*0.8, 0.25*0.8}; 37 38extern int d_aflatcolor; 39 40void (*d_drawspans) (espan_t *pspan); 41 42 43/* 44=============== 45D_Init 46=============== 47*/ 48void D_Init (void) 49{ 50 51 r_skydirect = 1; 52 53 Cvar_RegisterVariable (&d_subdiv16); 54 Cvar_RegisterVariable (&d_mipcap); 55 Cvar_RegisterVariable (&d_mipscale); 56 57 r_drawpolys = false; 58 r_worldpolysbacktofront = false; 59 r_recursiveaffinetriangles = true; 60 r_pixbytes = 1; 61 r_aliasuvscale = 1.0; 62} 63 64 65/* 66=============== 67D_CopyRects 68=============== 69*/ 70void D_CopyRects (vrect_t *prects, int transparent) 71{ 72 73// this function is only required if the CPU doesn't have direct access to the 74// back buffer, and there's some driver interface function that the driver 75// doesn't support and requires Quake to do in software (such as drawing the 76// console); Quake will then draw into wherever the driver points vid.buffer 77// and will call this function before swapping buffers 78 79 UNUSED(prects); 80 UNUSED(transparent); 81} 82 83 84/* 85=============== 86D_EnableBackBufferAccess 87=============== 88*/ 89void D_EnableBackBufferAccess (void) 90{ 91 92 VID_LockBuffer (); 93} 94 95 96/* 97=============== 98D_TurnZOn 99=============== 100*/ 101void D_TurnZOn (void) 102{ 103// not needed for software version 104} 105 106 107/* 108=============== 109D_DisableBackBufferAccess 110=============== 111*/ 112void D_DisableBackBufferAccess (void) 113{ 114 VID_UnlockBuffer (); 115} 116 117 118/* 119=============== 120D_SetupFrame 121=============== 122*/ 123void D_SetupFrame (void) 124{ 125 int i; 126 127 if (r_dowarp) 128 d_viewbuffer = r_warpbuffer; 129 else 130 d_viewbuffer = (void *)(byte *)vid.buffer; 131 132 if (r_dowarp) 133 screenwidth = WARP_WIDTH; 134 else 135 screenwidth = vid.rowbytes; 136 137 d_roverwrapped = false; 138 d_initial_rover = sc_rover; 139 140 d_minmip = d_mipcap.value; 141 if (d_minmip > 3) 142 d_minmip = 3; 143 else if (d_minmip < 0) 144 d_minmip = 0; 145 146 for (i=0 ; i<(NUM_MIPS-1) ; i++) 147 d_scalemip[i] = basemip[i] * d_mipscale.value; 148 149#if id386 150 if (d_subdiv16.value) 151 d_drawspans = D_DrawSpans16; 152 else 153 d_drawspans = D_DrawSpans8; 154#else 155 d_drawspans = D_DrawSpans8; 156#endif 157 158 d_aflatcolor = 0; 159} 160 161 162/* 163=============== 164D_UpdateRects 165=============== 166*/ 167void D_UpdateRects (vrect_t *prect) 168{ 169 170// the software driver draws these directly to the vid buffer 171 172 UNUSED(prect); 173} 174 175