nuclear@1: #ifndef TEXTURE_H_ nuclear@1: #define TEXTURE_H_ nuclear@1: nuclear@1: class Texture { nuclear@1: protected: nuclear@1: unsigned int type; nuclear@1: unsigned int tex; nuclear@5: unsigned int intfmt; nuclear@1: nuclear@1: int size[3]; nuclear@1: nuclear@1: public: nuclear@1: Texture(); nuclear@1: virtual ~Texture(); nuclear@1: nuclear@5: virtual void set_pixel_format(unsigned int fmt); nuclear@5: nuclear@4: virtual void set_filtering(unsigned int min_filter, unsigned int mag_filter = 0); nuclear@4: virtual void set_wrapping(unsigned int wrap); nuclear@4: nuclear@1: virtual int get_size(int idx) const; nuclear@1: nuclear@3: virtual void update(float *data) = 0; nuclear@3: nuclear@1: friend void bind_texture(const Texture *tex, int texunit); nuclear@1: }; nuclear@1: nuclear@1: void bind_texture(const Texture *tex, int texunit = 0); nuclear@1: nuclear@4: class Texture1D : public Texture { nuclear@4: public: nuclear@4: Texture1D(); nuclear@4: nuclear@4: void create(int sz, float *data = 0); nuclear@4: nuclear@4: void update(float *data); nuclear@4: }; nuclear@4: nuclear@1: class Texture2D : public Texture { nuclear@1: public: nuclear@1: Texture2D(); nuclear@1: nuclear@1: void create(int xsz, int ysz, float *data = 0); nuclear@3: nuclear@3: void update(float *data); nuclear@1: }; nuclear@1: nuclear@1: class Texture3D : public Texture { nuclear@1: public: nuclear@1: Texture3D(); nuclear@1: nuclear@1: void create(int xsz, int ysz, int zsz, float *data = 0); nuclear@3: nuclear@3: void update(float *data); nuclear@1: }; nuclear@1: nuclear@1: #endif // TEXTURE_H_