hedgewars/uAtlas.pas
author Wolfgang Steffens <WolfgangSteff@gmail.com>
Tue, 10 Jul 2012 16:38:50 +0200
changeset 7377 1aceade403ba
parent 7304 8b3575750cd2
permissions -rw-r--r--
Debug commit Added code to replace sprites with a checkerboard pattern in order to identify filtering issues. This version only renders DrawSprite()'s with the checkerboard pattern for debugging purposes cleaned up some unneeded stuff
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
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   132
    BlockWrite(DumpFile, buffer^, size);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   133
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   134
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   135
function IntToStrPad(i: Integer): string;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   136
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   137
  s: string;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   138
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   139
   s:= IntToStr(i);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   140
   if (i < 10) then s:='0' + s;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   141
   if (i < 100) then s:='0' + s;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   142
   if (i < 1000) then s:='0' + s;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   143
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   144
   IntToStrPad:=s;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   145
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   146
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   147
// GL1 ATLAS DEBUG ONLY CODE!
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   148
procedure DebugAtlas;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   149
{$IFDEF DEBUG_ATLAS}
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   150
var
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   151
    vp: array[0..3] of GLint;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   152
    prog: GLint;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   153
    i: Integer;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   154
    x, y: Integer;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   155
const
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   156
    SZ = 512;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   157
begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   158
    x:= 0;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   159
    y:= 0;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   160
    for i:= 0 to pred(MaxAtlases) do
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   161
    begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   162
        if not Info[i].allocated then
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   163
            continue;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   164
        glGetIntegerv(GL_VIEWPORT, @vp);
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   165
{$IFDEF GL2}
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   166
        glGetIntegerv(GL_CURRENT_PROGRAM, @prog);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   167
        glUseProgram(0);
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   168
{$ENDIF}
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   169
        glPushMatrix;
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   170
        glLoadIdentity;
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   171
        glMatrixMode(GL_PROJECTION);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   172
        glPushMatrix;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   173
        glLoadIdentity;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   174
        glOrtho(0, vp[2], vp[3], 0, -1, 1);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   175
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   176
        glDisable(GL_CULL_FACE);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   177
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   178
        glBindTexture(GL_TEXTURE_2D, Info[i].TextureInfo.id);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   179
        glBegin(GL_QUADS);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   180
        glTexCoord2f(0.0, 0.0);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   181
        glVertex2i(x * SZ, y * SZ);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   182
        glTexCoord2f(1.0, 0.0);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   183
        glVertex2i((x + 1) * SZ, y * SZ);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   184
        glTexCoord2f(1.0, 1.0);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   185
        glVertex2i((x + 1) * SZ, (y + 1) * SZ);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   186
        glTexCoord2f(0.0, 1.0);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   187
        glVertex2i(x * SZ, (y + 1) * SZ);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   188
        glEnd();
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   189
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   190
        glPopMatrix;
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   191
        glMatrixMode(GL_MODELVIEW);
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   192
        glPopMatrix;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   193
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   194
        inc(x);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   195
        if (x = 2) then
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   196
        begin
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   197
            x:=0;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   198
            inc(y);
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   199
        end;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   200
     
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   201
{$IFDEF GL2}
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   202
        glUseProgram(prog);
7301
bea42438a2ec GL1.x fixes
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7297
diff changeset
   203
{$ENDIF}
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   204
    end;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   205
end;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   206
{$ELSE}
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   207
begin;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   208
end;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   209
{$ENDIF}
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   210
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   211
procedure DumpAtlas(var dinfo: AtlasInfo);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   212
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   213
    png: png_structp;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   214
    png_info: png_infop;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   215
    w, h, sz: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   216
    filename: string;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   217
    rows: array of png_bytep;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   218
    size: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   219
    i, j: Integer;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   220
    idx: Integer;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   221
    mem, p, pp: PByte;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   222
