Arachnoid GLESv1.1 plugin. Compile and run (a bit glitchy and no frameskip) on the...
[mupen64plus-pandora.git] / source / mupen64plus-video-arachnoid / src / texture / TextureLoader.h
CommitLineData
22726e4d 1/******************************************************************************
2 * Arachnoid Graphics Plugin for Mupen64Plus
3 * http://bitbucket.org/wahrhaft/mupen64plus-video-arachnoid/
4 *
5 * Copyright (C) 2007 Kristofer Karlsson, Rickard Niklasson
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 *****************************************************************************/
21
22#ifndef TEXTURE_LOADER_H_
23#define TEXTURE_LOADER_H_
24
25#include "GBIDefs.h"
26
27//Forward declarations
28class Memory;
29class RDP;
30
31//*****************************************************************************
32//* TextureImage
33//! Used to store information about texture image
34//*****************************************************************************
35struct TextureImage
36{
37 unsigned int format;
38 unsigned int size;
39 unsigned int width;
40 unsigned int bpl;
41 unsigned int address;
42
43 //! Constructor
44 TextureImage()
45 {
46 format = size = width = bpl = 0;
47 address = 0;
48 }
49};
50
51//*****************************************************************************
52//* RDP Tile
53//! Struct used to store information used then loading textures.
54//*****************************************************************************
55struct RDPTile
56{
57 unsigned int format, size, line, tmem, palette;
58
59 union
60 {
61 struct
62 {
63 unsigned int mirrort : 1;
64 unsigned int clampt : 1;
65 unsigned int pad0 : 30;
66 unsigned int mirrors : 1;
67 unsigned int clamps : 1;
68 unsigned int pad1 : 30;
69 };
70 struct
71 {
72 unsigned int cmt, cms;
73 };
74 };
75
76 //FrameBuffer *frameBuffer;
77 unsigned int maskt, masks;
78 unsigned int shiftt, shifts;
79 float fuls, fult, flrs, flrt;
80 unsigned int uls, ult, lrs, lrt;
81
82 unsigned int getWidth() { return lrs - uls + 1; }
83 unsigned int getHeight() { return lrt - ult + 1; }
84
85 //! Constructor
86 RDPTile()
87 {
88 format = size = line = tmem = palette = 0;
89 maskt = masks = 0;
90 shiftt = shifts = 0;
91 fuls = fult = flrs = flrt = 0;
92 uls = ult = lrs = lrt = 0;
93 }
94};
95
96//*****************************************************************************
97//* Texture Loader
98//! Class for loading texturs from RDRAM to Texture Memory
99//*****************************************************************************
100class TextureLoader
101{
102public:
103
104 //Constructor / Destructor
105 TextureLoader();
106 ~TextureLoader();
107
108 bool initialize(RDP* rdp, Memory* memory);
109
110 //Set Texture Image
111 void setTextureImage(unsigned int format, unsigned int size, unsigned int width, unsigned int segmentAddress);
112
113 //Set Tile
114 void setTile(int format, int size, int line, int tmem, int tile, int palette,
115 int clampS, int clampT, int mirrorS, int mirrorT, int maskS,
116 int maskT, int shiftS, int shiftT);
117
118 //Set Tile Size
119 void setTileSize(int tile, unsigned int s0, unsigned int t0, unsigned int s1, unsigned int t1);
120
121 //Load Tile
122 void loadTile(int tile, int s0, int t0, int s1, int t1);
123
124 //Load Block
125 void loadBlock(int tile, int s0, int t0, int s1, int t1);
126
127 //Load Texture Look up table
128 void loadTLUT(int tile, int s0, int t0, int s1, int t1);
129
130public:
131
132 //! Returns information about current texture image
133 TextureImage* getTextureImage() { return &m_textureImage; }
134
135 //! Returns previusly loaded tile
136 RDPTile* getCurrentTile() { return m_currentTile; }
137
138 //! Returns a tile
139 //! @param tile which of the eight tiles to return.
140 RDPTile* getTile(unsigned int tile) { return &m_tiles[tile]; }
141
142private:
143
144 Memory* m_memory; //!< Pointer to Memory Manager
145 RDP* m_rdp; //!< Pointer to Reality Signal Processor
146
147 //Tiles
148 RDPTile m_tiles[8]; //!< Eight tiles
149 RDPTile* m_currentTile; //!< Previusly loaded tile
150 TextureImage m_textureImage; //!< Texture Image
151
152};
153
154#endif