X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Ftexturing.h;fp=source%2Frender%2Ftexturing.h;h=0da3eae41794d167d5ee9421943cdac29c9cc74f;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hp=0000000000000000000000000000000000000000;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;p=libs%2Fgl.git diff --git a/source/render/texturing.h b/source/render/texturing.h new file mode 100644 index 00000000..0da3eae4 --- /dev/null +++ b/source/render/texturing.h @@ -0,0 +1,51 @@ +#ifndef MSP_GL_TEXTURING_H_ +#define MSP_GL_TEXTURING_H_ + +#include +#include "bindable.h" + +namespace Msp { +namespace GL { + +class Texture; + +class Texturing: public Bindable +{ +private: + struct Attachment + { + unsigned unit; + const Texture *texture; + const Sampler *sampler; + + Attachment(unsigned, const Texture *, const Sampler *); + }; + + std::vector attachments; + +public: + ~Texturing(); + + int find_free_unit(const std::string & = std::string()) const; + void attach(unsigned, const Texture &, const Sampler * = 0); + void attach(unsigned, const Sampler &); + void detach(unsigned); +private: + void set_attachment(unsigned, const Texture *, const Sampler *); +public: + const Texture *get_attached_texture(unsigned) const; + const Sampler *get_attached_sampler(unsigned) const; + + void bind() const; + + static void unbind(); + +private: + void bind_attachment(const Attachment &) const; + static void unbind_attachment(unsigned); +}; + +} // namespace GL +} // namespace Msp; + +#endif