bloboland

annotate src/shaders.h @ 1:cfe68befb7cc

some progress
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 15 Dec 2012 23:43:03 +0200
parents
children
rev   line source
nuclear@1 1 #ifndef SDR_H_
nuclear@1 2 #define SDR_H_
nuclear@1 3
nuclear@1 4 #include <vector>
nuclear@1 5 #include "vmath/vmath.h"
nuclear@1 6
nuclear@1 7 class Shader {
nuclear@1 8 private:
nuclear@1 9 bool compiled;
nuclear@1 10
nuclear@1 11 public:
nuclear@1 12 unsigned int sdr;
nuclear@1 13
nuclear@1 14 Shader(unsigned int type);
nuclear@1 15 ~Shader();
nuclear@1 16
nuclear@1 17 void set_source(const char *src);
nuclear@1 18
nuclear@1 19 bool compile();
nuclear@1 20 bool is_compiled() const;
nuclear@1 21
nuclear@1 22 bool load(const char *fname);
nuclear@1 23 };
nuclear@1 24
nuclear@1 25
nuclear@1 26 // public shader manager interface
nuclear@1 27 Shader *get_shader(const char *fname, unsigned int type);
nuclear@1 28
nuclear@1 29
nuclear@1 30 class SdrProg {
nuclear@1 31 private:
nuclear@1 32 // SdrProg does not own the shader objects
nuclear@1 33 std::vector<Shader*> shaders;
nuclear@1 34 bool linked;
nuclear@1 35
nuclear@1 36 public:
nuclear@1 37 unsigned int prog;
nuclear@1 38
nuclear@1 39 SdrProg();
nuclear@1 40 ~SdrProg();
nuclear@1 41
nuclear@1 42 void add_shader(Shader *sdr);
nuclear@1 43 bool link();
nuclear@1 44
nuclear@1 45 bool load(const char *vsfname, const char *psfname);
nuclear@1 46
nuclear@1 47 int get_uniform_location(const char *name);
nuclear@1 48 int get_attribute_location(const char *name);
nuclear@1 49
nuclear@1 50 void set_uniform(const char *name, int val);
nuclear@1 51 void set_uniform(const char *name, float val);
nuclear@1 52 void set_uniform(const char *name, const Vector2 &v);
nuclear@1 53 void set_uniform(const char *name, const Vector3 &v);
nuclear@1 54 void set_uniform(const char *name, const Vector4 &v);
nuclear@1 55 void set_uniform(const char *name, const Matrix4x4 &mat);
nuclear@1 56
nuclear@1 57 void set_uniform(int loc, int val);
nuclear@1 58 void set_uniform(int loc, float val);
nuclear@1 59 void set_uniform(int loc, const Vector2 &v);
nuclear@1 60 void set_uniform(int loc, const Vector3 &v);
nuclear@1 61 void set_uniform(int loc, const Vector4 &v);
nuclear@1 62 void set_uniform(int loc, const Matrix4x4 &mat);
nuclear@1 63 };
nuclear@1 64
nuclear@1 65 bool bind_program(const SdrProg *prog);
nuclear@1 66
nuclear@1 67 #endif /* SDR_H_ */