nuclear@20: #ifndef SHADER_H_ nuclear@20: #define SHADER_H_ nuclear@20: nuclear@20: #include nuclear@20: nuclear@21: enum SdrDefaultAttrib { nuclear@21: SDR_ATTR_VERTEX, nuclear@21: SDR_ATTR_NORMAL, nuclear@21: SDR_ATTR_TEXCOORD, nuclear@21: SDR_ATTR_COLOR, nuclear@21: SDR_ATTR_TANGENT nuclear@21: }; nuclear@21: nuclear@21: nuclear@20: class SdrProg { nuclear@20: private: nuclear@20: std::vector priv_sdr; nuclear@20: unsigned int prog; nuclear@20: mutable bool valid; nuclear@20: nuclear@20: public: nuclear@21: static const SdrProg *active; nuclear@21: nuclear@20: SdrProg(); nuclear@20: ~SdrProg(); nuclear@20: nuclear@20: void create(); nuclear@20: void destroy(); nuclear@20: nuclear@20: bool attach_shader(unsigned int sdr); nuclear@20: nuclear@20: bool create(unsigned int vsdr, unsigned int psdr); nuclear@20: bool create(const char *vsrc, const char *psrc); nuclear@20: bool load(const char *vfname, const char *pfname); nuclear@20: nuclear@20: bool link() const; nuclear@20: nuclear@20: int get_uniform(const char *name) const; nuclear@20: int get_attrib(const char *name) const; nuclear@20: bool bind_attrib(const char *name, int loc) const; nuclear@21: void bind_default_attribs() const; nuclear@20: nuclear@20: bool bind() const; nuclear@21: nuclear@21: unsigned int get_globj() const { return prog; } nuclear@20: }; nuclear@20: nuclear@20: unsigned int get_shader(const char *name, unsigned int type); nuclear@20: nuclear@21: SdrProg *get_sdrprog(const char *vfile, const char *pfile); nuclear@21: nuclear@20: #endif /* SHADER_H_ */