]> git.cworth.org Git - vogl/blob - src/voglcore/vogl_texture_file_types.cpp
Initial vogl checkin
[vogl] / src / voglcore / vogl_texture_file_types.cpp
1 /**************************************************************************
2  *
3  * Copyright 2013-2014 RAD Game Tools and Valve Software
4  * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC
5  * All Rights Reserved.
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a copy
8  * of this software and associated documentation files (the "Software"), to deal
9  * in the Software without restriction, including without limitation the rights
10  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11  * copies of the Software, and to permit persons to whom the Software is
12  * furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included in
15  * all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23  * THE SOFTWARE.
24  *
25  **************************************************************************/
26
27 // File: vogl_texture_file_types.cpp
28 #include "vogl_core.h"
29 #include "vogl_texture_file_types.h"
30 #include "vogl_file_utils.h"
31
32 namespace vogl
33 {
34     const char *texture_file_types::get_extension(format fmt)
35     {
36         VOGL_ASSERT(fmt < cNumFileFormats);
37         if (fmt >= cNumFileFormats)
38             return NULL;
39
40         static const char *extensions[cNumFileFormats] =
41             {
42                 "dds",
43                 "crn",
44                 "ktx",
45                 "tga",
46                 "png",
47                 "jpg",
48                 "jpeg",
49                 "bmp",
50                 "gif",
51                 "tif",
52                 "tiff",
53                 "ppm",
54                 "pgm",
55                 "psd",
56                 "jp2",
57                 "<clipboard>",
58                 "<dragdrop>"
59             };
60         return extensions[fmt];
61     }
62
63     texture_file_types::format texture_file_types::determine_file_format(const char *pFilename)
64     {
65         dynamic_string ext;
66         if (!file_utils::split_path(pFilename, NULL, NULL, NULL, &ext))
67             return cFormatInvalid;
68
69         if (ext.is_empty())
70             return cFormatInvalid;
71
72         if (ext[0] == '.')
73             ext.right(1);
74
75         for (uint i = 0; i < cNumFileFormats; i++)
76             if (ext == get_extension(static_cast<format>(i)))
77                 return static_cast<format>(i);
78
79         return cFormatInvalid;
80     }
81
82     bool texture_file_types::supports_mipmaps(format fmt)
83     {
84         switch (fmt)
85         {
86             case cFormatCRN:
87             case cFormatDDS:
88             case cFormatKTX:
89                 return true;
90             default:
91                 break;
92         }
93
94         return false;
95     }
96
97     bool texture_file_types::supports_alpha(format fmt)
98     {
99         switch (fmt)
100         {
101             case cFormatJPG:
102             case cFormatJPEG:
103             case cFormatGIF:
104             case cFormatJP2:
105                 return false;
106             default:
107                 break;
108         }
109
110         return true;
111     }
112
113     const char *get_texture_type_desc(texture_type t)
114     {
115         switch (t)
116         {
117             case cTextureTypeUnknown:
118                 return "Unknown";
119             case cTextureTypeRegularMap:
120                 return "2D map";
121             case cTextureTypeNormalMap:
122                 return "Normal map";
123             case cTextureTypeVerticalCrossCubemap:
124                 return "Vertical Cross Cubemap";
125             case cTextureTypeCubemap:
126                 return "Cubemap";
127             default:
128                 break;
129         }
130
131         VOGL_ASSERT(false);
132
133         return "?";
134     }
135
136 } // namespace vogl