hedgewars/uAtlas.pas
author Wolfgang Steffens <WolfgangSteff@gmail.com>
Tue, 10 Jul 2012 11:08:35 +0200
changeset 7304 8b3575750cd2
parent 7301 bea42438a2ec
child 7377 1aceade403ba
permissions -rw-r--r--
Added auto cropping to atlasing Added splitting of animation sheets to frames and auto crop the frames. Fixed some atlas blitting issues. Vertex coords are still improper tho for auto cropped frames
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    14
procedure DebugAtlas;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    15
procedure DumpInfo(tex: PTexture);
7292
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
implementation
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    18
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    19
uses GLunit, uBinPacker, uDebug, png, sysutils, uTextures;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    20
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    21
const
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    22
    MaxAtlases = 4;    // Maximum number of atlases (textures) to allocate
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    23
    MaxTexSize = 1024; // Maximum atlas size in pixels
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    24
    MinTexSize = 128;  // Minimum atlas size in pixels
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    25
    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
    26
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    27
type
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    28
    AtlasInfo = record
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    29
        PackerInfo: Atlas;     // Rectangle packer context
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    30
        TextureInfo: TAtlas;   // OpenGL texture information
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    31
        Allocated: boolean;    // indicates if this atlas is in use
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    32
        DumpID: Integer;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    33
    end;
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
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    36
    Info: array[0..MaxAtlases-1] of AtlasInfo;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    37
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
////////////////////////////////////////////////////////////////////////////////
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    40
// Debug routines
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
    41
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    42
procedure DumpInfo(tex: PTexture);
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    43
var
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    44
    frame: Integer;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    45
    i, atlasID: Integer;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    46
    aw, ah: Integer;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    47
begin
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    48
    if tex = nil then
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    49
        exit;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    50
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    51
    frame:= 0;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    52
    writeln(stdout, 'Texture: ' + IntToHex(Integer(tex), 8));
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    53
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    54
    while tex <> nil do
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    55
    begin
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    56
        atlasID:= -1;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    57
        for i:= 0 to Pred(MaxAtlases) do
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    58
            if tex^.atlas = @Info[i].TextureInfo then
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    59
                atlasID:=i;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    60
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    61
        aw:= tex^.atlas^.w;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    62
        ah:= tex^.atlas^.h;   
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    63
 
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    64
        writeln(stdout, 'Frame   : ' + IntToStr(frame));
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    65
        writeln(stdout, 'Size    : ' + IntToStr(tex^.w) + 'x' + IntToStr(tex^.h));
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    66
        writeln(stdout, 'Atlas   : ' + IntToStr(atlasID));
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    67
        writeln(stdout, 'Location: ' + IntToStr(tex^.x) + 'x' + IntToStr(tex^.y));
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    68
        writeln(stdout, 'TB      : ' + '(' + FloatToStrF(tex^.tb[0].X, ffFixed, 15, 4) + ',' + FloatToStrF(tex^.tb[0].Y, ffFixed, 15, 4) + ') '
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    69
                                     + '(' + FloatToStrF(tex^.tb[1].X, ffFixed, 15, 4) + ',' + FloatToStrF(tex^.tb[1].Y, ffFixed, 15, 4) + ') '
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    70
                                     + '(' + FloatToStrF(tex^.tb[2].X, ffFixed, 15, 4) + ',' + FloatToStrF(tex^.tb[2].Y, ffFixed, 15, 4) + ') '
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    71
                                     + '(' + FloatToStrF(tex^.tb[3].X, ffFixed, 15, 4) + ',' + FloatToStrF(tex^.tb[3].Y, ffFixed, 15, 4) + ')');
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    72
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    73
        writeln(stdout, 'TB.ABS  : ' + '(' + FloatToStrF(tex^.tb[0].X * aw, ffFixed, 15, 4) + ',' + FloatToStrF(tex^.tb[0].Y * ah, ffFixed, 15, 4) + ') '
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    74
                                     + '(' + FloatToStrF(tex^.tb[1].X * aw, ffFixed, 15, 4) + ',' + FloatToStrF(tex^.tb[1].Y * ah, ffFixed, 15, 4) + ') '
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    75
                                     + '(' + FloatToStrF(tex^.tb[2].X * aw, ffFixed, 15, 4) + ',' + FloatToStrF(tex^.tb[2].Y * ah, ffFixed, 15, 4) + ') '
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    76
                                     + '(' + FloatToStrF(tex^.tb[3].X * aw, ffFixed, 15, 4) + ',' + FloatToStrF(tex^.tb[3].Y * ah, ffFixed, 15, 4) + ')');
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    77
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    78
        inc(frame);
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    79
        tex:= tex^.nextFrame;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    80
    end;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    81
    halt(0);
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    82
end;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
    83
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    84
procedure AssertCount(tex: PTexture; count: Integer);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    85
var
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    86
    i, j: Integer;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    87
    found: Integer;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    88
begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    89
    found:= 0;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    90
    for i:= 0 to pred(MaxAtlases) do
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    91
    begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    92
        if not Info[i].Allocated then
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    93
            continue;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    94
        for j:=0 to pred(Info[i].PackerInfo.usedRectangles.count) do
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    95
        begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    96
            if Info[i].PackerInfo.usedRectangles.data[j].UserData = tex then
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    97
                inc(found);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    98
        end;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
    99
    end;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   100
    if found <> count then
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   101
    begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   102
        writeln('AssertCount(', IntToHex(Integer(tex), 8), ') failed, found ', found, ' times');
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   103
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   104
        for i:= 0 to pred(MaxAtlases) do
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   105
        begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   106
            if not Info[i].Allocated then
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   107
                continue;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   108
            for j:=0 to pred(Info[i].PackerInfo.usedRectangles.count) do
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   109
            begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   110
                if Info[i].PackerInfo.usedRectangles.data[j].UserData = tex then
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   111
                    writeln(' found in atlas ', i, ' at slot ', j);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   112
            end;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   113
        end;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   114
        halt(-2);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   115
    end;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   116
end;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   117
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   118
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   119
    DumpFile: File of byte;
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
const
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   122
    PNG_COLOR_TYPE_RGBA = 6;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   123
    PNG_COLOR_TYPE_RGB = 2;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   124
    PNG_INTERLACE_NONE = 0;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   125
    PNG_COMPRESSION_TYPE_DEFAULT = 0;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   126
    PNG_FILTER_TYPE_DEFAULT = 0;
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
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
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
   131
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   132
    p: Pbyte;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   133
    i: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   134
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   135
  //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
   136
    BlockWrite(DumpFile, buffer^, size);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   137
{    p:= PByte(buffer^);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   138
    for i:=0 to pred(size) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   139
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   140
        Write(DumpFile, p^);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   141
        inc(p);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   142
    end;}
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   143
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   144
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   145
function IntToStrPad(i: Integer): string;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   146
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   147
  s: string;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   148
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   149
   s:= IntToStr(i);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   150
   if (i < 10) then s:='0' + s;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   151
   if (i < 100) then s:='0' + s;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   152
   if (i < 1000) then s:='0' + s;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   153
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   154
   IntToStrPad:=s;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   155
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   156
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   157
// GL1 ATLAS DEBUG ONLY CODE!
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   158
procedure DebugAtlas;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   159
{$IFDEF DEBUG_ATLAS}
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   160
var
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   161
    vp: array[0..3] of GLint;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   162
    prog: GLint;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   163
    i: Integer;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   164
    x, y: Integer;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   165
const
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   166
    SZ = 512;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   167
begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   168
    x:= 0;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   169
    y:= 0;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   170
    for i:= 0 to pred(MaxAtlases) do
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   171
    begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   172
        if not Info[i].allocated then
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   173
            continue;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   174
        glGetIntegerv(GL_VIEWPORT, @vp);
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   175
{$IFDEF GL2}
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   176
        glGetIntegerv(GL_CURRENT_PROGRAM, @prog);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   177
        glUseProgram(0);
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   178
{$ENDIF}
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   179
        glPushMatrix;
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   180
        glLoadIdentity;
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   181
        glMatrixMode(GL_PROJECTION);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   182
        glPushMatrix;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   183
        glLoadIdentity;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   184
        glOrtho(0, vp[2], vp[3], 0, -1, 1);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   185
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   186
        glDisable(GL_CULL_FACE);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   187
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   188
        glBindTexture(GL_TEXTURE_2D, Info[i].TextureInfo.id);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   189
        glBegin(GL_QUADS);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   190
        glTexCoord2f(0.0, 0.0);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   191
        glVertex2i(x * SZ, y * SZ);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   192
        glTexCoord2f(1.0, 0.0);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   193
        glVertex2i((x + 1) * SZ, y * SZ);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   194
        glTexCoord2f(1.0, 1.0);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   195
        glVertex2i((x + 1) * SZ, (y + 1) * SZ);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   196
        glTexCoord2f(0.0, 1.0);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   197
        glVertex2i(x * SZ, (y + 1) * SZ);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   198
        glEnd();
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   199
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   200
        glPopMatrix;
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   201
        glMatrixMode(GL_MODELVIEW);
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   202
        glPopMatrix;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   203
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   204
        inc(x);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   205
        if (x = 2) then
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   206
        begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   207
            x:=0;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   208
            inc(y);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   209
        end;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   210
     
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   211
{$IFDEF GL2}
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   212
        glUseProgram(prog);
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   213
{$ENDIF}
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   214
    end;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   215
