/* ===================== idRenderSystemLocal::DrawBigChar ===================== */ void idRenderSystemLocal::DrawBigChar( int x, int y, int ch ) { int row, col; float frow, fcol; float size; ch &= 255; if( ch == ' ' ) { return; } if( y < -BIGCHAR_HEIGHT ) { return; } row = ch >> 4; col = ch & 15; frow = row * 0.0625f; fcol = col * 0.0625f; size = 0.0625f; DrawStretchPic( x, y, BIGCHAR_WIDTH, BIGCHAR_HEIGHT, fcol, frow, fcol + size, frow + size, charSetMaterial ); }
/* ===================== idRenderSystemLocal::DrawSmallChar small chars are drawn at native screen resolution ===================== */ void idRenderSystemLocal::DrawSmallChar( int x, int y, int ch, const idMaterial *material ) { int row, col; float frow, fcol; float size; ch &= 255; if ( ch == ' ' ) { return; } if ( y < -SMALLCHAR_HEIGHT ) { return; } row = ch >> 4; col = ch & 15; frow = row * 0.0625f; fcol = col * 0.0625f; size = 0.0625f; DrawStretchPic( x, y, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, fcol, frow, fcol + size, frow + size, material ); }
/* ============= idRenderSystemLocal::DrawStretchPic ============= */ void idRenderSystemLocal::DrawStretchPic( float x, float y, float w, float h, float s1, float t1, float s2, float t2, const idMaterial* material ) { DrawStretchPic( idVec4( x, y, s1, t1 ), idVec4( x + w, y, s2, t1 ), idVec4( x + w, y + h, s2, t2 ), idVec4( x, y + h, s1, t2 ), material ); }
/* ============= idRenderSystemLocal::DrawFilled ============= */ void idRenderSystemLocal::DrawFilled( const idVec4& color, float x, float y, float w, float h ) { SetColor( color ); DrawStretchPic( x, y, w, h, 0.0f, 0.0f, 1.0f, 1.0f, whiteMaterial ); }
/* ============= DrawStretchPic x/y/w/h are in the 0,0 to 640,480 range ============= */ void idGuiModel::DrawStretchPic( float x, float y, float w, float h, float s1, float t1, float s2, float t2, const idMaterial *hShader ) { idDrawVert verts[4]; glIndex_t indexes[6]; if ( !glConfig.isInitialized ) { return; } if ( !hShader ) { return; } // clip to edges, because the pic may be going into a guiShader // instead of full screen if ( x < 0 ) { s1 += ( s2 - s1 ) * -x / w; w += x; x = 0; } if ( y < 0 ) { t1 += ( t2 - t1 ) * -y / h; h += y; y = 0; } if ( x + w > 640 ) { s2 -= ( s2 - s1 ) * ( x + w - 640 ) / w; w = 640 - x; } if ( y + h > 480 ) { t2 -= ( t2 - t1 ) * ( y + h - 480 ) / h; h = 480 - y; } if ( w <= 0 || h <= 0 ) { return; // completely clipped away } indexes[0] = 3; indexes[1] = 0; indexes[2] = 2; indexes[3] = 2; indexes[4] = 0; indexes[5] = 1; verts[0].xyz[0] = x; verts[0].xyz[1] = y; verts[0].xyz[2] = 0; verts[0].st[0] = s1; verts[0].st[1] = t1; verts[0].normal[0] = 0; verts[0].normal[1] = 0; verts[0].normal[2] = 1; verts[0].tangents[0][0] = 1; verts[0].tangents[0][1] = 0; verts[0].tangents[0][2] = 0; verts[0].tangents[1][0] = 0; verts[0].tangents[1][1] = 1; verts[0].tangents[1][2] = 0; verts[1].xyz[0] = x + w; verts[1].xyz[1] = y; verts[1].xyz[2] = 0; verts[1].st[0] = s2; verts[1].st[1] = t1; verts[1].normal[0] = 0; verts[1].normal[1] = 0; verts[1].normal[2] = 1; verts[1].tangents[0][0] = 1; verts[1].tangents[0][1] = 0; verts[1].tangents[0][2] = 0; verts[1].tangents[1][0] = 0; verts[1].tangents[1][1] = 1; verts[1].tangents[1][2] = 0; verts[2].xyz[0] = x + w; verts[2].xyz[1] = y + h; verts[2].xyz[2] = 0; verts[2].st[0] = s2; verts[2].st[1] = t2; verts[2].normal[0] = 0; verts[2].normal[1] = 0; verts[2].normal[2] = 1; verts[2].tangents[0][0] = 1; verts[2].tangents[0][1] = 0; verts[2].tangents[0][2] = 0; verts[2].tangents[1][0] = 0; verts[2].tangents[1][1] = 1; verts[2].tangents[1][2] = 0; verts[3].xyz[0] = x; verts[3].xyz[1] = y + h; verts[3].xyz[2] = 0; verts[3].st[0] = s1; verts[3].st[1] = t2; verts[3].normal[0] = 0; verts[3].normal[1] = 0; verts[3].normal[2] = 1; verts[3].tangents[0][0] = 1; verts[3].tangents[0][1] = 0; verts[3].tangents[0][2] = 0; verts[3].tangents[1][0] = 0; verts[3].tangents[1][1] = 1; verts[3].tangents[1][2] = 0; DrawStretchPic( &verts[0], &indexes[0], 4, 6, hShader, false, 0.0f, 0.0f, 640.0f, 480.0f ); }