4 * This file is part of OpenTTD.
5 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
6 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
10 /** @file viewport_sprite_sorter.h Types related to sprite sorting. */
13 #include "core/smallvec_type.hpp"
16 #ifndef VIEWPORT_SPRITE_SORTER_H
17 #define VIEWPORT_SPRITE_SORTER_H
19 /** Parent sprite that should be drawn */
20 struct ParentSpriteToDraw
{
21 /* Block of 16B loadable in xmm register */
22 int32 xmin
; ///< minimal world X coordinate of bounding box
23 int32 ymin
; ///< minimal world Y coordinate of bounding box
24 int32 zmin
; ///< minimal world Z coordinate of bounding box
25 int32 x
; ///< screen X coordinate of sprite
27 /* Second block of 16B loadable in xmm register */
28 int32 xmax
; ///< maximal world X coordinate of bounding box
29 int32 ymax
; ///< maximal world Y coordinate of bounding box
30 int32 zmax
; ///< maximal world Z coordinate of bounding box
31 int32 y
; ///< screen Y coordinate of sprite
33 SpriteID image
; ///< sprite to draw
34 PaletteID pal
; ///< palette to use
35 const SubSprite
*sub
; ///< only draw a rectangular part of the sprite
37 int32 left
; ///< minimal screen X coordinate of sprite (= x + sprite->x_offs), reference point for child sprites
38 int32 top
; ///< minimal screen Y coordinate of sprite (= y + sprite->y_offs), reference point for child sprites
40 int32 first_child
; ///< the first child to draw.
41 bool comparison_done
; ///< Used during sprite sorting: true if sprite has been compared with all other sprites
44 typedef SmallVector
<ParentSpriteToDraw
*, 64> ParentSpriteToSortVector
;
46 /** Type for method for checking whether a viewport sprite sorter exists. */
47 typedef bool (*VpSorterChecker
)();
48 /** Type for the actual viewport sprite sorter. */
49 typedef void (*VpSpriteSorter
)(ParentSpriteToSortVector
*psd
);
52 bool ViewportSortParentSpritesSSE41Checker();
53 void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector
*psdv
);
56 void InitializeSpriteSorter();
58 #endif /* VIEWPORT_SPRITE_SORTER_H */