summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: a988c9d)
raw | patch | inline | side by side (parent: a988c9d)
author | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Thu, 16 Feb 2023 16:17:35 +0000 (19:17 +0300) | ||
committer | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Fri, 9 Jun 2023 09:14:09 +0000 (12:14 +0300) |
src/game/renders/opengl/r_map.pas | patch | blob | history | |
src/game/renders/opengl/r_textures.pas | patch | blob | history |
index 5513d688256169d2c8dcfe0994e945d36912bc5d..914087d80c504bc7cc438bd5560dfed3f708f787 100644 (file)
r_Common_SetLoading(_lc[I_LOAD_TEXTURES], n);
for i := 0 to n - 1 do
begin
- txt.anim := DefaultAnimInfo;
RenTextures[i].tex := nil;
+ RenTextures[i].anim := DefaultAnimInfo;
case Textures[i].TextureName of
TEXTURE_NAME_WATER: RenTextures[i].spec := TEXTURE_SPECIAL_WATER;
TEXTURE_NAME_ACID1: RenTextures[i].spec := TEXTURE_SPECIAL_ACID1;
else
RenTextures[i].spec := 0;
RenTextures[i].tex := r_Textures_LoadMultiTextFromFile(Textures[i].FullName, txt, []);
- if RenTextures[i].tex = nil then
- e_LogWritefln('r_Map_LoadTextures: failed to load texture: %s', [Textures[i].FullName])
- else
+ if RenTextures[i].tex <> nil then
+ begin
+ RenTextures[i].anim := txt.anim;
r_Common_StepLoading(1);
+ end
+ else
+ begin
+ e_LogWritefln('r_Map_LoadTextures: failed to load texture: %s', [Textures[i].FullName]);
+ end;
end;
- RenTextures[i].anim := txt.anim;
+ ASSERT(RenTextures[i].anim.frames > 0);
+ ASSERT(RenTextures[i].anim.delay > 0);
end;
end;
if gMapInfo.SkyFullName <> '' then
ASSERT(p <> nil);
if p.FCurTexture >= 0 then
begin
+ ASSERT(p.FCurTexture <= High(p.TextureIDs));
Texture := p.TextureIDs[p.FCurTexture].Texture;
+ ASSERT(Texture <= High(RenTextures));
t := RenTextures[Texture].tex;
if (RenTextures[Texture].spec = 0) or (t <> nil) then
begin
index b98c0d3507d98576d6ecafa23291bfd895280ce9..f66708fbe57af0a95b177e3ba078d5d366c40877 100644 (file)
end;
function r_Textures_LoadTextFromMemory (data: Pointer; size: LongInt; var txt: TAnimTextInfo): Boolean;
- var cfg: TConfig;
+ var cfg: TConfig; text: TAnimTextInfo;
begin
result := false;
if data <> nil then
cfg := TConfig.CreateMem(data, size);
if cfg <> nil then
begin
- txt.name := cfg.ReadStr('', 'resource', '');
- txt.w := MAX(0, cfg.ReadInt('', 'framewidth', 0));
- txt.h := MAX(0, cfg.ReadInt('', 'frameheight', 0));
- txt.anim.loop := true;
- txt.anim.delay := MAX(0, cfg.ReadInt('', 'waitcount', 0));
- txt.anim.frames := MAX(0, cfg.ReadInt('', 'framecount', 0));
- txt.anim.back := cfg.ReadBool('', 'backanim', false);
+ text.name := cfg.ReadStr('', 'resource', '');
+ text.w := cfg.ReadInt('', 'framewidth', 0);
+ text.h := cfg.ReadInt('', 'frameheight', 0);
+ text.anim.loop := true;
+ text.anim.delay := cfg.ReadInt('', 'waitcount', 0);
+ text.anim.frames := cfg.ReadInt('', 'framecount', 0);
+ text.anim.back := cfg.ReadBool('', 'backanim', false);
+ if text.w <= 0 then e_LogWritefln('Warning: bad animation width %s for %s', [text.w, text.name]);
+ if text.h <= 0 then e_LogWritefln('Warning: bad animation height %s for %s', [text.h, text.name]);
+ if text.anim.delay <= 0 then e_LogWritefln('Warning: bad animation delay %s for %s', [text.anim.delay, text.name]);
+ if text.anim.frames <= 0 then e_LogWritefln('Warning: bad animation frame count %s for %s', [text.anim.frames, text.name]);
+ text.w := MAX(0, text.w);
+ text.h := MAX(0, text.h);
+ text.anim.delay := MAX(1, text.anim.delay);
+ text.anim.frames := MAX(1, text.anim.frames);
cfg.Free;
- result := (txt.name <> '') and (txt.w > 0) and (txt.h > 0) and (txt.anim.delay > 0) and (txt.anim.frames > 0);
+ if (txt.name <> '') and (txt.w > 0) and (txt.h > 0) and (txt.anim.delay > 0) and (txt.anim.frames > 0) then
+ begin
+ txt := text;
+ result := true;
+ end;
end;
end;
end;