… | |
… | |
191 | //TODO: clear samplers here |
191 | //TODO: clear samplers here |
192 | glUseProgramObjectARB (0); |
192 | glUseProgramObjectARB (0); |
193 | cur = 0; |
193 | cur = 0; |
194 | } |
194 | } |
195 | |
195 | |
|
|
196 | static map<string, program_object> progcache; |
|
|
197 | |
|
|
198 | program_object get_program (const string &vsh, const string &fsh) |
|
|
199 | { |
|
|
200 | string idx = vsh + "\0" + fsh; |
|
|
201 | |
|
|
202 | map<string, program_object>::iterator i = progcache.find (idx); |
|
|
203 | |
|
|
204 | if (i != progcache.end ()) |
|
|
205 | return i->second; |
|
|
206 | |
|
|
207 | program_object p; |
|
|
208 | |
|
|
209 | p->vsh->compile (vsh); |
|
|
210 | p->fsh->compile (fsh); |
|
|
211 | p->link (); |
|
|
212 | |
|
|
213 | progcache.insert (pair<string, program_object> (idx, p)); |
|
|
214 | |
|
|
215 | return p; |
|
|
216 | } |
|
|
217 | |
196 | const sl_expr< sl_string<60> > sl_convert< ::vec2 >::convert (const ::vec2 &v) |
218 | const sl_expr< sl_string<60> > sl_convert< ::vec2 >::convert (const ::vec2 &v) |
197 | { |
219 | { |
198 | sl_string<60> s; |
220 | sl_string<60> s; |
199 | sprintf (s.str, "vec2 (%g, %g)", v.x, v.y); |
221 | sprintf (s.str, "vec2 (%g, %g)", v.x, v.y); |
200 | return s; |
222 | return s; |