… | |
… | |
149 | |
149 | |
150 | program_object_i::program_object_i () |
150 | program_object_i::program_object_i () |
151 | { |
151 | { |
152 | id = glCreateProgramObjectARB (); |
152 | id = glCreateProgramObjectARB (); |
153 | assert (id); |
153 | assert (id); |
154 | |
|
|
155 | glAttachObjectARB (id, vsh->id); |
|
|
156 | glAttachObjectARB (id, fsh->id); |
|
|
157 | } |
154 | } |
158 | |
155 | |
159 | program_object_i::~program_object_i () |
156 | program_object_i::~program_object_i () |
160 | { |
157 | { |
161 | glDeleteProgramsARB (1, &id); |
158 | glDeleteProgramsARB (1, &id); |
… | |
… | |
207 | if (i != progcache.end ()) |
204 | if (i != progcache.end ()) |
208 | return i->second; |
205 | return i->second; |
209 | |
206 | |
210 | program_object p; |
207 | program_object p; |
211 | |
208 | |
|
|
209 | if (vsh.size ()) |
|
|
210 | { |
|
|
211 | vertex_shader sh; |
|
|
212 | p->attach (sh); |
212 | p->vsh->compile (vsh); |
213 | sh->compile (vsh); |
|
|
214 | } |
|
|
215 | |
|
|
216 | if (fsh.size ()) |
|
|
217 | { |
|
|
218 | fragment_shader sh; |
|
|
219 | p->attach (sh); |
213 | p->fsh->compile (fsh); |
220 | sh->compile (fsh); |
|
|
221 | } |
|
|
222 | |
214 | p->link (); |
223 | p->link (); |
215 | |
224 | |
216 | progcache.insert (pair<string, program_object> (idx, p)); |
225 | progcache.insert (pair<string, program_object> (idx, p)); |
217 | |
226 | |
218 | return p; |
227 | return p; |