gpuray_glsl
diff src/texture.h @ 0:f234630e38ff
initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 09 Nov 2014 13:03:36 +0200 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/texture.h Sun Nov 09 13:03:36 2014 +0200 1.3 @@ -0,0 +1,76 @@ 1.4 +#ifndef TEXTURE_H_ 1.5 +#define TEXTURE_H_ 1.6 + 1.7 +#include <string> 1.8 +#include "image.h" 1.9 + 1.10 +struct HitPoint; 1.11 + 1.12 +class Texture { 1.13 +public: 1.14 + enum class SampleMode { nearest, linear }; 1.15 + enum class WrapMode { clamp, repeat }; 1.16 + 1.17 +protected: 1.18 + std::string name; 1.19 + 1.20 + SampleMode sampling; 1.21 + WrapMode wrapping; 1.22 + 1.23 +public: 1.24 + Texture(); 1.25 + virtual ~Texture(); 1.26 + 1.27 + virtual void set_name(const char *name); 1.28 + virtual const char *get_name() const; 1.29 + 1.30 + virtual Image *get_image(int idx = 0) = 0; 1.31 + virtual const Image *get_image(int idx = 0) const = 0; 1.32 + 1.33 + virtual void set_sampling_mode(SampleMode mode); 1.34 + virtual SampleMode get_sampling_mode() const; 1.35 + virtual void set_wrapping_mode(WrapMode mode); 1.36 + virtual WrapMode get_wrapping_mode() const; 1.37 + 1.38 + virtual bool load(const char *fname) = 0; 1.39 + 1.40 + virtual Color sample(float u, float v, float w) const = 0; 1.41 + virtual Color sample(const HitPoint &hit) const; 1.42 +}; 1.43 + 1.44 +class Texture2D : public Texture { 1.45 +private: 1.46 + Image img; 1.47 + 1.48 +public: 1.49 + virtual Image *get_image(int idx = 0); 1.50 + virtual const Image *get_image(int idx = 0) const; 1.51 + 1.52 + virtual bool load(const char *fname); 1.53 + 1.54 + virtual Color sample(float u, float v, float w) const; 1.55 + 1.56 + friend Texture *load_texture(const char *fname); 1.57 +}; 1.58 + 1.59 +class TextureCube : public Texture { 1.60 +private: 1.61 + Image img[6]; 1.62 + 1.63 +public: 1.64 + TextureCube(); 1.65 + 1.66 + virtual Image *get_image(int idx = 0); 1.67 + virtual const Image *get_image(int idx = 0) const; 1.68 + 1.69 + virtual bool load(const char *fname); 1.70 + 1.71 + virtual Color sample(float u, float v, float w) const; 1.72 + virtual Color sample(const HitPoint &hit) const; 1.73 + 1.74 + friend Texture *load_texture(const char *fname); 1.75 +}; 1.76 + 1.77 +Texture *load_texture(const char *fname); 1.78 + 1.79 +#endif // TEXTURE_H_