ILimage *MakeD3D8Compliant(IDirect3DDevice8 *Device, D3DFORMAT *DestFormat) { ILimage *Converted, *Scaled, *CurImage; *DestFormat = D3DFMT_A8R8G8B8; // Images must be in BGRA format. if (ilutCurImage->Format != IL_BGRA) { Converted = iConvertImage(ilutCurImage, IL_BGRA, IL_UNSIGNED_BYTE); if (Converted == NULL) return NULL; } else { Converted = ilutCurImage; } // Images must have their origin in the upper left. if (Converted->Origin != IL_ORIGIN_UPPER_LEFT) { CurImage = ilutCurImage; ilSetCurImage(Converted); iluFlipImage(); ilSetCurImage(CurImage); } // Images must have powers-of-2 dimensions. if (ilNextPower2(ilutCurImage->Width) != ilutCurImage->Width || ilNextPower2(ilutCurImage->Height) != ilutCurImage->Height || ilNextPower2(ilutCurImage->Depth) != ilutCurImage->Depth) { Scaled = iluScale_(Converted, ilNextPower2(ilutCurImage->Width), ilNextPower2(ilutCurImage->Height), ilNextPower2(ilutCurImage->Depth)); if (Converted != ilutCurImage) { ilCloseImage(Converted); } if (Scaled == NULL) { return NULL; } Converted = Scaled; } return Converted; }
ILimage *MakeD3D10Compliant(ID3D10Device *Device, DXGI_FORMAT *DestFormat) { ILimage *Converted, *Scaled, *CurImage; ILuint nConversionType, ilutFormat; ILboolean bForceIntegerFormat = ilutGetBoolean(ILUT_FORCE_INTEGER_FORMAT); Device; ilutFormat = ilutCurImage->Format; nConversionType = ilutCurImage->Type; if (!ilutCurImage) return NULL; switch (ilutCurImage->Type) { case IL_UNSIGNED_BYTE: case IL_BYTE: case IL_SHORT: case IL_UNSIGNED_SHORT: case IL_INT: case IL_UNSIGNED_INT: *DestFormat = DXGI_FORMAT_R8G8B8A8_UINT; nConversionType = IL_UNSIGNED_BYTE; ilutFormat = IL_RGBA; break; case IL_FLOAT: case IL_DOUBLE: case IL_HALF: if (bForceIntegerFormat || (!FormatsDX10supported[6])) { *DestFormat = DXGI_FORMAT_R8G8B8A8_UINT; nConversionType = IL_UNSIGNED_BYTE; ilutFormat = IL_RGBA; } else { *DestFormat = DXGI_FORMAT_R32G32B32A32_FLOAT; nConversionType = IL_HALF; ilutFormat = IL_RGBA; } break; } // Images must be in BGRA format. if (((ilutCurImage->Format != ilutFormat)) || (ilutCurImage->Type != nConversionType)) { Converted = iConvertImage(ilutCurImage, ilutFormat, nConversionType); if (Converted == NULL) return NULL; } else { Converted = ilutCurImage; } // Images must have their origin in the upper left. if (Converted->Origin != IL_ORIGIN_UPPER_LEFT) { CurImage = ilutCurImage; ilSetCurImage(Converted); iluFlipImage(); ilSetCurImage(CurImage); } // Images must have powers-of-2 dimensions. if (ilNextPower2(ilutCurImage->Width) != ilutCurImage->Width || ilNextPower2(ilutCurImage->Height) != ilutCurImage->Height || ilNextPower2(ilutCurImage->Depth) != ilutCurImage->Depth) { Scaled = iluScale_(Converted, ilNextPower2(ilutCurImage->Width), ilNextPower2(ilutCurImage->Height), 1); //@TODO: 1 should be ilNextPower2(ilutCurImage->Depth) if (Converted != ilutCurImage) { ilCloseImage(Converted); } if (Scaled == NULL) { return NULL; } Converted = Scaled; } return Converted; }
ILimage *MakeD3D9Compliant(IDirect3DDevice9 *Device, D3DFORMAT *DestFormat) { ILuint color; ILimage *Converted, *Scaled, *CurImage; *DestFormat = D3DFMT_A8R8G8B8; // Images must be in BGRA format. if (ilutCurImage->Format != IL_BGRA) { Converted = iConvertImage(ilutCurImage, IL_BGRA, IL_UNSIGNED_BYTE); if (Converted == NULL) return NULL; } else { Converted = ilutCurImage; } // perform alpha key on images if requested color=ilutGetInteger(ILUT_D3D_ALPHA_KEY_COLOR); if(color>=0) { ILubyte *data; ILubyte *maxdata; ILuint t; data=(Converted->Data); maxdata=(Converted->Data+Converted->SizeOfData); while(data<maxdata) { t= (data[2]<<16) + (data[1]<<8) + (data[0]) ; if((t&0x00ffffff)==(color&0x00ffffff)) { data[0]=0; data[1]=0; data[2]=0; data[3]=0; } data+=4; } } // Images must have their origin in the upper left. if (Converted->Origin != IL_ORIGIN_UPPER_LEFT) { CurImage = ilutCurImage; ilSetCurImage(Converted); iluFlipImage(); ilSetCurImage(CurImage); } // Images must have powers-of-2 dimensions. if (ilNextPower2(ilutCurImage->Width) != ilutCurImage->Width || ilNextPower2(ilutCurImage->Height) != ilutCurImage->Height || ilNextPower2(ilutCurImage->Depth) != ilutCurImage->Depth) { Scaled = iluScale_(Converted, ilNextPower2(ilutCurImage->Width), ilNextPower2(ilutCurImage->Height), ilNextPower2(ilutCurImage->Depth)); if (Converted != ilutCurImage) { ilCloseImage(Converted); } if (Scaled == NULL) { return NULL; } Converted = Scaled; } return Converted; }