end;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   216
{$ELSE}
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   217
begin;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   218
end;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   219
{$ENDIF}
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   220
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   221
procedure DumpAtlas(var dinfo: AtlasInfo);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   222
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   223
    png: png_structp;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   224
    png_info: png_infop;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   225
    w, h, sz: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   226
    filename: string;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   227
    rows: array of png_bytep;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   228
    size: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   229
    i, j: Integer;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   230
    idx: Integer;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   231
    mem, p, pp: PByte;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   232
begin
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   233
    idx:= -1;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   234
    for i:= 0 to Pred(MaxAtlases) do
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   235
        if @dinfo = @Info[i] then
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   236
            idx:=i;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   237
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   238
    filename:= '/home/wolfgangst/hedgewars/dump/atlas_' + IntToStr(idx) + '_' + IntToStrPad(dinfo.DumpID) + '.png';
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   239
    Assign(DumpFile, filename);
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   240
    inc(dinfo.DumpID);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   241
    Rewrite(DumpFile);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   242
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   243
    w:= dinfo.TextureInfo.w;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   244
    h:= dinfo.TextureInfo.h;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   245
    size:= w * h * 4;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   246
    SetLength(rows, h);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   247
    GetMem(mem, size);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   248
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   249
    glBindTexture(GL_TEXTURE_2D, dinfo.TextureInfo.id);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   250
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   251
    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
   252
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   253
    p:= mem;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   254
    for i:= 0 to pred(h) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   255
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   256
        rows[i]:= p;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   257
        pp:= p;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   258
        inc(pp, 3);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   259
        {for j:= 0 to pred(w) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   260
        begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   261
            pp^:=255;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   262
            inc(pp, 4);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   263
        end;}
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   264
        inc(p, w * 4);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   265
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   266
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   267
    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
   268
    png_info := png_create_info_struct(png);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   269
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   270
    png_set_write_fn(png, nil, @writefunc, nil);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   271
    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
   272
    png_write_info(png, png_info);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   273
    png_write_image(png, @rows[0]);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   274
    png_write_end(png, png_info);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   275
    png_destroy_write_struct(@png, @png_info);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   276
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   277
    FreeMem(mem);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   278
    
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   279
    SetLength(rows, 0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   280
    Close(DumpFile);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   281
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   282
    //if (DumpID >= 30) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   283
    //    halt(0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   284
end;
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
////////////////////////////////////////////////////////////////////////////////
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   287
// Upload routines
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
function createTexture(width, height: Integer): TAtlas;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   290
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   291
  nullTex: Pointer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   292
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   293
    createTexture.w:= width;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   294
    createTexture.h:= height;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   295
    createTexture.priority:= 0;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   296
    glGenTextures(1, @createTexture.id);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   297
    glBindTexture(GL_TEXTURE_2D, createTexture.id);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   298
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   299
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   300
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   301
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   302
    //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
   303
    
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   304
    GetMem(NullTex, width * height * 4);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   305
    FillChar(NullTex^, width * height * 4, 0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   306
    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
   307
    FreeMem(NullTex);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   308
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   309
    glBindTexture(GL_TEXTURE_2D, 0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   310
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   311
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   312
function Min(x, y: Single): Single;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   313
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   314
  if x < y then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   315
    Min:=x
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   316
  else Min:=y;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   317
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   318
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   319
function Max(x, y: Single): Single;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   320
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   321
  if x > y then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   322
    Max:=x
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   323
  else Max:=y;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   324
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   325
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   326
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   327
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
   328
const 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   329
    SectionSize = 60/360; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   330
var 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   331
    Section: Single; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   332
    SectionIndex: Integer; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   333
    f: single; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   334
    p, q, t: Single; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   335
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   336
    if H < 0 then 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   337
    begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   338
        R:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   339
        G:= R; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   340
        B:= R; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   341
    end 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   342
    else 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   343
    begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   344
        Section:= H/SectionSize; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   345
        SectionIndex:= Trunc(Section); 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   346
        f:= Section - SectionIndex; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   347
        p:= V * ( 1 - S ); 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   348
        q:= V * ( 1 - S * f ); 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   349
        t:= V * ( 1 - S * ( 1 - f ) ); 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   350
        case SectionIndex of 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   351
            0: 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   352
            begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   353
                R:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   354
                G:= t; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   355
                B:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   356
            end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   357
            1: 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   358
            begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   359
                R:= q; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   360
                G:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   361
                B:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   362
            end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   363
            2: 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   364
            begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   365
                R:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   366
                G:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   367
                B:= t; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   368
            end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   369
            3: 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   370
            begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   371
                R:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   372
                G:= q; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   373
                B:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   374
            end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   375
            4: 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   376
            begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   377
                R:= t; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   378
                G:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   379
                B:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   380
            end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   381
            else 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   382
                R:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   383
                G:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   384
                B:= q; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   385
        end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   386
    end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   387
end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   388
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   389
procedure DebugColorize(surf: PSDL_Surface);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   390
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   391
    sz: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   392
    p: PByte;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   393
    i: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   394
    r, g, b, a, inva: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   395
    randr, randg, randb: Single;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   396
    randh: Single;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   397
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   398
    sz:= surf^.w * surf^.h;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   399
    p:= surf^.pixels;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   400
    //randr:=Random;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   401
    //randg:=Random;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   402
    //randb:=1 - min(randr, randg);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   403
    randh:=Random;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   404
    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
   405
    for i:=0 to pred(sz) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   406
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   407
        a:= p[3];
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   408
        inva:= 255 - a;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   409
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   410
        r:=Trunc(inva*randr + p[0]*a/255);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   411
        g:=Trunc(inva*randg + p[1]*a/255);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   412
        b:=Trunc(inva*randb + p[2]*a/255);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   413
        if r > 255 then r:= 255;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   414
        if g > 255 then g:= 255;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   415
        if b > 255 then b:= 255;
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
        p[0]:=r;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   418
        p[1]:=g;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   419
        p[2]:=b;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   420
        p[3]:=255;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   421
        inc(p, 4);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   422
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   423
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   424
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   425
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
   426
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   427
    sp: PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   428
    i, j, stride: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   429
    scanline: PByte;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   430
    r: TSDL_Rect;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   431
begin
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   432
    //writeln('Uploading sprite to ', sprite.x, ',', sprite.y, ',', sprite.width, ',', sprite.height);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   433
    sp:= PTexture(sprite.UserData);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   434
    sp^.x:= sprite.x;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   435
    sp^.y:= sprite.y;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   436
    sp^.isRotated:= sp^.w <> sprite.width;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   437
    sp^.atlas:= @info.TextureInfo;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   438
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   439
    if SDL_MustLock(surf) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   440
        SDLTry(SDL_LockSurface(surf) >= 0, true);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   441
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   442
    //if GrayScale then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   443
    //    Surface2GrayScale(surf);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   444
    //DebugColorize(surf);
7292
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
    glBindTexture(GL_TEXTURE_2D, info.TextureInfo.id);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   447
    if (sp^.isRotated) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   448
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   449
        scanline:= surf^.pixels;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   450
        for i:= 0 to pred(sprite.width) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   451
        begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   452
            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
   453
            inc(scanline, sprite.height * 4);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   454
        end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   455
    end
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   456
    else
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   457
        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
   458
    glBindTexture(GL_TEXTURE_2D, 0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   459
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   460
    if SDL_MustLock(surf) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   461
        SDL_UnlockSurface(surf);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   462
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   463
    r.x:= 0;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   464
    r.y:= 0;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   465
    r.w:= sp^.w;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   466
    r.h:= sp^.h;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   467
    ComputeTexcoords(sp, @r, @sp^.tb);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   468
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   469
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   470
procedure Repack(var info: AtlasInfo; newAtlas: Atlas);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   471
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   472
    base: PByte;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   473
    oldSize: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   474
    oldWidth: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   475
    offset: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   476
    i,j : Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   477
    r: Rectangle;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   478
    sp: PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   479
    newIsRotated: boolean;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   480
    newSpriteRect: Rectangle;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   481
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   482
    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
   483
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   484
    // delete the old atlas
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   485
    glDeleteTextures(1, @info.TextureInfo.id);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   486
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   487
    // create a new atlas with different size
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   488
    info.TextureInfo:= createTexture(newAtlas.width, newAtlas.height);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   489
    glBindTexture(GL_TEXTURE_2D, info.TextureInfo.id);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   490
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   491
    atlasDelete(info.PackerInfo);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   492
    info.PackerInfo:= newAtlas;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   493
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   494
    // and process all sprites of the new atlas
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   495
    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
   496
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   497
        r:= newAtlas.usedRectangles.data[i];
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   498
        sp:= PTexture(r.UserData);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   499
        Upload(info, r, sp^.surface);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   500
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   501
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   502
    glBindTexture(GL_TEXTURE_2D, 0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   503
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   504
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   505
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   506
////////////////////////////////////////////////////////////////////////////////
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   507
// Utility functions
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   508
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   509
function SizeForSprite(sprite: PTexture): Size;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   510
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   511
    SizeForSprite.width:= sprite^.w;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   512
    SizeForSprite.height:= sprite^.h;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   513
    SizeForSprite.UserData:= sprite;
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
procedure EnlargeSize(var x: Integer; var y: Integer);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   517
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   518
    if (y < x) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   519
        y:= y + y
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   520
    else
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   521
        x:= x + x;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   522
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   523
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   524
procedure CompactSize(var x: Integer; var y: Integer);
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
    if (x > y) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   527
        x:= x div 2
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   528
    else
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   529
        y:= y div 2;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   530
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   531
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   532
////////////////////////////////////////////////////////////////////////////////
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   533
// Sprite allocation logic
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   534
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   535
function TryRepack(var info: AtlasInfo; w, h: Integer; hasNewSprite: boolean; newSprite: Size): boolean;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   536
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   537
    sizes: SizeList;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   538
    repackedAtlas: Atlas;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   539
    sprite: PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   540
    i: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   541
    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
   542
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   543
    TryRepack:= false;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   544
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   545
    // STEP 1: collect sizes of all existing sprites
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   546
    sizeListInit(sizes);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   547
    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
   548
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   549
        sprite:= PTexture(info.PackerInfo.usedRectangles.data[i].UserData);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   550
        sizeListAdd(sizes, SizeForSprite(sprite));
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   551
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   552
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   553
    // 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
   554
    if hasNewSprite then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   555
        sizeListAdd(sizes, newSprite);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   556
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   557
    // 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
   558
    repackedAtlas:= atlasNew(w, h);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   559
    rectangleListInit(rects);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   560
    if atlasInsertSet(repackedAtlas, sizes, rects) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   561
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   562
        TryRepack:= true;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   563
        Repack(info, repackedAtlas);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   564
        // 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
   565
        // thus we wont do atlasDelete(repackedAtlas); here 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   566
        rectangleListClear(rects);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   567
        sizeListClear(sizes);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   568
        //DumpAtlas(info);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   569
        exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   570
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   571
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   572
    rectangleListClear(rects);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   573
    sizeListClear(sizes);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   574
    atlasDelete(repackedAtlas);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   575
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   576
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   577
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
   578
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   579
    rect: Rectangle;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   580
    sprite: PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   581
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   582
    TryInsert:= false;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   583
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   584
    if atlasInsertAdaptive(info.PackerInfo, newSprite, rect) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   585
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   586
        // 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
   587
        Upload(info, rect, surf);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   588
        //DumpAtlas(info);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   589
        TryInsert:= true;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   590
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   591
end;
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
function Surface2Tex_(surf: PSDL_Surface; enableClamp: boolean): PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   594
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   595
    sz: Size;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   596
    sprite: PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   597
    currentWidth, currentHeight: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   598
    i: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   599
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   600
    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
   601
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   602
        // 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
   603
        writeln('Sprite size larger than maximum texture size');
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   604
        halt(-1);        
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   605
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   606
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   607
    // allocate the sprite
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   608
    new(sprite);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   609
    Surface2Tex_:= sprite;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   610
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   611
    sprite^.w:= surf^.w;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   612
    sprite^.h:= surf^.h;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   613
    sprite^.x:= 0;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   614
    sprite^.y:= 0;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   615
    sprite^.isRotated:= false;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   616
    sprite^.surface:= surf;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   617
    sprite^.shared:= true;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   618
    sprite^.nextFrame:= nil;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   619
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   620
    sz:= SizeForSprite(sprite);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   621
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   622
    // STEP 1
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   623
    // 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
   624
    for i:= 0 to pred(MaxAtlases) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   625
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   626
        if not Info[i].Allocated then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   627
            continue;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   628
        if TryInsert(Info[i], sz, surf) then
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   629
            exit;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   630
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   631
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   632
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   633
    // STEP 2
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   634
    // 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
   635
    for i:= 0 to pred(MaxAtlases) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   636
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   637
        if not Info[i].Allocated then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   638
            continue;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   639
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   640
        if TryRepack(Info[i], Info[i].PackerInfo.width, Info[i].PackerInfo.height, true, sz) then
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   641
            exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   642
    end;
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
    // STEP 3
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   645
    // 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
   646
    for i:= 0 to pred(MaxAtlases) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   647
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   648
        if not Info[i].Allocated then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   649
            continue;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   650
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   651
        currentWidth:= Info[i].PackerInfo.width;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   652
        currentHeight:= Info[i].PackerInfo.height;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   653
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   654
        EnlargeSize(currentWidth, currentHeight);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   655
        while (currentWidth <= MaxTexSize) and (currentHeight <= MaxTexSize) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   656
        begin
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   657
            if TryRepack(Info[i], currentWidth, currentHeight, true, sz) then
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   658
                exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   659
            EnlargeSize(currentWidth, currentHeight);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   660
        end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   661
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   662
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   663
    // STEP 4
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   664
    // 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
   665
    for i:= 0 to pred(MaxAtlases) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   666
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   667
        if Info[i].Allocated then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   668
            continue;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   669
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   670
        currentWidth:= MinTexSize;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   671
        currentHeight:= MinTexSize;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   672
        while (sz.width > currentWidth) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   673
            currentWidth:= currentWidth + currentWidth;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   674
        while (sz.height > currentHeight) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   675
            currentHeight:= currentHeight + currentHeight;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   676
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   677
        with Info[i] do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   678
        begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   679
            PackerInfo:= atlasNew(currentWidth, currentHeight);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   680
            TextureInfo:= createTexture(currentWidth, currentHeight);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   681
            Allocated:= true;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   682
        end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   683
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   684
        if TryInsert(Info[i], sz, surf) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   685
            exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   686
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   687
        // 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
   688
        // 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
   689
        writeln('Internal error: atlas allocation failed');
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   690
        halt(-1);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   691
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   692
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   693
    // 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
   694
    writeln('Exhausted maximum sprite allocation size');
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   695
    halt(-1);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   696
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   697
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   698
////////////////////////////////////////////////////////////////////////////////
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   699
// Sprite deallocation logic
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
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   702
procedure FreeTexture_(sprite: PTexture);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   703
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   704
    i, j, deleteAt: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   705
    usedArea: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   706
    totalArea: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   707
    r: Rectangle;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   708
    atlasW, atlasH: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   709
    unused: Size;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   710
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   711
    if sprite = nil then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   712
        exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   713
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   714
    deleteAt:= -1;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   715
    for i:= 0 to pred(MaxAtlases) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   716
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   717
        if sprite^.atlas <> @Info[i].TextureInfo then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   718
            continue;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   719
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   720
        usedArea:= 0;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   721
        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
   722
        begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   723
            r:= Info[i].PackerInfo.usedRectangles.data[j];
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   724
            if r.UserData = sprite then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   725
                deleteAt:= j
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   726
            else
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   727
                inc(usedArea, r.width * r.height);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   728
        end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   729
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   730
        rectangleListRemoveAt(Info[i].PackerInfo.usedRectangles, deleteAt);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   731
        dispose(sprite);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   732
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   733
        while true do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   734
        begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   735
            atlasW:= Info[i].PackerInfo.width;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   736
            atlasH:= Info[i].PackerInfo.height;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   737
            totalArea:=  atlasW * atlasH;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   738
            if usedArea >= totalArea * CompressionThreshold then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   739
                exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   740
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   741
            if (atlasW = MinTexSize) and (atlasH = MinTexSize) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   742
                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
   743
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   744
            CompactSize(atlasW, atlasH);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   745
            unused:= unused;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   746
            TryRepack(Info[i], atlasW, atlasH, false, unused);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   747
        end;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   748
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   749
        exit;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   750
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   751
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   752
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   753
procedure initModule;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   754
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   755
    i: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   756
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   757
    for i:= 0 to pred(MaxAtlases) do
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   758
    begin
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   759
        Info[i].Allocated:= false;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   760
        Info[i].DumpID:=0;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   761
    end;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   762
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   763
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   764
end.