begin
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   223
    idx:= -1;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   224
    for i:= 0 to Pred(MaxAtlases) do
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   225
        if @dinfo = @Info[i] then
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   226
            idx:=i;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   227
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   228
    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
   229
    Assign(DumpFile, filename);
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   230
    inc(dinfo.DumpID);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   231
    Rewrite(DumpFile);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   232
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   233
    w:= dinfo.TextureInfo.w;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   234
    h:= dinfo.TextureInfo.h;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   235
    size:= w * h * 4;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   236
    SetLength(rows, h);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   237
    GetMem(mem, size);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   238
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   239
    glBindTexture(GL_TEXTURE_2D, dinfo.TextureInfo.id);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   240
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   241
    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
   242
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   243
    p:= mem;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   244
    for i:= 0 to pred(h) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   245
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   246
        rows[i]:= p;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   247
        pp:= p;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   248
        inc(pp, 3);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   249
        {for j:= 0 to pred(w) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   250
        begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   251
            pp^:=255;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   252
            inc(pp, 4);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   253
        end;}
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   254
        inc(p, w * 4);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   255
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   256
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   257
    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
   258
    png_info := png_create_info_struct(png);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   259
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   260
    png_set_write_fn(png, nil, @writefunc, nil);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   261
    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
   262
    png_write_info(png, png_info);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   263
    png_write_image(png, @rows[0]);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   264
    png_write_end(png, png_info);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   265
    png_destroy_write_struct(@png, @png_info);
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
    FreeMem(mem);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   268
    
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   269
    SetLength(rows, 0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   270
    Close(DumpFile);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   271
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   272
    //if (DumpID >= 30) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   273
    //    halt(0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   274
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   275
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
// Upload routines
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
function createTexture(width, height: Integer): TAtlas;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   280
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   281
  nullTex: Pointer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   282
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   283
    createTexture.w:= width;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   284
    createTexture.h:= height;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   285
    createTexture.priority:= 0;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   286
    glGenTextures(1, @createTexture.id);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   287
    glBindTexture(GL_TEXTURE_2D, createTexture.id);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   288
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   289
    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
   290
    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
   291
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   292
    //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
   293
    
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   294
    GetMem(NullTex, width * height * 4);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   295
    FillChar(NullTex^, width * height * 4, 0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   296
    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
   297
    FreeMem(NullTex);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   298
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   299
    glBindTexture(GL_TEXTURE_2D, 0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   300
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   301
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   302
function Min(x, y: Single): Single;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   303
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   304
  if x < y then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   305
    Min:=x
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   306
  else Min:=y;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   307
end;
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
function Max(x, y: Single): Single;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   310
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   311
  if x > y then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   312
    Max:=x
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   313
  else Max:=y;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   314
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   315
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   316
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   317
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
   318
const 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   319
    SectionSize = 60/360; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   320
var 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   321
    Section: Single; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   322
    SectionIndex: Integer; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   323
    f: single; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   324
    p, q, t: Single; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   325
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   326
    if H < 0 then 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   327
    begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   328
        R:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   329
        G:= R; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   330
        B:= R; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   331
    end 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   332
    else 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   333
    begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   334
        Section:= H/SectionSize; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   335
        SectionIndex:= Trunc(Section); 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   336
        f:= Section - SectionIndex; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   337
        p:= V * ( 1 - S ); 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   338
        q:= V * ( 1 - S * f ); 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   339
        t:= V * ( 1 - S * ( 1 - f ) ); 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   340
        case SectionIndex of 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   341
            0: 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   342
            begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   343
                R:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   344
                G:= t; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   345
                B:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   346
            end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   347
            1: 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   348
            begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   349
                R:= q; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   350
                G:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   351
                B:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   352
            end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   353
            2: 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   354
            begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   355
                R:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   356
                G:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   357
                B:= t; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   358
            end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   359
            3: 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   360
            begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   361
                R:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   362
                G:= q; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   363
                B:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   364
            end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   365
            4: 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   366
            begin 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   367
                R:= t; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   368
                G:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   369
                B:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   370
            end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   371
            else 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   372
                R:= V; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   373
                G:= p; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   374
                B:= q; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   375
        end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   376
    end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   377
end; 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   378
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   379
procedure DebugColorize(surf: PSDL_Surface);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   380
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   381
    sz: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   382
    p: PByte;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   383
    i: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   384
    r, g, b, a, inva: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   385
    randr, randg, randb: Single;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   386
    randh: Single;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   387
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   388
    sz:= surf^.w * surf^.h;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   389
    p:= surf^.pixels;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   390
    randh:=Random;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   391
    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
   392
    for i:=0 to pred(sz) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   393
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   394
        a:= p[3];
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   395
        inva:= 255 - a;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   396
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   397
        r:=Trunc(inva*randr + p[0]*a/255);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   398
        g:=Trunc(inva*randg + p[1]*a/255);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   399
        b:=Trunc(inva*randb + p[2]*a/255);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   400
        if r > 255 then r:= 255;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   401
        if g > 255 then g:= 255;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   402
        if b > 255 then b:= 255;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   403
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   404
        p[0]:=r;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   405
        p[1]:=g;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   406
        p[2]:=b;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   407
        p[3]:=255;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   408
        inc(p, 4);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   409
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   410
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   411
7377
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   412
procedure DebugChecker(surf: PSDL_Surface);
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   413
var
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   414
    sz: Integer;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   415
    p, q: PByte;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   416
    randr, randg, randb: Single;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   417
    randrb, randgb, randbb: Byte;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   418
    randh: Single;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   419
    x, y: Integer;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   420
begin
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   421
    sz:= surf^.w * surf^.h;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   422
    p:= surf^.pixels;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   423
    randh:=Random;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   424
    HSVToRGB(randh, 1.0, 1.0, randr, randg, randb);
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   425
    randrb:= Trunc(255*randr);
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   426
    randgb:= Trunc(255*randg);
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   427
    randbb:= Trunc(255*randb);
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   428
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   429
    p:= surf^.pixels;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   430
    for y:=0 to Pred(surf^.h) do
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   431
    begin
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   432
        q:= p;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   433
        for x:=0 to Pred(surf^.w) do
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   434
        begin
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   435
            if ((x xor y) and 1) = 1 then
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   436
            begin
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   437
                q[0]:= randrb;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   438
                q[1]:= randgb;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   439
                q[2]:= randbb;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   440
                q[3]:= 255;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   441
            end else
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   442
            begin
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   443
                q[0]:= 0;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   444
                q[1]:= 0;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   445
                q[2]:= 0;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   446
                q[3]:= 255;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   447
            end;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   448
            inc(q, 4);
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   449
        end;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   450
        inc(p, surf^.pitch);
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   451
    end;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   452
    
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   453
end;
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   454
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   455
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   456
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
   457
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   458
    sp: PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   459
    i, j, stride: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   460
    scanline: PByte;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   461
    r: TSDL_Rect;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   462
begin
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   463
    //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
   464
    sp:= PTexture(sprite.UserData);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   465
    sp^.x:= sprite.x;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   466
    sp^.y:= sprite.y;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   467
    sp^.isRotated:= sp^.w <> sprite.width;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   468
    sp^.atlas:= @info.TextureInfo;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   469
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   470
    if SDL_MustLock(surf) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   471
        SDLTry(SDL_LockSurface(surf) >= 0, true);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   472
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   473
    //if GrayScale then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   474
    //    Surface2GrayScale(surf);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   475
    //DebugColorize(surf);
7377
1aceade403ba Debug commit
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7304
diff changeset
   476
    DebugChecker(surf);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   477
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   478
    glBindTexture(GL_TEXTURE_2D, info.TextureInfo.id);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   479
    if (sp^.isRotated) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   480
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   481
        scanline:= surf^.pixels;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   482
        for i:= 0 to pred(sprite.width) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   483
        begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   484
            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
   485
            inc(scanline, sprite.height * 4);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   486
        end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   487
    end
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   488
    else
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   489
        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
   490
    glBindTexture(GL_TEXTURE_2D, 0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   491
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   492
    if SDL_MustLock(surf) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   493
        SDL_UnlockSurface(surf);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   494
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   495
    r.x:= 0;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   496
    r.y:= 0;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   497
    r.w:= sp^.w;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   498
    r.h:= sp^.h;
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   499
    ComputeTexcoords(sp, @r, @sp^.tb);
7292
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
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   502
procedure Repack(var info: AtlasInfo; newAtlas: Atlas);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   503
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   504
    base: PByte;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   505
    oldSize: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   506
    oldWidth: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   507
    offset: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   508
    i,j : Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   509
    r: Rectangle;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   510
    sp: PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   511
    newIsRotated: boolean;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   512
    newSpriteRect: Rectangle;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   513
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   514
    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
   515
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   516
    // delete the old atlas
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   517
    glDeleteTextures(1, @info.TextureInfo.id);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   518
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   519
    // create a new atlas with different size
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   520
    info.TextureInfo:= createTexture(newAtlas.width, newAtlas.height);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   521
    glBindTexture(GL_TEXTURE_2D, info.TextureInfo.id);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   522
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   523
    atlasDelete(info.PackerInfo);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   524
    info.PackerInfo:= newAtlas;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   525
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   526
    // and process all sprites of the new atlas
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   527
    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
   528
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   529
        r:= newAtlas.usedRectangles.data[i];
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   530
        sp:= PTexture(r.UserData);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   531
        Upload(info, r, sp^.surface);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   532
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   533
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   534
    glBindTexture(GL_TEXTURE_2D, 0);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   535
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   536
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   537
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   538
////////////////////////////////////////////////////////////////////////////////
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   539
// Utility functions
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   540
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   541
function SizeForSprite(sprite: PTexture): Size;
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
    SizeForSprite.width:= sprite^.w;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   544
    SizeForSprite.height:= sprite^.h;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   545
    SizeForSprite.UserData:= sprite;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   546
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   547
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   548
procedure EnlargeSize(var x: Integer; var y: Integer);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   549
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   550
    if (y < x) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   551
        y:= y + y
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   552
    else
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   553
        x:= x + x;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   554
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   555
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   556
procedure CompactSize(var x: Integer; var y: Integer);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   557
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   558
    if (x > y) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   559
        x:= x div 2
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   560
    else
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   561
        y:= y div 2;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   562
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   563
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   564
////////////////////////////////////////////////////////////////////////////////
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   565
// Sprite allocation logic
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   566
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   567
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
   568
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   569
    sizes: SizeList;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   570
    repackedAtlas: Atlas;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   571
    sprite: PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   572
    i: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   573
    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
   574
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   575
    TryRepack:= false;
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
    // STEP 1: collect sizes of all existing sprites
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   578
    sizeListInit(sizes);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   579
    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
   580
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   581
        sprite:= PTexture(info.PackerInfo.usedRectangles.data[i].UserData);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   582
        sizeListAdd(sizes, SizeForSprite(sprite));
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   583
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   584
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   585
    // 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
   586
    if hasNewSprite then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   587
        sizeListAdd(sizes, newSprite);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   588
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   589
    // 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
   590
    repackedAtlas:= atlasNew(w, h);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   591
    rectangleListInit(rects);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   592
    if atlasInsertSet(repackedAtlas, sizes, rects) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   593
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   594
        TryRepack:= true;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   595
        Repack(info, repackedAtlas);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   596
        // 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
   597
        // thus we wont do atlasDelete(repackedAtlas); here 
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   598
        rectangleListClear(rects);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   599
        sizeListClear(sizes);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   600
        //DumpAtlas(info);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   601
        exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   602
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   603
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   604
    rectangleListClear(rects);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   605
    sizeListClear(sizes);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   606
    atlasDelete(repackedAtlas);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   607
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   608
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   609
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
   610
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   611
    rect: Rectangle;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   612
    sprite: PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   613
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   614
    TryInsert:= false;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   615
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   616
    if atlasInsertAdaptive(info.PackerInfo, newSprite, rect) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   617
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   618
        // 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
   619
        Upload(info, rect, surf);
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   620
        //DumpAtlas(info);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   621
        TryInsert:= true;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   622
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   623
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   624
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   625
function Surface2Tex_(surf: PSDL_Surface; enableClamp: boolean): PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   626
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   627
    sz: Size;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   628
    sprite: PTexture;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   629
    currentWidth, currentHeight: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   630
    i: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   631
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   632
    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
   633
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   634
        // 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
   635
        writeln('Sprite size larger than maximum texture size');
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   636
        halt(-1);        
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   637
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   638
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   639
    // allocate the sprite
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   640
    new(sprite);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   641
    Surface2Tex_:= sprite;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   642
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   643
    sprite^.w:= surf^.w;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   644
    sprite^.h:= surf^.h;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   645
    sprite^.x:= 0;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   646
    sprite^.y:= 0;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   647
    sprite^.isRotated:= false;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   648
    sprite^.surface:= surf;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   649
    sprite^.shared:= true;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   650
    sprite^.nextFrame:= nil;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   651
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   652
    sz:= SizeForSprite(sprite);
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
    // STEP 1
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   655
    // 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
   656
    for i:= 0 to pred(MaxAtlases) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   657
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   658
        if not Info[i].Allocated then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   659
            continue;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   660
        if TryInsert(Info[i], sz, surf) then
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   661
            exit;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   662
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   663
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   664
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   665
    // STEP 2
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   666
    // 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
   667
    for i:= 0 to pred(MaxAtlases) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   668
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   669
        if not Info[i].Allocated then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   670
            continue;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   671
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   672
        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
   673
            exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   674
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   675
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   676
    // STEP 3
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   677
    // 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
   678
    for i:= 0 to pred(MaxAtlases) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   679
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   680
        if not Info[i].Allocated then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   681
            continue;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   682
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   683
        currentWidth:= Info[i].PackerInfo.width;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   684
        currentHeight:= Info[i].PackerInfo.height;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   685
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   686
        EnlargeSize(currentWidth, currentHeight);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   687
        while (currentWidth <= MaxTexSize) and (currentHeight <= MaxTexSize) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   688
        begin
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   689
            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
   690
                exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   691
            EnlargeSize(currentWidth, currentHeight);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   692
        end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   693
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   694
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   695
    // STEP 4
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   696
    // 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
   697
    for i:= 0 to pred(MaxAtlases) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   698
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   699
        if Info[i].Allocated then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   700
            continue;
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
        currentWidth:= MinTexSize;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   703
        currentHeight:= MinTexSize;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   704
        while (sz.width > currentWidth) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   705
            currentWidth:= currentWidth + currentWidth;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   706
        while (sz.height > currentHeight) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   707
            currentHeight:= currentHeight + currentHeight;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   708
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   709
        with Info[i] do
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
            PackerInfo:= atlasNew(currentWidth, currentHeight);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   712
            TextureInfo:= createTexture(currentWidth, currentHeight);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   713
            Allocated:= true;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   714
        end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   715
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   716
        if TryInsert(Info[i], sz, surf) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   717
            exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   718
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   719
        // 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
   720
        // 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
   721
        writeln('Internal error: atlas allocation failed');
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   722
        halt(-1);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   723
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   724
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   725
    // 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
   726
    writeln('Exhausted maximum sprite allocation size');
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   727
    halt(-1);
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
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   730
////////////////////////////////////////////////////////////////////////////////
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   731
// Sprite deallocation logic
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
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   734
procedure FreeTexture_(sprite: PTexture);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   735
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   736
    i, j, deleteAt: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   737
    usedArea: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   738
    totalArea: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   739
    r: Rectangle;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   740
    atlasW, atlasH: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   741
    unused: Size;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   742
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   743
    if sprite = nil then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   744
        exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   745
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   746
    deleteAt:= -1;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   747
    for i:= 0 to pred(MaxAtlases) do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   748
    begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   749
        if sprite^.atlas <> @Info[i].TextureInfo then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   750
            continue;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   751
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   752
        usedArea:= 0;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   753
        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
   754
        begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   755
            r:= Info[i].PackerInfo.usedRectangles.data[j];
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   756
            if r.UserData = sprite then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   757
                deleteAt:= j
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   758
            else
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   759
                inc(usedArea, r.width * r.height);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   760
        end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   761
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   762
        rectangleListRemoveAt(Info[i].PackerInfo.usedRectangles, deleteAt);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   763
        dispose(sprite);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   764
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   765
        while true do
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   766
        begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   767
            atlasW:= Info[i].PackerInfo.width;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   768
            atlasH:= Info[i].PackerInfo.height;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   769
            totalArea:=  atlasW * atlasH;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   770
            if usedArea >= totalArea * CompressionThreshold then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   771
                exit;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   772
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   773
            if (atlasW = MinTexSize) and (atlasH = MinTexSize) then
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   774
                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
   775
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   776
            CompactSize(atlasW, atlasH);
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   777
            unused:= unused;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   778
            TryRepack(Info[i], atlasW, atlasH, false, unused);
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   779
        end;
7297
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   780
af64b509725c using atlas for rendering now
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7295
diff changeset
   781
        exit;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   782
    end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   783
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   784
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   785
procedure initModule;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   786
var
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   787
    i: Integer;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   788
begin
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   789
    for i:= 0 to pred(MaxAtlases) do
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   790
    begin
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   791
        Info[i].Allocated:= false;
7304
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   792
        Info[i].DumpID:=0;
8b3575750cd2 Added auto cropping to atlasing
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents: 7301
diff changeset
   793
    end;
7292
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   794
end;
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   795
18430abfbcd2 added missing uBinPacker.pas and uAtlas.pas
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
diff changeset
   796
end.