ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/Global/RawList.pas
(Generate patch)

Comparing oup/current/Global/RawList.pas (file contents):
Revision 127 by alloc, Fri Mar 23 17:14:40 2007 UTC vs.
Revision 128 by alloc, Wed Mar 28 00:57:53 2007 UTC

# Line 29 | Line 29 | var
29   implementation
30  
31   uses
32 <  Template, ConnectionManager, Access_OniArchive, Classes, SysUtils;
32 >  Template, ConnectionManager, Access_OniArchive, Classes, SysUtils, Math;
33  
34  
35   function AGDB(ConnectionID, FileID: Integer): TRawDataList;
# Line 312 | Line 312 | var
312    storetype: Byte;
313    datasize:  Integer;
314    mipmap:    Byte;
315 <  bpp:       Byte;
316 <  minside:   Byte;
315 >
316 >  function GetImgSize(w,h, storetype: Integer): Integer;
317 >  begin
318 >    case storetype of
319 >      0, 1, 2:
320 >        Result := w*h*2;
321 >      8:
322 >        Result := w*h*4;
323 >      9:
324 >        Result :=  Max(1, w div 4) * Max(1, h div 4) * 8;
325 >    else
326 >      Result := -1;
327 >    end;
328 >  end;
329 >
330   begin
331    ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $88, SizeOf(mipmap), @mipmap);
332    ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $8C, SizeOf(x), @x);
# Line 323 | Line 336 | begin
336    ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $A0, 4, @link_mac);
337  
338  
339 <  minside := 1;
327 <  case storetype of
328 <    0, 1, 2:
329 <      bpp := 16;
330 <    8:
331 <      bpp := 32;
332 <    9:
333 <    begin
334 <      bpp := 4;
335 <      minside := 4;
336 <    end;
337 <  end;
338 <
339 <  datasize := (x * y * bpp) div 8;
339 >  datasize := GetImgSize(x, y, storetype);
340    if (mipmap and $01) > 0 then
341    begin
342      repeat
343 <      x    := x div 2;
344 <      y    := y div 2;
345 <      datasize := datasize + (x * y * bpp) div 8;
346 <    until (x = minside) or (y = minside);
347 <    if storetype = 9 then
348 <    begin
349 <      repeat
350 <        x    := x div 2;
351 <        y    := y div 2;
352 <        datasize := datasize + (x * y * 16) div 8;
353 <      until (x = 1) or (y = 1);
354 <    end;
343 >      x    := Max(x div 2, 1);
344 >      y    := Max(y div 2, 1);
345 >      datasize := datasize + GetImgSize(x, y, storetype);
346 >    until (x = 1) and (y = 1);
347    end;
348  
349    SetLength(Result, 1);

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)