1 //
2 //  Copyright (C) 2009-2011  Nick Gasson
3 //
4 //  This program is free software: you can redistribute it and/or modify
5 //  it under the terms of the GNU General Public License as published by
6 //  the Free Software Foundation, either version 3 of the License, or
7 //  (at your option) any later version.
8 //
9 //  This program is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 //  GNU General Public License for more details.
13 //
14 //  You should have received a copy of the GNU General Public License
15 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 //
17 
18 #ifndef INC_ITEXTURE_HPP
19 #define INC_ITEXTURE_HPP
20 
21 #include "Platform.hpp"
22 #include "IResource.hpp"
23 
24 #include <string>
25 
26 // Abstract interface to textures
27 struct ITexture {
~ITextureITexture28    virtual ~ITexture() {}
29 
30    // Bind this texture to the current OpenGL texture
31    virtual void bind() = 0;
32 
33    virtual int width() const = 0;
34    virtual int height() const = 0;
35 };
36 
37 typedef shared_ptr<ITexture> ITexturePtr;
38 
39 // Load a texture and return a pointer to
40 // A texture will only be loaded at most once no matter how many
41 // times this is called
42 ITexturePtr load_texture(const string& a_file_name);
43 
44 // Load a texture from a resource
45 ITexturePtr load_texture(IResourcePtr a_res, const string& a_file_name);
46 
47 // Generate Perlin noise
48 ITexturePtr make_noise_texture(int size, int resolution, int base, int range);
49 
50 #endif
51