author | Wolfgang Steffens <WolfgangSteff@gmail.com> |
Mon, 25 Jun 2012 12:01:19 +0200 | |
changeset 7292 | 18430abfbcd2 |
child 7295 | e70b81854fb9 |
permissions | -rw-r--r-- |
7292
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
1 |
{$INCLUDE "options.inc"} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
2 |
{$IF GLunit = GL}{$DEFINE GLunit:=GL,GLext}{$ENDIF} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
3 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
4 |
unit uAtlas; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
5 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
6 |
interface |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
7 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
8 |
uses SDLh, uTypes; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
9 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
10 |
procedure initModule; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
11 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
12 |
function Surface2Tex_(surf: PSDL_Surface; enableClamp: boolean): PTexture; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
13 |
procedure FreeTexture_(sprite: PTexture); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
14 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
15 |
implementation |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
16 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
17 |
uses GLunit, uBinPacker, uDebug, png, sysutils; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
18 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
19 |
const |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
20 |
MaxAtlases = 1; // Maximum number of atlases (textures) to allocate |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
21 |
MaxTexSize = 4096; // Maximum atlas size in pixels |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
22 |
MinTexSize = 128; // Minimum atlas size in pixels |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
23 |
CompressionThreshold = 0.4; // Try to compact (half the size of) an atlas, when occupancy is less than this |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
24 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
25 |
type |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
26 |
AtlasInfo = record |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
27 |
PackerInfo: Atlas; // Rectangle packer context |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
28 |
TextureInfo: TAtlas; // OpenGL texture information |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
29 |
Allocated: boolean; // indicates if this atlas is in use |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
30 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
31 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
32 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
33 |
Info: array[0..MaxAtlases-1] of AtlasInfo; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
34 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
35 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
36 |
//////////////////////////////////////////////////////////////////////////////// |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
37 |
// Debug routines |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
38 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
39 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
40 |
DumpID: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
41 |
DumpFile: File of byte; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
42 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
43 |
const |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
44 |
PNG_COLOR_TYPE_RGBA = 6; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
45 |
PNG_COLOR_TYPE_RGB = 2; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
46 |
PNG_INTERLACE_NONE = 0; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
47 |
PNG_COMPRESSION_TYPE_DEFAULT = 0; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
48 |
PNG_FILTER_TYPE_DEFAULT = 0; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
49 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
50 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
51 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
52 |
procedure writefunc(png: png_structp; buffer: png_bytep; size: QWord); cdecl; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
53 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
54 |
p: Pbyte; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
55 |
i: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
56 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
57 |
//TStream(png_get_io_ptr(png)).Write(buffer^, size); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
58 |
BlockWrite(DumpFile, buffer^, size); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
59 |
{ p:= PByte(buffer^); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
60 |
for i:=0 to pred(size) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
61 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
62 |
Write(DumpFile, p^); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
63 |
inc(p); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
64 |
end;} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
65 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
66 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
67 |
function IntToStrPad(i: Integer): string; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
68 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
69 |
s: string; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
70 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
71 |
s:= IntToStr(i); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
72 |
if (i < 10) then s:='0' + s; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
73 |
if (i < 100) then s:='0' + s; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
74 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
75 |
IntToStrPad:=s; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
76 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
77 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
78 |
procedure DumpAtlas(var info: AtlasInfo); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
79 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
80 |
png: png_structp; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
81 |
png_info: png_infop; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
82 |
w, h, sz: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
83 |
filename: string; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
84 |
rows: array of png_bytep; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
85 |
size: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
86 |
i, j: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
87 |
mem, p, pp: PByte; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
88 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
89 |
filename:= '/home/wolfgangst/hedgewars/dump/atlas_' + IntToStrPad(DumpID) + '.png'; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
90 |
Assign(DumpFile, filename); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
91 |
inc(DumpID); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
92 |
Rewrite(DumpFile); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
93 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
94 |
w:= info.TextureInfo.w; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
95 |
h:= info.TextureInfo.h; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
96 |
size:= w * h * 4; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
97 |
SetLength(rows, h); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
98 |
GetMem(mem, size); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
99 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
100 |
glBindTexture(GL_TEXTURE_2D, info.TextureInfo.id); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
101 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
102 |
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, mem); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
103 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
104 |
p:= mem; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
105 |
for i:= 0 to pred(h) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
106 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
107 |
rows[i]:= p; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
108 |
pp:= p; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
109 |
inc(pp, 3); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
110 |
{for j:= 0 to pred(w) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
111 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
112 |
pp^:=255; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
113 |
inc(pp, 4); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
114 |
end;} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
115 |
inc(p, w * 4); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
116 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
117 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
118 |
png := png_create_write_struct(PNG_LIBPNG_VER_STRING, nil, nil, nil); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
119 |
png_info := png_create_info_struct(png); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
120 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
121 |
png_set_write_fn(png, nil, @writefunc, nil); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
122 |
png_set_IHDR(png, png_info, w, h, 8, PNG_COLOR_TYPE_RGBA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
123 |
png_write_info(png, png_info); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
124 |
png_write_image(png, @rows[0]); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
125 |
png_write_end(png, png_info); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
126 |
png_destroy_write_struct(@png, @png_info); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
127 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
128 |
FreeMem(mem); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
129 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
130 |
SetLength(rows, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
131 |
Close(DumpFile); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
132 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
133 |
//if (DumpID >= 30) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
134 |
// halt(0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
135 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
136 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
137 |
//////////////////////////////////////////////////////////////////////////////// |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
138 |
// Upload routines |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
139 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
140 |
function createTexture(width, height: Integer): TAtlas; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
141 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
142 |
nullTex: Pointer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
143 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
144 |
createTexture.w:= width; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
145 |
createTexture.h:= height; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
146 |
createTexture.priority:= 0; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
147 |
glGenTextures(1, @createTexture.id); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
148 |
glBindTexture(GL_TEXTURE_2D, createTexture.id); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
149 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
150 |
//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
151 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
152 |
GetMem(NullTex, width * height * 4); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
153 |
FillChar(NullTex^, width * height * 4, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
154 |
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NullTex); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
155 |
FreeMem(NullTex); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
156 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
157 |
glBindTexture(GL_TEXTURE_2D, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
158 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
159 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
160 |
function Min(x, y: Single): Single; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
161 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
162 |
if x < y then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
163 |
Min:=x |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
164 |
else Min:=y; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
165 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
166 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
167 |
function Max(x, y: Single): Single; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
168 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
169 |
if x > y then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
170 |
Max:=x |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
171 |
else Max:=y; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
172 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
173 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
174 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
175 |
procedure HSVToRGB(const H, S, V: Single; out R, G, B: Single); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
176 |
const |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
177 |
SectionSize = 60/360; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
178 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
179 |
Section: Single; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
180 |
SectionIndex: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
181 |
f: single; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
182 |
p, q, t: Single; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
183 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
184 |
if H < 0 then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
185 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
186 |
R:= V; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
187 |
G:= R; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
188 |
B:= R; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
189 |
end |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
190 |
else |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
191 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
192 |
Section:= H/SectionSize; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
193 |
SectionIndex:= Trunc(Section); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
194 |
f:= Section - SectionIndex; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
195 |
p:= V * ( 1 - S ); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
196 |
q:= V * ( 1 - S * f ); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
197 |
t:= V * ( 1 - S * ( 1 - f ) ); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
198 |
case SectionIndex of |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
199 |
0: |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
200 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
201 |
R:= V; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
202 |
G:= t; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
203 |
B:= p; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
204 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
205 |
1: |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
206 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
207 |
R:= q; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
208 |
G:= V; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
209 |
B:= p; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
210 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
211 |
2: |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
212 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
213 |
R:= p; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
214 |
G:= V; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
215 |
B:= t; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
216 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
217 |
3: |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
218 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
219 |
R:= p; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
220 |
G:= q; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
221 |
B:= V; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
222 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
223 |
4: |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
224 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
225 |
R:= t; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
226 |
G:= p; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
227 |
B:= V; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
228 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
229 |
else |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
230 |
R:= V; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
231 |
G:= p; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
232 |
B:= q; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
233 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
234 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
235 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
236 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
237 |
procedure DebugColorize(surf: PSDL_Surface); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
238 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
239 |
sz: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
240 |
p: PByte; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
241 |
i: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
242 |
r, g, b, a, inva: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
243 |
randr, randg, randb: Single; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
244 |
randh: Single; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
245 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
246 |
sz:= surf^.w * surf^.h; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
247 |
p:= surf^.pixels; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
248 |
//randr:=Random; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
249 |
//randg:=Random; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
250 |
//randb:=1 - min(randr, randg); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
251 |
randh:=Random; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
252 |
HSVToRGB(randh, 1.0, 1.0, randr, randg, randb); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
253 |
for i:=0 to pred(sz) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
254 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
255 |
a:= p[3]; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
256 |
inva:= 255 - a; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
257 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
258 |
r:=Trunc(inva*randr + p[0]*a/255); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
259 |
g:=Trunc(inva*randg + p[1]*a/255); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
260 |
b:=Trunc(inva*randb + p[2]*a/255); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
261 |
if r > 255 then r:= 255; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
262 |
if g > 255 then g:= 255; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
263 |
if b > 255 then b:= 255; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
264 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
265 |
p[0]:=r; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
266 |
p[1]:=g; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
267 |
p[2]:=b; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
268 |
p[3]:=255; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
269 |
inc(p, 4); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
270 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
271 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
272 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
273 |
procedure Upload(var info: AtlasInfo; sprite: Rectangle; surf: PSDL_Surface); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
274 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
275 |
sp: PTexture; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
276 |
i, j, stride: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
277 |
scanline: PByte; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
278 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
279 |
writeln('Uploading sprite to ', sprite.x, ',', sprite.y, ',', sprite.width, ',', sprite.height); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
280 |
sp:= PTexture(sprite.UserData); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
281 |
sp^.x:= sprite.x; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
282 |
sp^.y:= sprite.y; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
283 |
sp^.isRotated:= sp^.w <> sprite.width; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
284 |
sp^.atlas:= @info.TextureInfo; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
285 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
286 |
if SDL_MustLock(surf) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
287 |
SDLTry(SDL_LockSurface(surf) >= 0, true); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
288 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
289 |
//if GrayScale then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
290 |
// Surface2GrayScale(surf); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
291 |
DebugColorize(surf); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
292 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
293 |
glBindTexture(GL_TEXTURE_2D, info.TextureInfo.id); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
294 |
if (sp^.isRotated) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
295 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
296 |
scanline:= surf^.pixels; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
297 |
for i:= 0 to pred(sprite.width) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
298 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
299 |
glTexSubImage2D(GL_TEXTURE_2D, 0, sprite.x + i, sprite.y, 1, sprite.height, GL_RGBA, GL_UNSIGNED_BYTE, scanline); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
300 |
inc(scanline, sprite.height * 4); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
301 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
302 |
end |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
303 |
else |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
304 |
glTexSubImage2D(GL_TEXTURE_2D, 0, sprite.x, sprite.y, sprite.width, sprite.height, GL_RGBA, GL_UNSIGNED_BYTE, surf^.pixels); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
305 |
glBindTexture(GL_TEXTURE_2D, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
306 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
307 |
if SDL_MustLock(surf) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
308 |
SDL_UnlockSurface(surf); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
309 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
310 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
311 |
{$DEFINE HAS_PBO} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
312 |
procedure Repack(var info: AtlasInfo; newAtlas: Atlas; newSprite: PTexture; surf: PSDL_Surface); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
313 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
314 |
{$IFDEF HAS_PBO} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
315 |
pbo: GLuint; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
316 |
{$ENDIF} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
317 |
base: PByte; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
318 |
oldSize: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
319 |
oldWidth: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
320 |
offset: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
321 |
i,j : Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
322 |
r: Rectangle; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
323 |
sp: PTexture; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
324 |
newIsRotated: boolean; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
325 |
newSpriteRect: Rectangle; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
326 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
327 |
writeln('Repacking atlas (', info.PackerInfo.width, 'x', info.PackerInfo.height, ')', ' -> (', newAtlas.width, 'x', newAtlas.height, ')'); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
328 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
329 |
{$IFDEF RETAIN_SURFACES} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
330 |
// we can simply re-upload from RAM |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
331 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
332 |
// delete the old atlas |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
333 |
glDeleteTextures(1, @info.TextureInfo.id); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
334 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
335 |
// create a new atlas with different size |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
336 |
info.TextureInfo:= createTexture(newAtlas.width, newAtlas.height); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
337 |
glBindTexture(GL_TEXTURE_2D, info.TextureInfo.id); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
338 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
339 |
atlasDelete(info.PackerInfo); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
340 |
info.PackerInfo:= newAtlas; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
341 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
342 |
// and process all sprites of the new atlas |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
343 |
for i:=0 to pred(newAtlas.usedRectangles.count) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
344 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
345 |
r:= newAtlas.usedRectangles.data[i]; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
346 |
sp:= PTexture(r.UserData); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
347 |
Upload(info, r, sp^.surface); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
348 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
349 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
350 |
{$ELSE} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
351 |
// as we dont have access to the original sprites in ram anymore, |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
352 |
// we need to copy from the existing atlas to an PBO, delete the original texture |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
353 |
// and finally copy from the PBO back to the new texture object |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
354 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
355 |
// allocate a PBO and copy from old atlas to it |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
356 |
oldSize:= info.TextureInfo.w * info.TextureInfo.h * 4; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
357 |
oldWidth:= info.TextureInfo.w; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
358 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
359 |
glBindTexture(GL_TEXTURE_2D, info.TextureInfo.id); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
360 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
361 |
{$IFDEF HAS_PBO} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
362 |
base:= nil; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
363 |
glGenBuffers(1, @pbo); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
364 |
glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
365 |
glBufferData(GL_PIXEL_PACK_BUFFER, oldSize, nil, GL_COPY); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
366 |
//glGetTexImage( GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
367 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
368 |
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
369 |
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
370 |
{$ELSE} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
371 |
GetMem(base, oldSize); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
372 |
glGetTexImage( GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, base); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
373 |
{$ENDIF} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
374 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
375 |
// delete the old atlas |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
376 |
glDeleteTextures(1, @info.TextureInfo.id); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
377 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
378 |
// create a new atlas with different size |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
379 |
info.TextureInfo:= createTexture(newAtlas.width, newAtlas.height); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
380 |
glBindTexture(GL_TEXTURE_2D, info.TextureInfo.id); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
381 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
382 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
383 |
// and process all sprites of the new atlas |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
384 |
for i:=0 to pred(newAtlas.usedRectangles.count) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
385 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
386 |
r:= newAtlas.usedRectangles.data[i]; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
387 |
sp:= PTexture(r.UserData); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
388 |
if sp = newSprite then // this is the to be added sprite |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
389 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
390 |
// we need to do defer the upload till after this loop, |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
391 |
// as we currently upload from the PBO to texture |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
392 |
newSpriteRect:= r; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
393 |
continue; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
394 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
395 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
396 |
newIsRotated:= sp^.w <> r.width; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
397 |
if newIsRotated <> sp^.isRotated then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
398 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
399 |
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
400 |
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
401 |
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
402 |
offset:= sp^.x + sp^.y * oldWidth; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
403 |
for j:= 0 to pred(r.width) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
404 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
405 |
glTexSubImage2D(GL_TEXTURE_2D, 0, r.x + j, r.y, 1, r.height, GL_RGBA, GL_UNSIGNED_BYTE, base + offset * 4); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
406 |
inc(offset, oldWidth); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
407 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
408 |
end |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
409 |
else |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
410 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
411 |
glPixelStorei(GL_UNPACK_ROW_LENGTH, oldWidth); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
412 |
glPixelStorei(GL_UNPACK_SKIP_PIXELS, sp^.x); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
413 |
glPixelStorei(GL_UNPACK_SKIP_ROWS, sp^.y); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
414 |
glTexSubImage2D(GL_TEXTURE_2D, 0, r.x, r.y, r.width, r.height, GL_RGBA, GL_UNSIGNED_BYTE, base); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
415 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
416 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
417 |
sp^.x:= r.x; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
418 |
sp^.y:= r.y; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
419 |
sp^.isRotated:= newIsRotated; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
420 |
sp^.atlas:= @info.TextureInfo; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
421 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
422 |
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
423 |
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
424 |
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
425 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
426 |
atlasDelete(info.PackerInfo); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
427 |
info.PackerInfo:= newAtlas; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
428 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
429 |
{$IFDEF HAS_PBO} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
430 |
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
431 |
glDeleteBuffers(1, @pbo); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
432 |
{$ELSE} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
433 |
FreeMem(base, oldSize); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
434 |
{$ENDIF} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
435 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
436 |
// finally upload the new sprite (if any) |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
437 |
if newSprite <> nil then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
438 |
Upload(info, newSpriteRect, surf); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
439 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
440 |
glBindTexture(GL_TEXTURE_2D, 0); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
441 |
{$ENDIF} |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
442 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
443 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
444 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
445 |
//////////////////////////////////////////////////////////////////////////////// |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
446 |
// Utility functions |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
447 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
448 |
function SizeForSprite(sprite: PTexture): Size; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
449 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
450 |
SizeForSprite.width:= sprite^.w; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
451 |
SizeForSprite.height:= sprite^.h; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
452 |
SizeForSprite.UserData:= sprite; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
453 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
454 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
455 |
procedure EnlargeSize(var x: Integer; var y: Integer); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
456 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
457 |
if (y < x) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
458 |
y:= y + y |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
459 |
else |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
460 |
x:= x + x; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
461 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
462 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
463 |
procedure CompactSize(var x: Integer; var y: Integer); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
464 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
465 |
if (x > y) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
466 |
x:= x div 2 |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
467 |
else |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
468 |
y:= y div 2; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
469 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
470 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
471 |
//////////////////////////////////////////////////////////////////////////////// |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
472 |
// Sprite allocation logic |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
473 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
474 |
function TryRepack(var info: AtlasInfo; w, h: Integer; hasNewSprite: boolean; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
475 |
newSprite: Size; surf: PSDL_Surface): boolean; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
476 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
477 |
sizes: SizeList; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
478 |
repackedAtlas: Atlas; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
479 |
sprite: PTexture; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
480 |
i: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
481 |
rects: RectangleList; // we wont really need this as we do a full repack using the atlas later on |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
482 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
483 |
TryRepack:= false; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
484 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
485 |
// STEP 1: collect sizes of all existing sprites |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
486 |
sizeListInit(sizes); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
487 |
for i:= 0 to pred(info.PackerInfo.usedRectangles.count) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
488 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
489 |
sprite:= PTexture(info.PackerInfo.usedRectangles.data[i].UserData); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
490 |
sizeListAdd(sizes, SizeForSprite(sprite)); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
491 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
492 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
493 |
// STEP 2: add the new sprite to the list |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
494 |
if hasNewSprite then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
495 |
sizeListAdd(sizes, newSprite); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
496 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
497 |
// STEP 3: try to create a non adaptive re-packing using the whole list |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
498 |
repackedAtlas:= atlasNew(w, h); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
499 |
rectangleListInit(rects); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
500 |
if atlasInsertSet(repackedAtlas, sizes, rects) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
501 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
502 |
TryRepack:= true; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
503 |
if hasNewSprite then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
504 |
sprite:= PTexture(newSprite.UserData) |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
505 |
else |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
506 |
sprite:= nil; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
507 |
Repack(info, repackedAtlas, sprite, surf); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
508 |
// repack assigns repackedAtlas to the current info and deletes the old one |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
509 |
// thus we wont do atlasDelete(repackedAtlas); here |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
510 |
rectangleListClear(rects); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
511 |
sizeListClear(sizes); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
512 |
DumpAtlas(info); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
513 |
exit; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
514 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
515 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
516 |
rectangleListClear(rects); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
517 |
sizeListClear(sizes); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
518 |
atlasDelete(repackedAtlas); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
519 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
520 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
521 |
function TryInsert(var info: AtlasInfo; newSprite: Size; surf: PSDL_Surface): boolean; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
522 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
523 |
rect: Rectangle; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
524 |
sprite: PTexture; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
525 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
526 |
TryInsert:= false; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
527 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
528 |
if atlasInsertAdaptive(info.PackerInfo, newSprite, rect) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
529 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
530 |
// we succeeded adaptivley allocating the sprite to the i'th atlas. |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
531 |
Upload(info, rect, surf); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
532 |
DumpAtlas(info); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
533 |
TryInsert:= true; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
534 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
535 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
536 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
537 |
function Surface2Tex_(surf: PSDL_Surface; enableClamp: boolean): PTexture; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
538 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
539 |
sz: Size; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
540 |
sprite: PTexture; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
541 |
currentWidth, currentHeight: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
542 |
i: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
543 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
544 |
if (surf^.w > MaxTexSize) or (surf^.h > MaxTexSize) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
545 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
546 |
// we could at best downscale the sprite, abort for now |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
547 |
writeln('Sprite size larger than maximum texture size'); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
548 |
halt(-1); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
549 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
550 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
551 |
// allocate the sprite |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
552 |
new(sprite); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
553 |
Surface2Tex_:= sprite; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
554 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
555 |
sprite^.w:= surf^.w; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
556 |
sprite^.h:= surf^.h; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
557 |
sprite^.x:= 0; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
558 |
sprite^.y:= 0; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
559 |
sprite^.isRotated:= false; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
560 |
sprite^.surface:= surf; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
561 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
562 |
sz:= SizeForSprite(sprite); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
563 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
564 |
// STEP 1 |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
565 |
// try to allocate the new sprite in one of the existing atlases |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
566 |
for i:= 0 to pred(MaxAtlases) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
567 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
568 |
if not Info[i].Allocated then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
569 |
continue; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
570 |
if TryInsert(Info[i], sz, surf) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
571 |
exit; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
572 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
573 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
574 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
575 |
// STEP 2 |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
576 |
// none of the atlases has space left for the allocation, try a garbage collection |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
577 |
for i:= 0 to pred(MaxAtlases) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
578 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
579 |
if not Info[i].Allocated then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
580 |
continue; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
581 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
582 |
if TryRepack(Info[i], Info[i].PackerInfo.width, Info[i].PackerInfo.height, true, sz, surf) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
583 |
exit; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
584 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
585 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
586 |
// STEP 3 |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
587 |
// none of the atlases could be repacked in a way to fit the new sprite, try enlarging |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
588 |
for i:= 0 to pred(MaxAtlases) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
589 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
590 |
if not Info[i].Allocated then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
591 |
continue; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
592 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
593 |
currentWidth:= Info[i].PackerInfo.width; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
594 |
currentHeight:= Info[i].PackerInfo.height; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
595 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
596 |
EnlargeSize(currentWidth, currentHeight); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
597 |
while (currentWidth <= MaxTexSize) and (currentHeight <= MaxTexSize) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
598 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
599 |
if TryRepack(Info[i], currentWidth, currentHeight, true, sz, surf) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
600 |
exit; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
601 |
EnlargeSize(currentWidth, currentHeight); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
602 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
603 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
604 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
605 |
// STEP 4 |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
606 |
// none of the existing atlases could be resized, try to allocate a new atlas |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
607 |
for i:= 0 to pred(MaxAtlases) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
608 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
609 |
if Info[i].Allocated then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
610 |
continue; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
611 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
612 |
currentWidth:= MinTexSize; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
613 |
currentHeight:= MinTexSize; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
614 |
while (sz.width > currentWidth) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
615 |
currentWidth:= currentWidth + currentWidth; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
616 |
while (sz.height > currentHeight) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
617 |
currentHeight:= currentHeight + currentHeight; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
618 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
619 |
with Info[i] do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
620 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
621 |
PackerInfo:= atlasNew(currentWidth, currentHeight); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
622 |
TextureInfo:= createTexture(currentWidth, currentHeight); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
623 |
Allocated:= true; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
624 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
625 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
626 |
if TryInsert(Info[i], sz, surf) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
627 |
exit; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
628 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
629 |
// this shouldnt have happened, the rectpacker should be able to fit the sprite |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
630 |
// into an unused rectangle that is the same size or larger than the requested sprite. |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
631 |
writeln('Internal error: atlas allocation failed'); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
632 |
halt(-1); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
633 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
634 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
635 |
// we reached the upperbound of resources we are willing to allocate |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
636 |
writeln('Exhausted maximum sprite allocation size'); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
637 |
halt(-1); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
638 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
639 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
640 |
//////////////////////////////////////////////////////////////////////////////// |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
641 |
// Sprite deallocation logic |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
642 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
643 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
644 |
procedure FreeTexture_(sprite: PTexture); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
645 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
646 |
i, j, deleteAt: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
647 |
usedArea: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
648 |
totalArea: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
649 |
r: Rectangle; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
650 |
atlasW, atlasH: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
651 |
unused: Size; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
652 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
653 |
if sprite = nil then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
654 |
exit; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
655 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
656 |
for i:= 0 to pred(MaxAtlases) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
657 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
658 |
if sprite^.atlas <> @Info[i].TextureInfo then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
659 |
continue; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
660 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
661 |
usedArea:= 0; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
662 |
for j:=0 to pred(Info[i].PackerInfo.usedRectangles.count) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
663 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
664 |
r:= Info[i].PackerInfo.usedRectangles.data[j]; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
665 |
if r.UserData = sprite then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
666 |
deleteAt:= j |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
667 |
else |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
668 |
inc(usedArea, r.width * r.height); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
669 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
670 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
671 |
rectangleListRemoveAt(Info[i].PackerInfo.usedRectangles, j); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
672 |
dispose(sprite); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
673 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
674 |
while true do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
675 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
676 |
atlasW:= Info[i].PackerInfo.width; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
677 |
atlasH:= Info[i].PackerInfo.height; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
678 |
totalArea:= atlasW * atlasH; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
679 |
if usedArea >= totalArea * CompressionThreshold then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
680 |
exit; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
681 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
682 |
if (atlasW = MinTexSize) and (atlasH = MinTexSize) then |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
683 |
exit; // we could try to move everything from this to another atlas here |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
684 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
685 |
CompactSize(atlasW, atlasH); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
686 |
unused:= unused; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
687 |
TryRepack(Info[i], atlasW, atlasH, false, unused, nil); |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
688 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
689 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
690 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
691 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
692 |
procedure initModule; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
693 |
var |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
694 |
i: Integer; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
695 |
begin |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
696 |
DumpID:=0; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
697 |
for i:= 0 to pred(MaxAtlases) do |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
698 |
Info[i].Allocated:= false; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
699 |
end; |
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
700 |
|
18430abfbcd2
added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff
changeset
|
701 |
end. |