Ejemplo n.º 1
0
// 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);
	}
}
Ejemplo n.º 2
0
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);
	}
}
Ejemplo n.º 3
0
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;
	}
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 6
0
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);
}
Ejemplo n.º 7
0
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);
}
Ejemplo n.º 8
0
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

}
Ejemplo n.º 9
0
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;
	}
}
Ejemplo n.º 10
0
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);
}
Ejemplo n.º 11
0
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);
		}
	}
}
Ejemplo n.º 12
0
/***************************************************************************
 * 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);
}
Ejemplo n.º 13
0
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);
		}
	}
}
Ejemplo n.º 14
0
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;
	}
}
Ejemplo n.º 15
0
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;
	}
}
Ejemplo n.º 16
0
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;
	}
}