index 7c804699660c945fe3e8fdceacba1a94397c2d42..2a4300b71bec0039d68d73cf2e25a6349a29a8c7 100644 (file)
end;
var
- fUseMipmaps: Boolean = False;
+ e_DummyTextures: Boolean = False;
TEXTUREFILTER: Integer = GL_NEAREST;
-function CreateTexture(var tex: GLTexture; Width, Height, Format: Word; pData: Pointer ): Boolean;
+function CreateTexture(var tex: GLTexture; Width, Height, aFormat: Word; pData: Pointer ): Boolean;
// Standard set of images loading functions
function LoadTexture( Filename: String; var Texture: GLTexture;
implementation
-uses BinEditor;
+uses BinEditor, g_options;
function AlignP2 (n: Word): Word;
end;
// This is auxiliary function that creates OpenGL texture from raw image data
-function CreateTexture (var tex: GLTexture; Width, Height, Format: Word; pData: Pointer): Boolean;
+function CreateTexture (var tex: GLTexture; Width, Height, aFormat: Word; pData: Pointer): Boolean;
var
Texture: GLuint;
begin
tex.width := Width;
tex.height := Height;
- tex.glwidth := AlignP2(Width);
- tex.glheight := AlignP2(Height);
- if (tex.glwidth = tex.glwidth) and (tex.glheight = tex.height) then
+ if glLegacyNPOT then
begin
- tex.u := 1;
- tex.v := 1;
+ tex.glwidth := AlignP2(Width);
+ tex.glheight := AlignP2(Height);
end
else
begin
- tex.u := (tex.width+0.0)/(tex.glwidth+0.0);
- tex.v := (tex.height+0.0)/(tex.height+0.0);
+ tex.glwidth := Width;
+ tex.glheight := Height;
end;
+ tex.u := 1;
+ tex.v := 1;
+ if tex.glwidth <> tex.width then tex.u := (tex.width+0.0)/(tex.glwidth+0.0);
+ if tex.glheight <> tex.height then tex.v := (tex.height+0.0)/(tex.glheight+0.0);
+ if (tex.glwidth <> tex.width) or (tex.glheight <> tex.height) then
+ begin
+ e_WriteLog(Format('NPOT: orig is %ux%u; gl is %ux%u; u=%f; v=%f', [Width, Height, tex.glwidth, tex.glheight, tex.u, tex.v]), MSG_NOTIFY);
+ end;
+
+ if e_DummyTextures then
+ begin
+ tex.id := GLuint(-1);
+ Result := True;
+ Exit;
+ end;
+
glGenTextures(1, @Texture);
tex.id := Texture;
glBindTexture(GL_TEXTURE_2D, Texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, TEXTUREFILTER);
// create empty texture
- if Format = GL_RGBA then
+ if aFormat = GL_RGBA then
begin
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.glwidth, tex.glheight, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, pData);
{
if (tex.glwidth = tex.glwidth) and (tex.glheight = tex.height) then
// easy case
- if Format = GL_RGBA then
+ if aFormat = GL_RGBA then
begin
glTexImage2D(GL_TEXTURE_2D, 0, 4, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pData);
end
Exit;
end;
+ if (TGAHeader.ImageInfo and $c0) <> 0 then
+ begin
+ e_WriteLog('Error loading texture: interleaved TGA', MSG_WARNING);
+ Exit;
+ end;
+
Width := TGAHeader.Width[0] + TGAHeader.Width[1] * 256;
Height := TGAHeader.Height[0] + TGAHeader.Height[1] * 256;
BPP := TGAHeader.BPP;
Back^ := Temp;
end;
+ //if (TGAHeader.ImageInfo and $20) <> 0 then UpsideDown(Image, Width, Height);
+
if ( BPP = 24 ) then
TFmt := GL_RGB
else
Exit;
end;
+ if (TGAHeader.ImageInfo and $c0) <> 0 then
+ begin
+ e_WriteLog('Error loading texture: interleaved TGA', MSG_WARNING);
+ Exit;
+ end;
+
Width := TGAHeader.Width[0] + TGAHeader.Width[1] * 256;
Height := TGAHeader.Height[0] + TGAHeader.Height[1] * 256;
BPP := TGAHeader.BPP;
for i := 0 to fHeight-1 do
CopyMemory( PByte(image) + a*i, Base + b*i, a );
+ //if (TGAHeader.ImageInfo and $20) <> 0 then UpsideDown(Image, Width, Height);
+
if ( BPP = 24 ) then
TFmt := GL_RGB
else