Codechange: Use cached town, station, industry names for list window sorting
[openttd-github.git] / src / viewport_sprite_sorter.h
blobd9948b7c22a2cb4a74297a5ea88ae379e8d7c140
1 /*
2 * This file is part of OpenTTD.
3 * 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.
4 * 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.
5 * 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/>.
6 */
8 /** @file viewport_sprite_sorter.h Types related to sprite sorting. */
10 #include "stdafx.h"
11 #include "core/smallvec_type.hpp"
12 #include "gfx_type.h"
14 #ifndef VIEWPORT_SPRITE_SORTER_H
15 #define VIEWPORT_SPRITE_SORTER_H
17 /** Parent sprite that should be drawn */
18 struct ParentSpriteToDraw {
19 /* Block of 16B loadable in xmm register */
20 int32 xmin; ///< minimal world X coordinate of bounding box
21 int32 ymin; ///< minimal world Y coordinate of bounding box
22 int32 zmin; ///< minimal world Z coordinate of bounding box
23 int32 x; ///< screen X coordinate of sprite
25 /* Second block of 16B loadable in xmm register */
26 int32 xmax; ///< maximal world X coordinate of bounding box
27 int32 ymax; ///< maximal world Y coordinate of bounding box
28 int32 zmax; ///< maximal world Z coordinate of bounding box
29 int32 y; ///< screen Y coordinate of sprite
31 SpriteID image; ///< sprite to draw
32 PaletteID pal; ///< palette to use
33 const SubSprite *sub; ///< only draw a rectangular part of the sprite
35 int32 left; ///< minimal screen X coordinate of sprite (= x + sprite->x_offs), reference point for child sprites
36 int32 top; ///< minimal screen Y coordinate of sprite (= y + sprite->y_offs), reference point for child sprites
38 int32 first_child; ///< the first child to draw.
39 bool comparison_done; ///< Used during sprite sorting: true if sprite has been compared with all other sprites
42 typedef std::vector<ParentSpriteToDraw*> ParentSpriteToSortVector;
44 /** Type for method for checking whether a viewport sprite sorter exists. */
45 typedef bool (*VpSorterChecker)();
46 /** Type for the actual viewport sprite sorter. */
47 typedef void (*VpSpriteSorter)(ParentSpriteToSortVector *psd);
49 #ifdef WITH_SSE
50 bool ViewportSortParentSpritesSSE41Checker();
51 void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv);
52 #endif
54 void InitializeSpriteSorter();
56 #endif /* VIEWPORT_SPRITE_SORTER_H */