Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
290
rylCoder_16.02.2008_src/addons/DevIL/src-IL/src/il_fastconv.c
Normal file
290
rylCoder_16.02.2008_src/addons/DevIL/src-IL/src/il_fastconv.c
Normal file
@@ -0,0 +1,290 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// ImageLib Sources
|
||||
// Copyright (C) 2000-2002 by Denton Woods
|
||||
// Last modified: 06/13/2002 <--Y2K Compliant! =]
|
||||
//
|
||||
// Filename: src-IL/src/il_fastconv.c
|
||||
//
|
||||
// Description: Converts between several image formats
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
#include "il_internal.h"
|
||||
#ifdef ALTIVEC_GCC
|
||||
#include "altivec_typeconversion.h"
|
||||
#endif
|
||||
|
||||
ILboolean iFastConvert(ILenum DestFormat)
|
||||
{
|
||||
ILubyte *BytePtr = iCurImage->Data;
|
||||
ILushort *ShortPtr = (ILushort*)iCurImage->Data;
|
||||
ILuint *IntPtr = (ILuint*)iCurImage->Data;
|
||||
ILfloat *FloatPtr = (ILfloat*)iCurImage->Data;
|
||||
ILdouble *DblPtr = (ILdouble*)iCurImage->Data;
|
||||
|
||||
#ifndef ALTIVEC_GCC
|
||||
ILuint SizeOfData, i=0;
|
||||
ILubyte TempByte = 0;
|
||||
ILushort TempShort = 0;
|
||||
ILuint TempInt = 0;
|
||||
ILfloat TempFloat = 0;
|
||||
ILdouble TempDbl = 0;
|
||||
#endif
|
||||
|
||||
switch (DestFormat)
|
||||
{
|
||||
case IL_RGB:
|
||||
case IL_BGR:
|
||||
if (iCurImage->Format != IL_RGB && iCurImage->Format != IL_BGR)
|
||||
return IL_FALSE;
|
||||
|
||||
switch (iCurImage->Type)
|
||||
{
|
||||
case IL_BYTE:
|
||||
case IL_UNSIGNED_BYTE:
|
||||
#ifdef ALTIVEC_GCC
|
||||
abc2cba_byte(BytePtr,iCurImage->SizeOfData,BytePtr);
|
||||
#else
|
||||
SizeOfData = iCurImage->SizeOfData / 3;
|
||||
#ifdef USE_WIN32_ASM
|
||||
__asm
|
||||
{
|
||||
mov ebx, BytePtr
|
||||
mov ecx, SizeOfData
|
||||
L1:
|
||||
mov al,[ebx+0]
|
||||
xchg al,[ebx+2]
|
||||
mov [ebx+0],al
|
||||
add ebx,3
|
||||
loop L1
|
||||
}
|
||||
#else
|
||||
for (i = 0; i < SizeOfData; i++) {
|
||||
TempByte = BytePtr[0];
|
||||
BytePtr[0] = BytePtr[2];
|
||||
BytePtr[2] = TempByte;
|
||||
BytePtr += 3;
|
||||
}
|
||||
#endif//USE_WIN32_ASM
|
||||
#endif
|
||||
return IL_TRUE;
|
||||
|
||||
case IL_SHORT:
|
||||
case IL_UNSIGNED_SHORT:
|
||||
#ifdef ALTIVEC_GCC
|
||||
abc2cba_short(ShortPtr,iCurImage->SizeOfData,ShortPtr);
|
||||
#else
|
||||
SizeOfData = iCurImage->SizeOfData / 6; // 3*2
|
||||
#ifdef USE_WIN32_ASM
|
||||
__asm
|
||||
{
|
||||
mov ebx, ShortPtr
|
||||
mov ecx, SizeOfData
|
||||
L2:
|
||||
mov ax,[ebx+0]
|
||||
xchg ax,[ebx+4]
|
||||
mov [ebx+0],ax
|
||||
add ebx,6
|
||||
loop L2
|
||||
}
|
||||
#else
|
||||
for (i = 0; i < SizeOfData; i++) {
|
||||
TempShort = ShortPtr[0];
|
||||
ShortPtr[0] = ShortPtr[2];
|
||||
ShortPtr[2] = TempShort;
|
||||
ShortPtr += 3;
|
||||
}
|
||||
#endif//USE_WIN32_ASM
|
||||
#endif
|
||||
return IL_TRUE;
|
||||
|
||||
case IL_INT:
|
||||
case IL_UNSIGNED_INT:
|
||||
#ifdef ALTIVEC_GCC
|
||||
abc2cba_int(IntPtr,iCurImage->SizeOfData,IntPtr);
|
||||
#else
|
||||
SizeOfData = iCurImage->SizeOfData / 12; // 3*4
|
||||
#ifdef USE_WIN32_ASM
|
||||
__asm
|
||||
{
|
||||
mov ebx, IntPtr
|
||||
mov ecx, SizeOfData
|
||||
L3:
|
||||
mov eax,[ebx+0]
|
||||
xchg eax,[ebx+8]
|
||||
mov [ebx+0],ax
|
||||
add ebx,12
|
||||
loop L3
|
||||
}
|
||||
#else
|
||||
for (i = 0; i < SizeOfData; i++) {
|
||||
TempInt = IntPtr[0];
|
||||
IntPtr[0] = IntPtr[2];
|
||||
IntPtr[2] = TempInt;
|
||||
IntPtr += 3;
|
||||
}
|
||||
#endif//USE_WIN32_ASM
|
||||
#endif
|
||||
return IL_TRUE;
|
||||
|
||||
case IL_FLOAT:
|
||||
#ifdef ALTIVEC_GCC
|
||||
abc2cba_float(FloatPtr,iCurImage->SizeOfData,FloatPtr);
|
||||
#else
|
||||
SizeOfData = iCurImage->SizeOfData / 12; // 3*4
|
||||
for (i = 0; i < SizeOfData; i++) {
|
||||
TempFloat = FloatPtr[0];
|
||||
FloatPtr[0] = FloatPtr[2];
|
||||
FloatPtr[2] = TempFloat;
|
||||
FloatPtr += 3;
|
||||
}
|
||||
#endif
|
||||
return IL_TRUE;
|
||||
|
||||
case IL_DOUBLE:
|
||||
#ifdef ALTIVEC_GCC
|
||||
abc2cba_double(DblPtr,iCurImage->SizeOfData,DblPtr);
|
||||
#else
|
||||
SizeOfData = iCurImage->SizeOfData / 24; // 3*8
|
||||
for (i = 0; i < SizeOfData; i++) {
|
||||
TempDbl = DblPtr[0];
|
||||
DblPtr[0] = DblPtr[2];
|
||||
DblPtr[2] = TempDbl;
|
||||
DblPtr += 3;
|
||||
}
|
||||
#endif
|
||||
return IL_TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case IL_RGBA:
|
||||
case IL_BGRA:
|
||||
if (iCurImage->Format != IL_RGBA && iCurImage->Format != IL_BGRA)
|
||||
return IL_FALSE;
|
||||
|
||||
switch (iCurImage->Type)
|
||||
{
|
||||
case IL_BYTE:
|
||||
case IL_UNSIGNED_BYTE:
|
||||
#ifdef ALTIVEC_GCC
|
||||
abcd2cbad_byte(BytePtr,iCurImage->SizeOfData,BytePtr);
|
||||
#else
|
||||
SizeOfData = iCurImage->SizeOfData / 4;
|
||||
#ifdef USE_WIN32_ASM
|
||||
__asm
|
||||
{
|
||||
mov ebx, BytePtr
|
||||
mov ecx, SizeOfData
|
||||
L4:
|
||||
mov eax,[ebx]
|
||||
bswap eax
|
||||
ror eax,8
|
||||
mov [ebx], eax
|
||||
add ebx,4
|
||||
loop L4
|
||||
}
|
||||
#else
|
||||
for (i = 0; i < SizeOfData; i++) {
|
||||
TempByte = BytePtr[0];
|
||||
BytePtr[0] = BytePtr[2];
|
||||
BytePtr[2] = TempByte;
|
||||
BytePtr += 4;
|
||||
}
|
||||
#endif//USE_WIN32_ASM
|
||||
#endif
|
||||
return IL_TRUE;
|
||||
|
||||
case IL_SHORT:
|
||||
case IL_UNSIGNED_SHORT:
|
||||
#ifdef ALTIVEC_GCC
|
||||
abcd2cbad_short(ShortPtr,iCurImage->SizeOfData,ShortPtr);
|
||||
#else
|
||||
SizeOfData = iCurImage->SizeOfData / 8; // 4*2
|
||||
#ifdef USE_WIN32_ASM
|
||||
__asm
|
||||
{
|
||||
mov ebx, ShortPtr
|
||||
mov ecx, SizeOfData
|
||||
L5:
|
||||
mov ax,[ebx+0]
|
||||
xchg ax,[ebx+4]
|
||||
mov [ebx+0],ax
|
||||
add ebx,8
|
||||
loop L5
|
||||
}
|
||||
#else
|
||||
for (i = 0; i < SizeOfData; i++) {
|
||||
TempShort = ShortPtr[0];
|
||||
ShortPtr[0] = ShortPtr[2];
|
||||
ShortPtr[2] = TempShort;
|
||||
ShortPtr += 4;
|
||||
}
|
||||
#endif//USE_WIN32_ASM
|
||||
#endif
|
||||
return IL_TRUE;
|
||||
|
||||
case IL_INT:
|
||||
case IL_UNSIGNED_INT:
|
||||
#ifdef ALTIVEC_GCC
|
||||
abcd2cbad_int(IntPtr,iCurImage->SizeOfData,IntPtr);
|
||||
#else
|
||||
SizeOfData = iCurImage->SizeOfData / 16; // 4*4
|
||||
#ifdef USE_WIN32_ASM
|
||||
__asm
|
||||
{
|
||||
mov ebx, IntPtr
|
||||
mov ecx, SizeOfData
|
||||
L6:
|
||||
mov eax,[ebx+0]
|
||||
xchg eax,[ebx+8]
|
||||
mov [ebx+0],ax
|
||||
add ebx,16
|
||||
loop L6
|
||||
}
|
||||
#else
|
||||
for (i = 0; i < SizeOfData; i++) {
|
||||
TempInt = IntPtr[0];
|
||||
IntPtr[0] = IntPtr[2];
|
||||
IntPtr[2] = TempInt;
|
||||
IntPtr += 4;
|
||||
}
|
||||
#endif//USE_WIN32_ASM
|
||||
#endif
|
||||
return IL_TRUE;
|
||||
|
||||
case IL_FLOAT:
|
||||
#ifdef ALTIVEC_GCC
|
||||
abcd2cbad_float(FloatPtr,iCurImage->SizeOfData,FloatPtr);
|
||||
#else
|
||||
SizeOfData = iCurImage->SizeOfData / 16; // 4*4
|
||||
for (i = 0; i < SizeOfData; i++) {
|
||||
TempFloat = FloatPtr[0];
|
||||
FloatPtr[0] = FloatPtr[2];
|
||||
FloatPtr[2] = TempFloat;
|
||||
FloatPtr += 4;
|
||||
}
|
||||
#endif
|
||||
return IL_TRUE;
|
||||
|
||||
case IL_DOUBLE:
|
||||
#ifdef ALTIVEC_GCC
|
||||
abcd2cbad_double(DblPtr,iCurImage->SizeOfData,DblPtr);
|
||||
#else
|
||||
SizeOfData = iCurImage->SizeOfData / 32; // 4*8
|
||||
for (i = 0; i < SizeOfData; i++) {
|
||||
TempDbl = DblPtr[0];
|
||||
DblPtr[0] = DblPtr[2];
|
||||
DblPtr[2] = TempDbl;
|
||||
DblPtr += 4;
|
||||
}
|
||||
#endif
|
||||
return IL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return IL_FALSE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user