Glide Plugin GLES2 port from mupen64plus-ae, but with special FrameSkip code
[mupen64plus-pandora.git] / source / gles2glide64 / src / GlideHQ / TxImage.h
CommitLineData
98e75f2d 1/*
2 * Texture Filtering
3 * Version: 1.0
4 *
5 * Copyright (C) 2007 Hiroshi Morii All Rights Reserved.
6 * Email koolsmoky(at)users.sourceforge.net
7 * Web http://www.3dfxzone.it/koolsmoky
8 *
9 * this is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2, or (at your option)
12 * any later version.
13 *
14 * this is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with GNU Make; see the file COPYING. If not, write to
21 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24#ifndef __TXIMAGE_H__
25#define __TXIMAGE_H__
26
27#include <stdio.h>
28#include <png.h>
29#include "TxInternal.h"
30
31#ifndef WIN32
32typedef struct tagBITMAPFILEHEADER {
33 uint16_t bfType;
34 uint32_t bfSize;
35 uint16_t bfReserved1;
36 uint16_t bfReserved2;
37 uint32_t bfOffBits;
38} BITMAPFILEHEADER;
39
40typedef struct tagBITMAPINFOHEADER {
41 uint32_t biSize;
42 int32_t biWidth;
43 int32_t biHeight;
44 uint16_t biPlanes;
45 uint16_t biBitCount;
46 uint32_t biCompression;
47 uint32_t biSizeImage;
48 uint32_t biXPelsPerMeter;
49 uint32_t biYPelsPerMeter;
50 uint32_t biClrUsed;
51 uint32_t biClrImportant;
52} BITMAPINFOHEADER;
53#else
54typedef struct tagBITMAPFILEHEADER BITMAPFILEHEADER;
55typedef struct tagBITMAPINFOHEADER BITMAPINFOHEADER;
56#endif
57
58#define DDSD_CAPS 0x00000001
59#define DDSD_HEIGHT 0x00000002
60#define DDSD_WIDTH 0x00000004
61#define DDSD_PITCH 0x00000008
62#define DDSD_PIXELFORMAT 0x00001000
63#define DDSD_MIPMAPCOUNT 0x00020000
64#define DDSD_LINEARSIZE 0x00080000
65#define DDSD_DEPTH 0x00800000
66
67#define DDPF_ALPHAPIXELS 0x00000001
68#define DDPF_FOURCC 0x00000004
69#define DDPF_RGB 0x00000040
70
71#define DDSCAPS_COMPLEX 0x00000008
72#define DDSCAPS_TEXTURE 0x00001000
73#define DDSCAPS_MIPMAP 0x00400000
74
75typedef struct tagDDSPIXELFORMAT {
76 uint32_t dwSize;
77 uint32_t dwFlags;
78 uint32_t dwFourCC;
79 uint32_t dwRGBBitCount;
80 uint32_t dwRBitMask;
81 uint32_t dwGBitMask;
82 uint32_t dwBBitMask;
83 uint32_t dwRGBAlphaBitMask;
84} DDSPIXELFORMAT;
85
86typedef struct tagDDSFILEHEADER {
87 uint32_t dwMagic;
88 uint32_t dwSize;
89 uint32_t dwFlags;
90 uint32_t dwHeight;
91 uint32_t dwWidth;
92 uint32_t dwLinearSize;
93 uint32_t dwDepth;
94 uint32_t dwMipMapCount;
95 uint32_t dwReserved1[11];
96 DDSPIXELFORMAT ddpf;
97 uint32_t dwCaps1;
98 uint32_t dwCaps2;
99} DDSFILEHEADER;
100
101class TxImage
102{
103private:
104 boolean getPNGInfo(FILE *fp, png_structp *png_ptr, png_infop *info_ptr);
105 boolean getBMPInfo(FILE *fp, BITMAPFILEHEADER *bmp_fhdr, BITMAPINFOHEADER *bmp_ihdr);
106 boolean getDDSInfo(FILE *fp, DDSFILEHEADER *dds_fhdr);
107public:
108 TxImage() {}
109 ~TxImage() {}
110 uint8* readPNG(FILE* fp, int* width, int* height, uint16* format);
111 boolean writePNG(uint8* src, FILE* fp, int width, int height, int rowStride, uint16 format, uint8 *palette);
112 uint8* readBMP(FILE* fp, int* width, int* height, uint16* format);
113 uint8* readDDS(FILE* fp, int* width, int* height, uint16* format);
114};
115
116#endif /* __TXIMAGE_H__ */