// Repeat a texture void iV_DrawImageRepeatX(IMAGEFILE *ImageFile, UWORD ID, int x, int y, int Width) { int hRep, hRemainder; assertValidImage(ImageFile, ID); const ImageDef *Image = &ImageFile->imageDefs[ID]; pie_SetRendMode(REND_OPAQUE); pie_SetAlphaTest(true); PIERECT dest; Vector2i pieImage = makePieImage(ImageFile, ID, &dest, x, y); hRemainder = Width % Image->Width; for (hRep = 0; hRep < Width / Image->Width; hRep++) { pie_DrawImage(ImageFile, ID, pieImage, &dest); dest.x += Image->Width; } // draw remainder if (hRemainder > 0) { pieImage.x = hRemainder; dest.w = hRemainder; pie_DrawImage(ImageFile, ID, pieImage, &dest); } }
void iV_DrawImageRepeatY(IMAGEFILE *ImageFile, UWORD ID, int x, int y, int Height) { int vRep, vRemainder; assertValidImage(ImageFile, ID); const ImageDef *Image = &ImageFile->imageDefs[ID]; pie_SetRendMode(REND_OPAQUE); pie_SetAlphaTest(true); PIERECT dest; Vector2i pieImage = makePieImage(ImageFile, ID, &dest, x, y); vRemainder = Height % Image->Height; for (vRep = 0; vRep < Height / Image->Height; vRep++) { pie_DrawImage(ImageFile, ID, pieImage, &dest); dest.y += Image->Height; } // draw remainder if (vRemainder > 0) { pieImage.y = vRemainder; dest.h = vRemainder; pie_DrawImage(ImageFile, ID, pieImage, &dest); } }
void pie_RenderRadarRotated(IMAGEDEF *Image,iBitmap *Bmp,UDWORD Modulus,int x,int y,int angle) { PIEIMAGE pieImage; PIERECT dest; //special case of pie_ImageDef switch (pie_GetRenderEngine()) { case ENGINE_4101: case ENGINE_SR: pie_ImageDef(Image,Bmp,Modulus,x,y,FALSE); break; case ENGINE_GLIDE: pie_ImageDef(Image,Bmp,Modulus,x,y,TRUE); break; case ENGINE_D3D: pie_SetBilinear(TRUE); pie_SetRendMode(REND_GOURAUD_TEX); pie_SetColour(COLOURINTENSITY); pie_SetColourKeyedBlack(TRUE); //special case function because texture is held outside of texture list pieImage.texPage = RADAR_TEXPAGE_D3D; pieImage.tu = 0; pieImage.tv = 0; pieImage.tw = dtm_GetRadarTexImageSize(); pieImage.th = dtm_GetRadarTexImageSize(); dest.x = x; dest.y = y; dest.w = 128; dest.h = 128; pie_DrawImage(&pieImage, &dest, &rendStyle); default: break; } }
void iV_DrawImageTc(Image image, Image imageTc, int x, int y, PIELIGHT colour) { if (!assertValidImage(image.images, image.id) || !assertValidImage(imageTc.images, imageTc.id)) { return; } PIERECT dest; Vector2i pieImage = makePieImage(image.images, image.id, &dest, x, y); Vector2i pieImageTc = makePieImage(imageTc.images, imageTc.id); pie_SetRendMode(REND_ALPHA); pie_DrawImage(image.images, image.id, pieImage, &dest); pie_DrawImage(imageTc.images, imageTc.id, pieImageTc, &dest, colour); }
void iV_DrawImageTc(IMAGEFILE *imageFile, unsigned id, unsigned idTc, int x, int y, PIELIGHT colour) { if (!assertValidImage(imageFile, id) || !assertValidImage(imageFile, idTc)) { return; } PIERECT dest; PIEIMAGE pieImage = makePieImage(imageFile, id, &dest, x, y); PIEIMAGE pieImageTc = makePieImage(imageFile, idTc); pie_SetRendMode(REND_ALPHA); pie_SetAlphaTest(true); pie_DrawImage(&pieImage, &dest); pie_DrawImage(&pieImageTc, &dest, colour); }
void iV_DrawImage(IMAGEFILE *ImageFile, UWORD ID, int x, int y) { if (!assertValidImage(ImageFile, ID)) { return; } PIERECT dest; Vector2i pieImage = makePieImage(ImageFile, ID, &dest, x, y); pie_SetRendMode(REND_ALPHA); pie_DrawImage(ImageFile, ID, pieImage, &dest); }
void iV_DrawImageScaled(IMAGEFILE *ImageFile, UWORD ID, int x, int y, int w, int h) { if (!assertValidImage(ImageFile, ID)) { return; } PIERECT dest; Vector2i pieImage = makePieImage(ImageFile, ID, &dest, x, y); dest.w = w; dest.h = h; pie_SetRendMode(REND_ALPHA); pie_SetAlphaTest(true); pie_DrawImage(ImageFile, ID, pieImage, &dest); }
void pie_ImageDef(IMAGEDEF *Image,iBitmap *Bmp,UDWORD Modulus,int x,int y,BOOL bBilinear) { PIEIMAGE pieImage; PIERECT dest; pie_SetBilinear(bBilinear); //changed by alex 19 oct 98 pie_SetRendMode(REND_GOURAUD_TEX); pie_SetColour(COLOURINTENSITY); pie_SetColourKeyedBlack(TRUE); switch (pie_GetRenderEngine()) { case ENGINE_4101: case ENGINE_SR: // Modulus = ImageFile->TexturePages[Image->TPageID].width; // Bmp = ImageFile->TexturePages[Image->TPageID].bmp; Bmp += ((UDWORD)Image->Tu) + ((UDWORD)Image->Tv) * Modulus; iV_ppBitmapTrans(Bmp,x+Image->XOffset,y+Image->YOffset, Image->Width,Image->Height,Modulus); break; case ENGINE_GLIDE: gl_IntelBitmap(Image->TPageID, Image->Tu, Image->Tv, Image->Width, Image->Height, x+Image->XOffset, y+Image->YOffset, Image->Width, Image->Height); break; case ENGINE_D3D: pieImage.texPage = Image->TPageID; pieImage.tu = Image->Tu; pieImage.tv = Image->Tv; pieImage.tw = Image->Width; pieImage.th = Image->Height; dest.x = x+Image->XOffset; dest.y = y+Image->YOffset; dest.w = Image->Width; dest.h = Image->Height; pie_DrawImage(&pieImage, &dest, &rendStyle); default: break; } pie_SetBilinear(FALSE); //changed by alex 19 oct 98 }
void pie_ImageFileIDStretch(IMAGEFILE *ImageFile,UWORD ID,int x,int y,int Width,int Height) { IMAGEDEF *Image; PIEIMAGE pieImage; PIERECT dest; assert(ID < ImageFile->Header.NumImages); Image = &ImageFile->ImageDefs[ID]; pie_SetBilinear(FALSE); pie_SetRendMode(REND_GOURAUD_TEX); pie_SetColour(COLOURINTENSITY); pie_SetColourKeyedBlack(TRUE); switch (pie_GetRenderEngine()) { case ENGINE_4101: case ENGINE_SR: break; case ENGINE_GLIDE: gl_DrawStretchImage(ImageFile, ID, x, y, Width, Height); break; case ENGINE_D3D: pieImage.texPage = ImageFile->TPageIDs[Image->TPageID]; pieImage.tu = Image->Tu; pieImage.tv = Image->Tv; pieImage.tw = Image->Width; pieImage.th = Image->Height; dest.x = x+Image->XOffset; dest.y = y+Image->YOffset; dest.w = Width; dest.h = Height; pie_DrawImage(&pieImage, &dest, &rendStyle); default: break; } }
void iV_DrawImage(IMAGEFILE *ImageFile, UWORD ID, int x, int y) { IMAGEDEF *Image; PIEIMAGE pieImage; PIERECT dest; ASSERT_OR_RETURN(, ID < ImageFile->NumImages, "Out of range 1: %d", (int)ID); Image = &ImageFile->ImageDefs[ID]; ASSERT_OR_RETURN(, Image->TPageID < MAX_NUM_TPAGEIDS, "Out of range 2: %d", (int)Image->TPageID); pie_SetRendMode(REND_ALPHA); pie_SetAlphaTest(true); pieImage.texPage = ImageFile->TPageIDs[Image->TPageID]; pieImage.tu = Image->Tu; pieImage.tv = Image->Tv; pieImage.tw = Image->Width; pieImage.th = Image->Height; dest.x = x + Image->XOffset; dest.y = y + Image->YOffset; dest.w = Image->Width; dest.h = Image->Height; pie_DrawImage(&pieImage, &dest); }
void iV_DrawImageRect(IMAGEFILE *ImageFile, UWORD ID, int x, int y, int Width, int Height) { SDWORD hRep, hRemainder, vRep, vRemainder; assertValidImage(ImageFile, ID); ImageDef *Image = &ImageFile->imageDefs[ID]; pie_SetRendMode(REND_OPAQUE); pie_SetAlphaTest(true); PIERECT dest; PIEIMAGE pieImage = makePieImage(ImageFile, ID, &dest, x, y); vRemainder = Height % Image->Height; hRemainder = Width % Image->Width; for (vRep = 0; vRep < Height/Image->Height; vRep++) { pieImage.tw = Image->Width; dest.x = x + Image->XOffset; dest.w = Image->Width; for (hRep = 0; hRep < Width/Image->Width; hRep++) { pie_DrawImage(&pieImage, &dest); dest.x += Image->Width; } //draw remainder if (hRemainder > 0) { pieImage.tw = hRemainder; dest.w = hRemainder; pie_DrawImage(&pieImage, &dest); } dest.y += Image->Height; } //draw remainder if (vRemainder > 0) { //as above pieImage.tw = Image->Width; dest.x = x + Image->XOffset; dest.w = Image->Width; pieImage.th = vRemainder; dest.h = vRemainder; for (hRep = 0; hRep < Width/Image->Width; hRep++) { pie_DrawImage(&pieImage, &dest); dest.x += Image->Width; } //draw remainder if (hRemainder > 0) { pieImage.tw = hRemainder; dest.w = hRemainder; pie_DrawImage(&pieImage, &dest); } } }
/*************************************************************************** * pie_Drawimage * * General purpose blit function * Will support zbuffering, non_textured, coloured lighting and alpha effects * * replaces all ivis blit functions * ***************************************************************************/ void pie_DrawImage(const PIEIMAGE *image, const PIERECT *dest) { pie_DrawImage(image, dest, WZCOL_WHITE); }
void iV_DrawImageRect(IMAGEFILE *ImageFile, UWORD ID, int x, int y, int Width, int Height) { IMAGEDEF *Image; SDWORD hRep, hRemainder, vRep, vRemainder; PIEIMAGE pieImage; PIERECT dest; ASSERT_OR_RETURN(, ID < ImageFile->NumImages, "Out of range 1: %d", (int)ID); Image = &ImageFile->ImageDefs[ID]; ASSERT_OR_RETURN(, Image->TPageID < MAX_NUM_TPAGEIDS, "Out of range 2: %d", (int)Image->TPageID); pie_SetRendMode(REND_OPAQUE); pie_SetAlphaTest(true); pieImage.texPage = ImageFile->TPageIDs[Image->TPageID]; pieImage.tu = Image->Tu; pieImage.tv = Image->Tv; pieImage.tw = Image->Width; pieImage.th = Image->Height; dest.x = x + Image->XOffset; dest.y = y + Image->YOffset; dest.w = Image->Width; dest.h = Image->Height; vRemainder = Height % Image->Height; hRemainder = Width % Image->Width; for (vRep = 0; vRep < Height/Image->Height; vRep++) { pieImage.tw = Image->Width; dest.x = x + Image->XOffset; dest.w = Image->Width; for (hRep = 0; hRep < Width/Image->Width; hRep++) { pie_DrawImage(&pieImage, &dest); dest.x += Image->Width; } //draw remainder if (hRemainder > 0) { pieImage.tw = hRemainder; dest.w = hRemainder; pie_DrawImage(&pieImage, &dest); } dest.y += Image->Height; } //draw remainder if (vRemainder > 0) { //as above pieImage.tw = Image->Width; dest.x = x + Image->XOffset; dest.w = Image->Width; pieImage.th = vRemainder; dest.h = vRemainder; for (hRep = 0; hRep < Width/Image->Width; hRep++) { pie_DrawImage(&pieImage, &dest); dest.x += Image->Width; } //draw remainder if (hRemainder > 0) { pieImage.tw = hRemainder; dest.w = hRemainder; pie_DrawImage(&pieImage, &dest); } } }
void pie_ImageFileIDTile(IMAGEFILE *ImageFile,UWORD ID,int x,int y,int x0,int y0,int Width,int Height) { IMAGEDEF *Image; SDWORD hRep, hRemainder, vRep, vRemainder; PIEIMAGE pieImage; PIERECT dest; assert(ID < ImageFile->Header.NumImages); assert(x0 == 0); assert(y0 == 0); Image = &ImageFile->ImageDefs[ID]; pie_SetBilinear(FALSE); pie_SetRendMode(REND_GOURAUD_TEX); pie_SetColour(COLOURINTENSITY); pie_SetColourKeyedBlack(TRUE); switch (pie_GetRenderEngine()) { case ENGINE_4101: case ENGINE_SR: DrawImageRect(ImageFile, ID, x, y, x0, y0, Width, Height); break; case ENGINE_GLIDE: gl_DrawImageRect(ImageFile, ID, x, y, x0, y0, Width, Height); break; case ENGINE_D3D: pieImage.texPage = ImageFile->TPageIDs[Image->TPageID]; pieImage.tu = Image->Tu; pieImage.tv = Image->Tv; pieImage.tw = Image->Width; pieImage.th = Image->Height; dest.x = x+Image->XOffset; dest.y = y+Image->YOffset; dest.w = Image->Width; dest.h = Image->Height; vRep = Height/Image->Height; vRemainder = Height - (vRep * Image->Height); while(vRep > 0) { hRep = Width/Image->Width; hRemainder = Width - (hRep * Image->Width); pieImage.tw = Image->Width; dest.x = x+Image->XOffset; dest.w = Image->Width; while(hRep > 0) { pie_DrawImage(&pieImage, &dest, &rendStyle); hRep --; dest.x += Image->Width; } //draw remainder if (hRemainder > 0) { pieImage.tw = hRemainder; dest.w = hRemainder; pie_DrawImage(&pieImage, &dest, &rendStyle); } vRep --; dest.y += Image->Height; } //draw remainder if (vRemainder > 0) { hRep = Width/Image->Width; hRemainder = Width - (hRep * Image->Width); pieImage.th = vRemainder; dest.h = vRemainder; //as above { pieImage.tw = Image->Width; dest.x = x+Image->XOffset; dest.w = Image->Width; while(hRep > 0) { pie_DrawImage(&pieImage, &dest, &rendStyle); hRep --; dest.x += Image->Width; } //draw remainder if (hRemainder > 0) { pieImage.tw = hRemainder; dest.w = hRemainder; pie_DrawImage(&pieImage, &dest, &rendStyle); } } } default: break; } }
void pie_ImageFileID(IMAGEFILE *ImageFile,UWORD ID,int x,int y) { IMAGEDEF *Image; iBitmap *bmp; UDWORD modulus; PIEIMAGE pieImage; PIERECT dest; SDWORD width; SDWORD height; SDWORD delta; SDWORD div,wave; assert(ID < ImageFile->Header.NumImages); Image = &ImageFile->ImageDefs[ID]; if(pie_GetAdditiveSprites()) { pie_SetBilinear(TRUE); pie_SetRendMode(REND_ALPHA_TEX); pie_SetColour(addSpriteLevel); pie_SetColourKeyedBlack(TRUE); } else { pie_SetBilinear(FALSE); pie_SetRendMode(REND_GOURAUD_TEX); pie_SetColour(COLOURINTENSITY); pie_SetColourKeyedBlack(TRUE); } switch (pie_GetRenderEngine()) { case ENGINE_4101: case ENGINE_SR: width = Image->Width; height = Image->Height; modulus = ImageFile->TexturePages[Image->TPageID].width; bmp = ImageFile->TexturePages[Image->TPageID].bmp; bmp += ((UDWORD)Image->Tu) + ((UDWORD)Image->Tv) * modulus; x +=Image->XOffset; y +=Image->YOffset; //clip //clip if (x < psRendSurface->clip.left)//off left hand edge { delta = psRendSurface->clip.left - x; if (delta < width) { bmp += delta; x += delta; width -= delta; } else { return; } } if ((x + width) > (psRendSurface->clip.right + 1)) { delta = (x + width) - (psRendSurface->clip.right + 1); if (delta < width) { width -= delta; } else { return; } } if (y < psRendSurface->clip.top) { delta = psRendSurface->clip.top - y; if (delta < height) { bmp+= delta * modulus; y += delta; height -= delta; } else { return; } } if ((y + height) > (psRendSurface->clip.bottom + 1)) { delta = (y + height) - (psRendSurface->clip.bottom + 1); if (delta < height) { height -= delta; } else { return; } } iV_ppBitmapTrans(bmp,x,y,width,height,modulus); break; case ENGINE_GLIDE: if(pie_WaveBlit()) { wave = getTimeValueRange(2880,360); div = 96*SIN(DEG(wave)); div = div/4096; div = 96+div; // gl_IntelBitmap(ImageFile->TPageIDs[Image->TPageID], Image->Tu, Image->Tv, Image->Width, Image->Height, // x+Image->XOffset-wave/2, y+Image->YOffset-wave/2, Image->Width+wave, Image->Height+wave); gl_DrawStretchImage(ImageFile, ID, x+Image->XOffset-div/2,y+Image->YOffset , Image->Width+div, Image->Height); } else { gl_IntelBitmap(ImageFile->TPageIDs[Image->TPageID], Image->Tu, Image->Tv, Image->Width, Image->Height, x+Image->XOffset, y+Image->YOffset, Image->Width, Image->Height); //gl_DrawStretchImage(ImageFile, ID, x+Image->XOffset,y+Image->YOffset , // Image->Width, Image->Height); } break; case ENGINE_D3D: pieImage.texPage = ImageFile->TPageIDs[Image->TPageID]; pieImage.tu = Image->Tu; pieImage.tv = Image->Tv; pieImage.tw = Image->Width; pieImage.th = Image->Height; dest.x = x+Image->XOffset; dest.y = y+Image->YOffset; dest.w = Image->Width; dest.h = Image->Height; pie_DrawImage(&pieImage, &dest, &rendStyle); default: break; } }
void pie_DrawImageFileID(IMAGEFILE *ImageFile,UWORD ID,int x,int y) { IMAGEDEF *Image; iBitmap *bmp; UDWORD modulus; PIEIMAGE pieImage; PIERECT dest; SDWORD width; SDWORD height; SDWORD delta; assert(ID < ImageFile->Header.NumImages); Image = &ImageFile->ImageDefs[ID]; switch (pie_GetRenderEngine()) { case ENGINE_4101: case ENGINE_SR: width = Image->Width; height = Image->Height; modulus = ImageFile->TexturePages[Image->TPageID].width; bmp = ImageFile->TexturePages[Image->TPageID].bmp; bmp += ((UDWORD)Image->Tu) + ((UDWORD)Image->Tv) * modulus; x +=Image->XOffset; y +=Image->YOffset; //clip if (x < psRendSurface->clip.left)//off left hand edge { delta = psRendSurface->clip.left - x; if (delta < width) { bmp += delta; x += delta; width -= delta; } else { return; } } if ((x + width) > (psRendSurface->clip.right + 1)) { delta = (x + width) - (psRendSurface->clip.right + 1); if (delta < width) { width -= delta; } else { return; } } if (y < psRendSurface->clip.top) { delta = psRendSurface->clip.top - y; if (delta < height) { bmp+= delta * modulus; y += delta; height -= delta; } else { return; } } if ((y + height) > (psRendSurface->clip.bottom + 1)) { delta = (y + height) - (psRendSurface->clip.bottom + 1); if (delta < height) { height -= delta; } else { return; } } iV_ppBitmapTrans(bmp,x,y,width,height,modulus); break; case ENGINE_GLIDE: gl_IntelBitmap(ImageFile->TPageIDs[Image->TPageID], Image->Tu, Image->Tv, Image->Width, Image->Height, x+Image->XOffset, y+Image->YOffset, Image->Width, Image->Height); break; case ENGINE_D3D: pieImage.texPage = ImageFile->TPageIDs[Image->TPageID]; pieImage.tu = Image->Tu; pieImage.tv = Image->Tv; pieImage.tw = Image->Width; pieImage.th = Image->Height; dest.x = x+Image->XOffset; dest.y = y+Image->YOffset; dest.w = Image->Width; dest.h = Image->Height; pie_DrawImage(&pieImage, &dest, &rendStyle); default: break; } }