diff options
author | b1indy <b1indy@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2007-07-21 20:48:07 +0000 |
---|---|---|
committer | b1indy <b1indy@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2007-07-21 20:48:07 +0000 |
commit | 4ddd757d3ee4fa079d8601e03dec0522940070cf (patch) | |
tree | 1733500840189743fb1390bbca271fd9daf1e47b | |
parent | 3c45a26796c089e79bce700729d019251adeeff3 (diff) | |
download | usdx-4ddd757d3ee4fa079d8601e03dec0522940070cf.tar.gz usdx-4ddd757d3ee4fa079d8601e03dec0522940070cf.tar.xz usdx-4ddd757d3ee4fa079d8601e03dec0522940070cf.zip |
Modified LoadTexture so that it ignores the Format parameter (for texture files, if supplied) but detects the file format by looking at the file's extension.
Now any supported filetype can be used to skin USDX (not only JPG or BMP, which was hardcoded default everywhere)
The remains of this former misguided policy are still in many places of the code and have to be removed over time.
Also tried to remove most of the non-english comments and variable names
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@314 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to '')
-rw-r--r-- | Game/Code/Classes/UTexture.pas | 461 |
1 files changed, 215 insertions, 246 deletions
diff --git a/Game/Code/Classes/UTexture.pas b/Game/Code/Classes/UTexture.pas index 275f0748..43a8737e 100644 --- a/Game/Code/Classes/UTexture.pas +++ b/Game/Code/Classes/UTexture.pas @@ -14,11 +14,6 @@ interface uses OpenGL12, Windows, Math, Classes, SysUtils, Graphics, JPEG, UThemes, PNGImage;
procedure glGenTextures(n: GLsizei; var textures: GLuint); stdcall; external opengl32;
-//procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external opengl32;
-//function gluBuild2DMipmaps (target: GLenum; components, width, height: GLint;
-// format, atype: GLenum; data: Pointer): Integer; stdcall; external glu32;
-//procedure glCopyTexImage2D(target: GLenum; level: GLint; internalFormat: GLenum; x, y: GLint; width, height: GLsizei; border: GLint); stdcall; external opengl32;
-
type
TTexture = record
@@ -66,9 +61,9 @@ type function GetTexture(Name, Typ: string): TTexture; overload;
function GetTexture(Name, Typ: string; FromCache: boolean): TTexture; overload;
function FindTexture(Name: string): integer;
- function LoadTexture(FromRegistry: boolean; Nazwa, Format, Typ: PChar; Col: LongWord): TTexture; overload;
- function LoadTexture(Nazwa, Format, Typ: PChar; Col: LongWord): TTexture; overload;
- function LoadTexture(Nazwa: string): TTexture; overload;
+ function LoadTexture(FromRegistry: boolean; Identifier, Format, Typ: PChar; Col: LongWord): TTexture; overload;
+ function LoadTexture(Identifier, Format, Typ: PChar; Col: LongWord): TTexture; overload;
+ function LoadTexture(Identifier: string): TTexture; overload;
function CreateTexture(var Data: array of byte; Name: string; W, H: word; Bits: byte): TTexture;
procedure UnloadTexture(Name: string; FromCache: boolean);
end;
@@ -77,24 +72,14 @@ var Texture: TTextureUnit;
TextureDatabase: TTextureDatabase;
-
- // for print screens
-// PrintScreenTex: GLuint;
-// PrintScreenData: array[0..480-1, 0..640-1] of longword;
PrintScreenData: array[0..1024*768-1] of longword;
-// Tekstur: Gluint;
ActTex: GLuint;//integer;
-{ Tekstura: array[1..32] of TTekstura;
- Mipmapping: boolean = true;}
-
- TexOrygW: integer;
- TexOrygH: integer;
+ TexOrigW: integer;
+ TexOrigH: integer;
TexNewW: integer;
TexNewH: integer;
-{ RLE: array[1..128*128] of byte;
- RLE2: array[1..128*128] of byte;}
TexFitW: integer;
TexFitH: integer; // new for limit
@@ -107,15 +92,13 @@ var // total 40MB at 2048*2048
// total 10MB at 1024*1024
-{ Paleta: array[0..255, 1..4] of byte;
- Len: integer;}
Mipmapping: Boolean;
CacheMipmap: array[0..256*256*3-1] of byte; // 3KB
implementation
-uses ULog, DateUtils, UCovers;
+uses ULog, DateUtils, UCovers, StrUtils;
function TTextureUnit.GetTexture(Name, Typ: string): TTexture;
begin
@@ -138,7 +121,7 @@ begin TextureDatabase.Texture[T].Name := Name;
TextureDatabase.Texture[T].Typ := Typ;
- // inform database that not textures has been loaded into memory
+ // inform database that no textures have been loaded into memory
TextureDatabase.Texture[T].Texture.TexNum := -1;
TextureDatabase.Texture[T].TextureCache.TexNum := -1;
end;
@@ -163,12 +146,6 @@ begin if TextureDatabase.Texture[T].TextureCache.TexNum = -1 then begin
// load texture
Covers.PrepareData(Name);
-{ Covers.Data[0] := 0;
- Covers.Data[1] := 0;
- Covers.Data[2] := 0;
- Covers.Data[3] := 255;
- Covers.Data[4] := 255;
- Covers.Data[5] := 255;}
TextureDatabase.Texture[T].TextureCache := CreateTexture(Covers.Data, Name, Covers.Cover[C].W, Covers.Cover[C].H, 24);
end;
@@ -187,7 +164,7 @@ begin Result := T;
end;
-function TTextureUnit.LoadTexture(FromRegistry: boolean; Nazwa, Format, Typ: PChar; Col: LongWord): TTexture;
+function TTextureUnit.LoadTexture(FromRegistry: boolean; Identifier, Format, Typ: PChar; Col: LongWord): TTexture;
var
Res: TResourceStream;
TextureB: TBitmap;
@@ -198,8 +175,8 @@ var TransparentColor: TColor;
PixelColor: TColor;
- Pet: integer;
- Pet2: integer;
+ Position: integer;
+ Position2: integer;
Pix: integer;
ColInt: real;
PPix: PByteArray;
@@ -213,27 +190,35 @@ begin if FromRegistry then begin
try
- Res := TResourceStream.Create(HInstance, Nazwa, Format);
+ Res := TResourceStream.Create(HInstance, Identifier, Format);
except
beep;
Exit;
end;
end;
- if FromRegistry or ((not FromRegistry) and FileExists(Nazwa)) then begin
+ // filetype "detection"
+ if (not FromRegistry) and (FileExists(Identifier)) then begin
+ Format:='';
+ Format := PAnsichar(UpperCase(RightStr(ExtractFileExt(Identifier),3)));
+ end;
+// else Format:='JPG';
+// if not ((Format='BMP')or(Format='JPG')or(Format='PNG')) then Format:='JPG';
+
+ if FromRegistry or ((not FromRegistry) and FileExists(Identifier)) then begin
TextureB := TBitmap.Create;
if Format = 'BMP' then begin
if FromRegistry then TextureB.LoadFromStream(Res)
- else TextureB.LoadFromFile(Nazwa);
+ else TextureB.LoadFromFile(Identifier);
end
else if Format = 'JPG' then begin
TextureJ := TJPEGImage.Create;
if FromRegistry then TextureJ.LoadFromStream(Res)
else begin
- if FileExists(Nazwa) then
- TextureJ.LoadFromFile(Nazwa)
+ if FileExists(Identifier) then
+ TextureJ.LoadFromFile(Identifier)
else
Exit;
end;
@@ -245,8 +230,8 @@ begin TexturePNG := TPNGObject.Create;
if FromRegistry then TexturePNG.LoadFromStream(Res)
else begin
- if FileExists(Nazwa) then
- TexturePNG.LoadFromFile(Nazwa)
+ if FileExists(Identifier) then
+ TexturePNG.LoadFromFile(Identifier)
else
Exit;
end;
@@ -258,13 +243,13 @@ begin if (TexturePNG.Header.ColorType = COLOR_GRAYSCALEALPHA) or
(TexturePNG.Header.ColorType = COLOR_RGBALPHA) then
begin
- // i would have preferred english variables here but i use Pet because i'm lazy
- for Pet := 0 to TextureB.Height - 1 do
+ // i would have preferred english variables here but i use Position because i'm lazy
+ for Position := 0 to TextureB.Height - 1 do
begin
- AlphaPtr := PByte(TexturePNG.AlphaScanline[Pet]);
- for Pet2 := 0 to TextureB.Width - 1 do
+ AlphaPtr := PByte(TexturePNG.AlphaScanline[Position]);
+ for Position2 := 0 to TextureB.Width - 1 do
begin
- TextureAlpha[Pet*TextureB.Width+Pet2]:= AlphaPtr^;
+ TextureAlpha[Position*TextureB.Width+Position2]:= AlphaPtr^;
Inc(AlphaPtr);
end;
end;
@@ -278,7 +263,7 @@ begin if FromRegistry then Res.Free;
if (TextureB.Width > 1024) or (TextureB.Height > 1024) then begin // will be fixed in 0.5.1 and dynamically extended to 8192x8192 depending on the driver
- Log.LogError('Image ' + Nazwa + ' is too big (' + IntToStr(TextureB.Width) + 'x' + IntToStr(TextureB.Height) + ')');
+ Log.LogError('Image ' + Identifier + ' is too big (' + IntToStr(TextureB.Width) + 'x' + IntToStr(TextureB.Height) + ')');
Result.TexNum := -1;
end else begin
@@ -289,46 +274,46 @@ begin glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
if Typ = 'Plain' then begin
- // wymiary
- TexOrygW := TextureB.Width;
- TexOrygH := TextureB.Height;
- TexNewW := Round(Power(2, Ceil(Log2(TexOrygW))));
- TexNewH := Round(Power(2, Ceil(Log2(TexOrygH))));
+ // dimensions
+ TexOrigW := TextureB.Width;
+ TexOrigH := TextureB.Height;
+ TexNewW := Round(Power(2, Ceil(Log2(TexOrigW))));
+ TexNewH := Round(Power(2, Ceil(Log2(TexOrigH))));
- // kopiowanie
+ // copy and process pixeldata
TextureB.PixelFormat := pf24bit;
{ if (TextureB.PixelFormat = pf8bit) then begin
- for Pet := 0 to TexOrygH-1 do begin
- for Pet2 := 0 to TexOrygW-1 do begin
- Pix := TextureB.Canvas.Pixels[Pet2, Pet];
- TextureD24[Pet*TexNewW + Pet2+1, 1] := Pix;
- TextureD24[Pet*TexNewW + Pet2+1, 2] := Pix div 256;
- TextureD24[Pet*TexNewW + Pet2+1, 3] := Pix div (256*256);
+ for Position := 0 to TexOrigH-1 do begin
+ for Position2 := 0 to TexOrigW-1 do begin
+ Pix := TextureB.Canvas.Pixels[Position2, Position];
+ TextureD24[Position*TexNewW + Position2+1, 1] := Pix;
+ TextureD24[Position*TexNewW + Position2+1, 2] := Pix div 256;
+ TextureD24[Position*TexNewW + Position2+1, 3] := Pix div (256*256);
end;
end;
end;}
- if (TexOrygW <= Limit) and (TexOrygW <= Limit) then begin
+ if (TexOrigW <= Limit) and (TexOrigW <= Limit) then begin
if (TextureB.PixelFormat = pf24bit) then begin
- for Pet := 0 to TexOrygH-1 do begin
- PPix := TextureB.ScanLine[Pet];
- for Pet2 := 0 to TexOrygW-1 do begin
- TextureD24[Pet*TexNewW + Pet2+1, 1] := PPix[Pet2*3+2];
- TextureD24[Pet*TexNewW + Pet2+1, 2] := PPix[Pet2*3+1];
- TextureD24[Pet*TexNewW + Pet2+1, 3] := PPix[Pet2*3];
+ for Position := 0 to TexOrigH-1 do begin
+ PPix := TextureB.ScanLine[Position];
+ for Position2 := 0 to TexOrigW-1 do begin
+ TextureD24[Position*TexNewW + Position2+1, 1] := PPix[Position2*3+2];
+ TextureD24[Position*TexNewW + Position2+1, 2] := PPix[Position2*3+1];
+ TextureD24[Position*TexNewW + Position2+1, 3] := PPix[Position2*3];
end;
end;
end;
end else begin
// limit
- TexFitW := 4 * (TexOrygW div 4); // fix for bug in gluScaleImage
- TexFitH := TexOrygH;
+ TexFitW := 4 * (TexOrigW div 4); // fix for bug in gluScaleImage
+ TexFitH := TexOrigH;
if (TextureB.PixelFormat = pf24bit) then begin
- for Pet := 0 to TexOrygH-1 do begin
- PPix := TextureB.ScanLine[Pet];
- for Pet2 := 0 to TexOrygW-1 do begin
- TextureD24[Pet*TexFitW + Pet2+1, 1] := PPix[Pet2*3+2];
- TextureD24[Pet*TexFitW + Pet2+1, 2] := PPix[Pet2*3+1];
- TextureD24[Pet*TexFitW + Pet2+1, 3] := PPix[Pet2*3];
+ for Position := 0 to TexOrigH-1 do begin
+ PPix := TextureB.ScanLine[Position];
+ for Position2 := 0 to TexOrigW-1 do begin
+ TextureD24[Position*TexFitW + Position2+1, 1] := PPix[Position2*3+2];
+ TextureD24[Position*TexFitW + Position2+1, 2] := PPix[Position2*3+1];
+ TextureD24[Position*TexFitW + Position2+1, 3] := PPix[Position2*3];
end;
end;
end;
@@ -337,25 +322,25 @@ begin TexNewW := Limit;
TexNewH := Limit;
- TexOrygW := Limit;
- TexOrygH := Limit;
+ TexOrigW := Limit;
+ TexOrigH := Limit;
end;
// creating cache mipmap
if CreateCacheMipmap then begin
- if (TexOrygW <> TexNewW) or (TexOrygH <> TexNewH) then begin
+ if (TexOrigW <> TexNewW) or (TexOrigH <> TexNewH) then begin
// texture only uses some of it's space. there's a need for resize to fit full size
// and get best quality
- TexFitW := 4 * (TexOrygW div 4); // 0.5.0: fix for bug in gluScaleImage
- SkipX := (TexOrygW div 2) mod 2; // 0.5.0: try to center image
-
- TexFitH := TexOrygH;
- for Pet := 0 to TexOrygH-1 do begin
- PPix := TextureB.ScanLine[Pet];
- for Pet2 := 0 to TexOrygW-1 do begin
- TextureD242[Pet*TexFitW + Pet2+1, 1] := PPix[(Pet2+SkipX)*3+2];
- TextureD242[Pet*TexFitW + Pet2+1, 2] := PPix[(Pet2+SkipX)*3+1];
- TextureD242[Pet*TexFitW + Pet2+1, 3] := PPix[(Pet2+SkipX)*3];
+ TexFitW := 4 * (TexOrigW div 4); // 0.5.0: fix for bug in gluScaleImage
+ SkipX := (TexOrigW div 2) mod 2; // 0.5.0: try to center image
+
+ TexFitH := TexOrigH;
+ for Position := 0 to TexOrigH-1 do begin
+ PPix := TextureB.ScanLine[Position];
+ for Position2 := 0 to TexOrigW-1 do begin
+ TextureD242[Position*TexFitW + Position2+1, 1] := PPix[(Position2+SkipX)*3+2];
+ TextureD242[Position*TexFitW + Position2+1, 2] := PPix[(Position2+SkipX)*3+1];
+ TextureD242[Position*TexFitW + Position2+1, 3] := PPix[(Position2+SkipX)*3];
end;
end;
gluScaleImage(GL_RGB, TexFitW, TexFitH, GL_UNSIGNED_BYTE, @TextureD242,
@@ -363,7 +348,7 @@ begin end else begin
// texture fits perfectly
- gluScaleImage(GL_RGB, TexOrygW, TexOrygH, GL_UNSIGNED_BYTE, @TextureD24,
+ gluScaleImage(GL_RGB, TexOrigW, TexOrigH, GL_UNSIGNED_BYTE, @TextureD24,
Covers.W, Covers.H, GL_UNSIGNED_BYTE, @CacheMipmap[0]); // takes some time
end;
end;
@@ -376,31 +361,31 @@ begin end;
if Typ = 'Transparent' then begin
- // wymiary
- TexOrygW := TextureB.Width;
- TexOrygH := TextureB.Height;
- TexNewW := Round(Power(2, Ceil(Log2(TexOrygW))));
- TexNewH := Round(Power(2, Ceil(Log2(TexOrygH))));
+ // dimensions
+ TexOrigW := TextureB.Width;
+ TexOrigH := TextureB.Height;
+ TexNewW := Round(Power(2, Ceil(Log2(TexOrigW))));
+ TexNewH := Round(Power(2, Ceil(Log2(TexOrigH))));
TextureB.Width := TexNewW;
TextureB.Height := TexNewH;
- // kopiowanie
- for Pet := 0 to TexOrygH-1 do begin
- for Pet2 := 0 to TexOrygW-1 do begin
- Pix := TextureB.Canvas.Pixels[Pet2, Pet];
+ // copy and process pixeldata
+ for Position := 0 to TexOrigH-1 do begin
+ for Position2 := 0 to TexOrigW-1 do begin
+ Pix := TextureB.Canvas.Pixels[Position2, Position];
// ,- part of transparent png hack
if ((Pix = $fefefe) or (Pix = Col)) and (length(TextureAlpha)=0) then begin //Small fix, that caused artefacts to be drawn (#fe == dec254)
- TextureD32[Pet*TexNewW + Pet2 + 1, 1] := 0;
- TextureD32[Pet*TexNewW + Pet2 + 1, 2] := 0;
- TextureD32[Pet*TexNewW + Pet2 + 1, 3] := 0;
- TextureD32[Pet*TexNewW + Pet2 + 1, 4] := 0;
+ TextureD32[Position*TexNewW + Position2 + 1, 1] := 0;
+ TextureD32[Position*TexNewW + Position2 + 1, 2] := 0;
+ TextureD32[Position*TexNewW + Position2 + 1, 3] := 0;
+ TextureD32[Position*TexNewW + Position2 + 1, 4] := 0;
end else begin
- TextureD32[Pet*TexNewW + Pet2+1, 1] := Pix;
- TextureD32[Pet*TexNewW + Pet2+1, 2] := Pix div 256;
- TextureD32[Pet*TexNewW + Pet2+1, 3] := Pix div (256*256);
+ TextureD32[Position*TexNewW + Position2+1, 1] := Pix;
+ TextureD32[Position*TexNewW + Position2+1, 2] := Pix div 256;
+ TextureD32[Position*TexNewW + Position2+1, 3] := Pix div (256*256);
// transparent png hack start (part 2 of 2)
if (Format = 'PNG') and (length(TextureAlpha) <> 0) then begin
- myAlpha:=TextureAlpha[Pet*TexOrygW+Pet2];
+ myAlpha:=TextureAlpha[Position*TexOrigW+Position2];
// the following calculations tweak transparency so that it really looks transparent
myAlpha:=myAlpha-75;
@@ -409,10 +394,10 @@ begin myAlpha:=myAlpha*myAlpha*myAlpha;
myAlpha:=myAlpha*255;
- TextureD32[Pet*TexNewW+Pet2+1,4]:=floor(myAlpha);
+ TextureD32[Position*TexNewW+Position2+1,4]:=floor(myAlpha);
end else
// transparent png hack end
- TextureD32[Pet*TexNewW + Pet2+1, 4] := 255;
+ TextureD32[Position*TexNewW + Position2+1, 4] := 255;
end;
end;
end;
@@ -424,21 +409,21 @@ begin end;
if Typ = 'Transparent Range' then begin
- // wymiary
- TexOrygW := TextureB.Width;
- TexOrygH := TextureB.Height;
- TexNewW := Round(Power(2, Ceil(Log2(TexOrygW))));
- TexNewH := Round(Power(2, Ceil(Log2(TexOrygH))));
+ // dimensions
+ TexOrigW := TextureB.Width;
+ TexOrigH := TextureB.Height;
+ TexNewW := Round(Power(2, Ceil(Log2(TexOrigW))));
+ TexNewH := Round(Power(2, Ceil(Log2(TexOrigH))));
TextureB.Width := TexNewW;
TextureB.Height := TexNewH;
- // kopiowanie
- for Pet := 0 to TexOrygH-1 do begin
- for Pet2 := 0 to TexOrygW-1 do begin
- Pix := TextureB.Canvas.Pixels[Pet2, Pet];
- TextureD32[Pet*TexNewW + Pet2+1, 1] := Pix;
- TextureD32[Pet*TexNewW + Pet2+1, 2] := Pix div 256;
- TextureD32[Pet*TexNewW + Pet2+1, 3] := Pix div (256*256);
- TextureD32[Pet*TexNewW + Pet2+1, 4] := 256 - Pix div 256;
+ // copy and process pixeldata
+ for Position := 0 to TexOrigH-1 do begin
+ for Position2 := 0 to TexOrigW-1 do begin
+ Pix := TextureB.Canvas.Pixels[Position2, Position];
+ TextureD32[Position*TexNewW + Position2+1, 1] := Pix;
+ TextureD32[Position*TexNewW + Position2+1, 2] := Pix div 256;
+ TextureD32[Position*TexNewW + Position2+1, 3] := Pix div (256*256);
+ TextureD32[Position*TexNewW + Position2+1, 4] := 256 - Pix div 256;
end;
end;
glTexImage2D(GL_TEXTURE_2D, 0, 4, TexNewW, TexNewH, 0, GL_RGBA, GL_UNSIGNED_BYTE, @TextureD32);
@@ -450,12 +435,12 @@ begin if Typ = 'Font' then begin
TextureB.PixelFormat := pf24bit;
- for Pet := 0 to TextureB.Height-1 do begin
- PPix := TextureB.ScanLine[Pet];
- for Pet2 := 0 to TextureB.Width-1 do begin
- Pix := PPix[Pet2 * 3];
- TextureD16[Pet*TextureB.Width + Pet2 + 1, 1] := 255;
- TextureD16[Pet*TextureB.Width + Pet2 + 1, 2] := Pix;
+ for Position := 0 to TextureB.Height-1 do begin
+ PPix := TextureB.ScanLine[Position];
+ for Position2 := 0 to TextureB.Width-1 do begin
+ Pix := PPix[Position2 * 3];
+ TextureD16[Position*TextureB.Width + Position2 + 1, 1] := 255;
+ TextureD16[Position*TextureB.Width + Position2 + 1, 2] := Pix;
end;
end;
glTexImage2D(GL_TEXTURE_2D, 0, 2, TextureB.Width, TextureB.Height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, @TextureD16);
@@ -469,10 +454,10 @@ begin if Typ = 'Font Outline' then begin
TextureB.PixelFormat := pf24bit;
- for Pet := 0 to TextureB.Height-1 do begin
- PPix := TextureB.ScanLine[Pet];
- for Pet2 := 0 to TextureB.Width-1 do begin
- Pix := PPix[Pet2 * 3];
+ for Position := 0 to TextureB.Height-1 do begin
+ PPix := TextureB.ScanLine[Position];
+ for Position2 := 0 to TextureB.Width-1 do begin
+ Pix := PPix[Position2 * 3];
Col := Pix;
if Col < 127 then Col := 127;
@@ -483,8 +468,8 @@ begin if Pix < 95 then TempA := (Pix * 256) div 96;
- TextureD16[Pet*TextureB.Width + Pet2 + 1, 1] := Col;
- TextureD16[Pet*TextureB.Width + Pet2 + 1, 2] := TempA;
+ TextureD16[Position*TextureB.Width + Position2 + 1, 1] := Col;
+ TextureD16[Position*TextureB.Width + Position2 + 1, 2] := TempA;
end;
end;
glTexImage2D(GL_TEXTURE_2D, 0, 2, TextureB.Width, TextureB.Height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, @TextureD16);
@@ -498,10 +483,10 @@ begin if Typ = 'Font Outline 2' then begin
TextureB.PixelFormat := pf24bit;
- for Pet := 0 to TextureB.Height-1 do begin
- PPix := TextureB.ScanLine[Pet];
- for Pet2 := 0 to TextureB.Width-1 do begin
- Pix := PPix[Pet2 * 3];
+ for Position := 0 to TextureB.Height-1 do begin
+ PPix := TextureB.ScanLine[Position];
+ for Position2 := 0 to TextureB.Width-1 do begin
+ Pix := PPix[Position2 * 3];
Col := Pix;
if Col < 31 then Col := 31;
@@ -510,8 +495,8 @@ begin if TempA >= 31 then TempA := 255;
if Pix < 31 then TempA := Pix * (256 div 32);
- TextureD16[Pet*TextureB.Width + Pet2 + 1, 1] := Col;
- TextureD16[Pet*TextureB.Width + Pet2 + 1, 2] := TempA;
+ TextureD16[Position*TextureB.Width + Position2 + 1, 1] := Col;
+ TextureD16[Position*TextureB.Width + Position2 + 1, 2] := TempA;
end;
end;
glTexImage2D(GL_TEXTURE_2D, 0, 2, TextureB.Width, TextureB.Height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, @TextureD16);
@@ -524,24 +509,24 @@ begin end;
if Typ = 'Font Black' then begin
- // normalnie 0,125s bez niczego 0,015s - 0,030s z pix 0,125s
- // wymiary
+ // normalnie 0,125s bez niczego 0,015s - 0,030s z pix 0,125s <-- ???
+ // dimensions
TextureB.PixelFormat := pf24bit;
- TexOrygW := TextureB.Width;
- TexOrygH := TextureB.Height;
- TexNewW := Round(Power(2, Ceil(Log2(TexOrygW))));
- TexNewH := Round(Power(2, Ceil(Log2(TexOrygH))));
+ TexOrigW := TextureB.Width;
+ TexOrigH := TextureB.Height;
+ TexNewW := Round(Power(2, Ceil(Log2(TexOrigW))));
+ TexNewH := Round(Power(2, Ceil(Log2(TexOrigH))));
TextureB.Width := TexNewW;
TextureB.Height := TexNewH;
- // kopiowanie
- for Pet := 0 to TextureB.Height-1 do begin
- PPix := TextureB.ScanLine[Pet];
- for Pet2 := 0 to TextureB.Width-1 do begin
- Pix := PPix[Pet2*3];
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 1] := 255;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 2] := 255;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 3] := 255;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 4] := 255 - (Pix mod 256);
+ // copy and process pixeldata
+ for Position := 0 to TextureB.Height-1 do begin
+ PPix := TextureB.ScanLine[Position];
+ for Position2 := 0 to TextureB.Width-1 do begin
+ Pix := PPix[Position2*3];
+ TextureD32[Position*TextureB.Width + Position2 + 1, 1] := 255;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 2] := 255;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 3] := 255;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 4] := 255 - (Pix mod 256);
end;
end;
glTexImage2D(GL_TEXTURE_2D, 0, 4, TextureB.Width, TextureB.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, @TextureD32);
@@ -549,42 +534,42 @@ begin if Typ = 'Alpha Black Colored' then begin
TextureB.PixelFormat := pf24bit;
- TexOrygW := TextureB.Width;
- TexOrygH := TextureB.Height;
- TexNewW := Round(Power(2, Ceil(Log2(TexOrygW))));
- TexNewH := Round(Power(2, Ceil(Log2(TexOrygH))));
+ TexOrigW := TextureB.Width;
+ TexOrigH := TextureB.Height;
+ TexNewW := Round(Power(2, Ceil(Log2(TexOrigW))));
+ TexNewH := Round(Power(2, Ceil(Log2(TexOrigH))));
TextureB.Width := TexNewW;
TextureB.Height := TexNewH;
- // kopiowanie
- for Pet := 0 to TextureB.Height-1 do begin
- PPix := TextureB.ScanLine[Pet];
- for Pet2 := 0 to TextureB.Width-1 do begin
- Pix := PPix[Pet2*3];
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 1] := (Col div $10000) and $FF;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 2] := (Col div $100) and $FF;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 3] := Col and $FF;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 4] := 255 - (Pix mod 256);
+ // copy and process pixeldata
+ for Position := 0 to TextureB.Height-1 do begin
+ PPix := TextureB.ScanLine[Position];
+ for Position2 := 0 to TextureB.Width-1 do begin
+ Pix := PPix[Position2*3];
+ TextureD32[Position*TextureB.Width + Position2 + 1, 1] := (Col div $10000) and $FF;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 2] := (Col div $100) and $FF;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 3] := Col and $FF;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 4] := 255 - (Pix mod 256);
end;
end;
glTexImage2D(GL_TEXTURE_2D, 0, 4, TextureB.Width, TextureB.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, @TextureD32);
end;
if Typ = 'Font Gray' then begin
- // wymiary
- TexOrygW := TextureB.Width;
- TexOrygH := TextureB.Height;
- TexNewW := Round(Power(2, Ceil(Log2(TexOrygW))));
- TexNewH := Round(Power(2, Ceil(Log2(TexOrygH))));
+ // dimensions
+ TexOrigW := TextureB.Width;
+ TexOrigH := TextureB.Height;
+ TexNewW := Round(Power(2, Ceil(Log2(TexOrigW))));
+ TexNewH := Round(Power(2, Ceil(Log2(TexOrigH))));
TextureB.Width := TexNewW;
TextureB.Height := TexNewH;
- // kopiowanie
- for Pet := 0 to TextureB.Height-1 do begin
- for Pet2 := 0 to TextureB.Width-1 do begin
- Pix := TextureB.Canvas.Pixels[Pet2, Pet];
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 1] := 127;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 2] := 127;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 3] := 127;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 4] := 255 - (Pix mod 256);
+ // copy and process pixeldata
+ for Position := 0 to TextureB.Height-1 do begin
+ for Position2 := 0 to TextureB.Width-1 do begin
+ Pix := TextureB.Canvas.Pixels[Position2, Position];
+ TextureD32[Position*TextureB.Width + Position2 + 1, 1] := 127;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 2] := 127;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 3] := 127;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 4] := 255 - (Pix mod 256);
end;
end;
glTexImage2D(GL_TEXTURE_2D, 0, 4, TextureB.Width, TextureB.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, @TextureD32);
@@ -596,10 +581,10 @@ begin if Typ = 'Arrow' then begin
TextureB.PixelFormat := pf24bit;
- for Pet := 0 to TextureB.Height-1 do begin
- PPix := TextureB.ScanLine[Pet];
- for Pet2 := 0 to TextureB.Width-1 do begin
- Pix := PPix[Pet2 * 3];
+ for Position := 0 to TextureB.Height-1 do begin
+ PPix := TextureB.ScanLine[Position];
+ for Position2 := 0 to TextureB.Width-1 do begin
+ Pix := PPix[Position2 * 3];
// transparency
if Pix >= 127 then TempA := 255;
@@ -610,10 +595,10 @@ begin if Pix >= 127 then ColInt := 2 - Pix / 128;
//0.75, 0.6, 0.25
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 1] := Round(ColInt * 0.75 * 255 + (1 - ColInt) * 255);
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 2] := Round(ColInt * 0.6 * 255 + (1 - ColInt) * 255);
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 3] := Round(ColInt * 0.25 * 255 + (1 - ColInt) * 255);
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 4] := TempA;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 1] := Round(ColInt * 0.75 * 255 + (1 - ColInt) * 255);
+ TextureD32[Position*TextureB.Width + Position2 + 1, 2] := Round(ColInt * 0.6 * 255 + (1 - ColInt) * 255);
+ TextureD32[Position*TextureB.Width + Position2 + 1, 3] := Round(ColInt * 0.25 * 255 + (1 - ColInt) * 255);
+ TextureD32[Position*TextureB.Width + Position2 + 1, 4] := TempA;
end;
end;
glTexImage2D(GL_TEXTURE_2D, 0, 4, TextureB.Width, TextureB.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, @TextureD32);
@@ -626,22 +611,22 @@ begin end;
if Typ = 'Note Plain' then begin
- for Pet := 0 to TextureB.Height-1 do begin
- PPix := TextureB.ScanLine[Pet];
- for Pet2 := 0 to TextureB.Width-1 do begin
+ for Position := 0 to TextureB.Height-1 do begin
+ PPix := TextureB.ScanLine[Position];
+ for Position2 := 0 to TextureB.Width-1 do begin
// Skin Patch
// 0-191= Fade Black to Col, 192= Col, 193-254 Fade Col to White, 255= White
- case PPix[Pet2*3] of
- 0..191: Pix := $10000 * ((((Col div $10000) and $FF) * PPix[Pet2*3]) div $Bf) + $100 * ((((Col div $100) and $FF) * PPix[Pet2*3]) div $Bf) + (((Col and $FF) * PPix[Pet2*3]) div $Bf);
+ case PPix[Position2*3] of
+ 0..191: Pix := $10000 * ((((Col div $10000) and $FF) * PPix[Position2*3]) div $Bf) + $100 * ((((Col div $100) and $FF) * PPix[Position2*3]) div $Bf) + (((Col and $FF) * PPix[Position2*3]) div $Bf);
192: Pix := Col;
- 193..254: Pix := Col + ($10000 * ((($FF - ((Col div $10000) and $FF)) * ((PPix[Pet2*3] - $C0) * 4) ) div $FF) + $100 * ((($FF - ((Col div $100) and $FF)) * ((PPix[Pet2*3] - $C0) * 4)) div $FF) + ((($FF - (Col and $FF)) * ((PPix[Pet2*3] - $C0) * 4)) div $FF));
+ 193..254: Pix := Col + ($10000 * ((($FF - ((Col div $10000) and $FF)) * ((PPix[Position2*3] - $C0) * 4) ) div $FF) + $100 * ((($FF - ((Col div $100) and $FF)) * ((PPix[Position2*3] - $C0) * 4)) div $FF) + ((($FF - (Col and $FF)) * ((PPix[Position2*3] - $C0) * 4)) div $FF));
255: Pix := $FFFFFF;
end;
// 0.5.0. Original
-// case PPix[Pet2*3] of
+// case PPix[Position2*3] of
// 128: Pix := $10000 * ((Col div $10000) div 2) + $100 * (((Col div $100) and $FF) div 2) + (Col and $FF) div 2;
// 192: Pix := Col;
// 255: Pix := $FFFFFF;
@@ -651,33 +636,33 @@ begin - TextureD24[Pet*TextureB.Width + Pet2 + 1, 1] := Pix div $10000;
- TextureD24[Pet*TextureB.Width + Pet2 + 1, 2] := (Pix div $100) and $FF;
- TextureD24[Pet*TextureB.Width + Pet2 + 1, 3] := Pix and $FF;
+ TextureD24[Position*TextureB.Width + Position2 + 1, 1] := Pix div $10000;
+ TextureD24[Position*TextureB.Width + Position2 + 1, 2] := (Pix div $100) and $FF;
+ TextureD24[Position*TextureB.Width + Position2 + 1, 3] := Pix and $FF;
end;
end;
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureB.Width, TextureB.Height, 0, GL_RGB, GL_UNSIGNED_BYTE, @TextureD24);
end;
if Typ = 'Note Transparent' then begin
- for Pet := 0 to TextureB.Height-1 do begin
- PPix := TextureB.ScanLine[Pet];
- for Pet2 := 0 to TextureB.Width-1 do begin
+ for Position := 0 to TextureB.Height-1 do begin
+ PPix := TextureB.ScanLine[Position];
+ for Position2 := 0 to TextureB.Width-1 do begin
TempA := 255;
//Skin Patch
// 0= Transparent, 1-191= Fade Black to Col, 192= Col, 193-254 Fade Col to White, 255= White
- case PPix[Pet2*3] of
+ case PPix[Position2*3] of
0: TempA := 0;
- 1..191: Pix := $10000 * ((((Col div $10000) and $FF) * PPix[Pet2*3]) div $Bf) + $100 * ((((Col div $100) and $FF) * PPix[Pet2*3]) div $Bf) + (((Col and $FF) * PPix[Pet2*3]) div $Bf);
+ 1..191: Pix := $10000 * ((((Col div $10000) and $FF) * PPix[Position2*3]) div $Bf) + $100 * ((((Col div $100) and $FF) * PPix[Position2*3]) div $Bf) + (((Col and $FF) * PPix[Position2*3]) div $Bf);
192: Pix := Col;
- 193..254: Pix := Col + ($10000 * ((($FF - ((Col div $10000) and $FF)) * ((PPix[Pet2*3] - $C0) * 4) ) div $FF) + $100 * ((($FF - ((Col div $100) and $FF)) * ((PPix[Pet2*3] - $C0) * 4)) div $FF) + ((($FF - (Col and $FF)) * ((PPix[Pet2*3] - $C0) * 4)) div $FF));
+ 193..254: Pix := Col + ($10000 * ((($FF - ((Col div $10000) and $FF)) * ((PPix[Position2*3] - $C0) * 4) ) div $FF) + $100 * ((($FF - ((Col div $100) and $FF)) * ((PPix[Position2*3] - $C0) * 4)) div $FF) + ((($FF - (Col and $FF)) * ((PPix[Position2*3] - $C0) * 4)) div $FF));
255: Pix := $FFFFFF;
end;
// 0.5.0 Original
-// case PPix[Pet2*3] of
+// case PPix[Position2*3] of
// 0: TempA := 0;
// 128: Pix := $10000 * ((Col div $10000) div 2) + $100 * (((Col div $100) and $FF) div 2) + (Col and $FF) div 2;
// 192: Pix := Col;
@@ -687,25 +672,16 @@ begin - TextureD32[Pet*TextureB.Width + Pet2 + 1, 1] := Pix div $10000;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 2] := (Pix div $100) and $FF;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 3] := Pix and $FF;
- TextureD32[Pet*TextureB.Width + Pet2 + 1, 4] := TempA;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 1] := Pix div $10000;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 2] := (Pix div $100) and $FF;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 3] := Pix and $FF;
+ TextureD32[Position*TextureB.Width + Position2 + 1, 4] := TempA;
end;
end;
glTexImage2D(GL_TEXTURE_2D, 0, 4, TextureB.Width, TextureB.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, @TextureD32);
end;
-
-
-
TextureB.Free;
-// Inc(ActTex);
-{ Tekst.Tekstura := ActTex;
- Tekst.W := TexOrygW;
- Tekst.H := TexOrygH;
- Tekst.X2 := TexOrygW/TexNewW;
- Tekst.Y2 := TexOrygH/TexNewH;}
Result.X := 0;
Result.Y := 0;
Result.W := 0;
@@ -714,8 +690,8 @@ begin Result.ScaleH := 1;
Result.Rot := 0;
Result.TexNum := ActTex;
- Result.TexW := TexOrygW / TexNewW;
- Result.TexH := TexOrygH / TexNewH;
+ Result.TexW := TexOrigW / TexNewW;
+ Result.TexH := TexOrigH / TexNewH;
Result.Int := 1;
Result.ColR := 1;
@@ -730,32 +706,32 @@ begin Result.TexY2 := 1;
// 0.5.0
- Result.Name := Nazwa;
+ Result.Name := Identifier;
end;
Log.BenchmarkEnd(4);
if Log.BenchmarkTimeLength[4] >= 1 then
- Log.LogBenchmark('**********> Texture Load Time Warning - ' + Format + '/' + Nazwa + '/' + Typ, 4);
+ Log.LogBenchmark('**********> Texture Load Time Warning - ' + Format + '/' + Identifier + '/' + Typ, 4);
end; // logerror
end;
{procedure ResizeTexture(s: pbytearray; d: pbytearray);
var
- Pet: integer;
- Pet2: integer;
+ Position: integer;
+ Position2: integer;
begin
- for Pet := 0 to TexNewH*4-1 do
- for Pet2 := 0 to TexNewW-1 do
- d[Pet*TexNewW + Pet2] := 0;
-
- for Pet := 0 to TexOrygH-1 do begin
- for Pet2 := 0 to TexOrygW-1 do begin
- d[(Pet*TexNewW + Pet2)*4] := Paleta[s[Pet*TexOrygW + Pet2], 1];
- d[(Pet*TexNewW + Pet2)*4+1] := Paleta[s[Pet*TexOrygW + Pet2], 2];
- d[(Pet*TexNewW + Pet2)*4+2] := Paleta[s[Pet*TexOrygW + Pet2], 3];
- d[(Pet*TexNewW + Pet2)*4+3] := Paleta[s[Pet*TexOrygW + Pet2], 4];
+ for Position := 0 to TexNewH*4-1 do
+ for Position2 := 0 to TexNewW-1 do
+ d[Position*TexNewW + Position2] := 0;
+
+ for Position := 0 to TexOrigH-1 do begin
+ for Position2 := 0 to TexOrigW-1 do begin
+ d[(Position*TexNewW + Position2)*4] := Paleta[s[Position*TexOrigW + Position2], 1];
+ d[(Position*TexNewW + Position2)*4+1] := Paleta[s[Position*TexOrigW + Position2], 2];
+ d[(Position*TexNewW + Position2)*4+2] := Paleta[s[Position*TexOrigW + Position2], 3];
+ d[(Position*TexNewW + Position2)*4+3] := Paleta[s[Position*TexOrigW + Position2], 4];
end;
end;
end;}
@@ -770,22 +746,22 @@ begin glTexImage2D(GL_TEXTURE_2D, 0, 4, TexNewW, TexNewH, 0, GL_RGBA, GL_UNSIGNED_BYTE, p);
end;}
-function TTextureUnit.LoadTexture(Nazwa, Format, Typ: PChar; Col: LongWord): TTexture;
+function TTextureUnit.LoadTexture(Identifier, Format, Typ: PChar; Col: LongWord): TTexture;
begin
- Result := LoadTexture(false, Nazwa, Format, Typ, Col);
-// Result := LoadTexture(SkinReg, Nazwa, Format, Typ, Col); // default to SkinReg
+ Result := LoadTexture(false, Identifier, Format, Typ, Col);
+// Result := LoadTexture(SkinReg, Identifier, Format, Typ, Col); // default to SkinReg
end;
-function TTextureUnit.LoadTexture(Nazwa: string): TTexture;
+function TTextureUnit.LoadTexture(Identifier: string): TTexture;
begin
- Result := LoadTexture(false, pchar(Nazwa), 'JPG', 'Plain', 0);
+ Result := LoadTexture(false, pchar(Identifier), 'JPG', 'Plain', 0);
end;
function TTextureUnit.CreateTexture(var Data: array of byte; Name: string; W, H: word; Bits: byte): TTexture;
var
- Pet: integer;
- Pet2: integer;
+ Position: integer;
+ Position2: integer;
Pix: integer;
ColInt: real;
PPix: PByteArray;
@@ -806,13 +782,6 @@ begin if Error > 0 then beep;
end;
-
-// Inc(ActTex);
-{ Tekst.Tekstura := ActTex;
- Tekst.W := TexOrygW;
- Tekst.H := TexOrygH;
- Tekst.X2 := TexOrygW/TexNewW;
- Tekst.Y2 := TexOrygH/TexNewH;}
Result.X := 0;
Result.Y := 0;
Result.W := 0;
|