00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "pent_include.h"
00020 #include "Texture.h"
00021 #include "TextureBitmap.h"
00022 #include "TextureTarga.h"
00023 #include "TexturePNG.h"
00024
00025 #include <cstring>
00026
00027
00028
00029
00030 bool Texture::Clear()
00031 {
00032
00033 if (format != TEX_FMT_NATIVE)
00034 delete [] buffer;
00035 buffer = 0;
00036
00037 return true;
00038 }
00039
00040
00041
00042
00043 Texture::~Texture()
00044 {
00045 Clear();
00046 }
00047
00048
00049
00050
00051 #define TRY_TYPE(TextureType) \
00052 tex = new TextureType(); \
00053 \
00054 if (!tex->Read(ds)) { \
00055 delete tex; \
00056 tex = 0; \
00057 } \
00058 else { \
00059 \
00060 return tex; \
00061 }
00062
00063
00064
00065
00066
00067 Texture * Texture::Create(IDataSource *ds, const char *filename)
00068 {
00069 Texture *tex;
00070
00071 if (filename) {
00072
00073 if (std::strstr(filename, ".png")) {
00074 TRY_TYPE(TexturePNG);
00075 }
00076
00077 if (std::strstr(filename, ".bmp")) {
00078 TRY_TYPE(TextureBitmap);
00079 }
00080
00081 if (std::strstr(filename, ".tga")) {
00082 TRY_TYPE(TextureTarga);
00083 }
00084 }
00085
00086
00087 TRY_TYPE(TexturePNG);
00088 TRY_TYPE(TextureBitmap);
00089 TRY_TYPE(TextureTarga);
00090
00091
00092 return 0;
00093 }