ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/shader.h
(Generate patch)

Comparing libgender/shader.h (file contents):
Revision 1.17 by root, Fri Oct 29 15:58:50 2004 UTC vs.
Revision 1.18 by root, Fri Oct 29 17:21:54 2004 UTC

285 285
286 struct uniform_1f_i : uniform_f_i<1, str_float> { 286 struct uniform_1f_i : uniform_f_i<1, str_float> {
287 void set (GLfloat v) 287 void set (GLfloat v)
288 { 288 {
289 data[0] = v; 289 data[0] = v;
290
291 GLint loc = location ();
292 if (loc >= 0) // workaround for buggy drivers
290 glUniform1fvARB (location(), 1, data); 293 glUniform1fvARB (loc, 1, data);
291 } 294 }
292 }; 295 };
293 296
294 struct uniform_2f_i : uniform_f_i<2, str_vec2> { 297 struct uniform_2f_i : uniform_f_i<2, str_vec2> {
295 void set (GLfloat x, GLfloat y) 298 void set (GLfloat x, GLfloat y)
296 { 299 {
297 data[0] = x; 300 data[0] = x;
298 data[1] = y; 301 data[1] = y;
302
303 GLint loc = location ();
304 if (loc >= 0) // workaround for buggy drivers
299 glUniform2fvARB (location(), 2, data); 305 glUniform2fvARB (loc, 1, data);
300 } 306 }
301 307
302 void set (const vec2 &v) { set (v.x, v.y); } 308 void set (const vec2 &v) { set (v.x, v.y); }
303 }; 309 };
304 310
306 void set (GLfloat x, GLfloat y, GLfloat z) 312 void set (GLfloat x, GLfloat y, GLfloat z)
307 { 313 {
308 data[0] = x; 314 data[0] = x;
309 data[1] = y; 315 data[1] = y;
310 data[2] = z; 316 data[2] = z;
317
318 GLint loc = location ();
319 if (loc >= 0) // workaround for buggy drivers
311 glUniform3fvARB (location(), 3, data); 320 glUniform3fvARB (loc, 1, data);
312 } 321 }
313 322
314 void set (const vec3 &v) { set (v.x, v.y, v.z); } 323 void set (const vec3 &v) { set (v.x, v.y, v.z); }
315 }; 324 };
316 325
320 data[0] = x; 329 data[0] = x;
321 data[1] = y; 330 data[1] = y;
322 data[2] = z; 331 data[2] = z;
323 data[3] = w; 332 data[3] = w;
324 333
334 GLint loc = location ();
335 if (loc >= 0) // workaround for buggy drivers
325 glUniform4fvARB (location(), 4, data); 336 glUniform4fvARB (loc, 1, data);
326 } 337 }
327 338
328 void set (const vec4 &v) { set (v.x, v.y, v.z, v.w); } 339 void set (const vec4 &v) { set (v.x, v.y, v.z, v.w); }
329 }; 340 };
330 341
331 struct uniform_matrix_2f_i : uniform_f_i< 4, str_mat2> 342 struct uniform_matrix_2f_i : uniform_f_i< 4, str_mat2>
332 { 343 {
333 void set (const GLfloat d[4]) 344 void set (const GLfloat d[4])
334 { 345 {
335 memcpy (data, d, 4 * sizeof (GLfloat)); 346 memcpy (data, d, 4 * sizeof (GLfloat));
347
348 GLint loc = location ();
349 if (loc >= 0) // workaround for buggy drivers
336 glUniformMatrix2fvARB (location (), 4, 0, data); 350 glUniformMatrix2fvARB (loc, 1, 0, data);
337 } 351 }
338 }; 352 };
339 353
340 struct uniform_matrix_3f_i : uniform_f_i< 9, str_mat3> 354 struct uniform_matrix_3f_i : uniform_f_i< 9, str_mat3>
341 { 355 {
342 void set (const GLfloat d[9]) 356 void set (const GLfloat d[9])
343 { 357 {
344 memcpy (data, d, 9 * sizeof (GLfloat)); 358 memcpy (data, d, 9 * sizeof (GLfloat));
359
360 GLint loc = location ();
361 if (loc >= 0) // workaround for buggy drivers
345 glUniformMatrix3fvARB (location (), 9, 0, data); 362 glUniformMatrix3fvARB (loc, 1, 0, data);
346 } 363 }
347 }; 364 };
348 365
349 struct uniform_matrix_4f_i : uniform_f_i<16, str_mat4> 366 struct uniform_matrix_4f_i : uniform_f_i<16, str_mat4>
350 { 367 {
351 void set (const gl::matrix &m) 368 void set (const gl::matrix &m)
352 { 369 {
353 memcpy (data, m.data, 16 * sizeof (GLfloat)); 370 memcpy (data, m.data, 16 * sizeof (GLfloat));
371
372 GLint loc = location ();
373 if (loc >= 0) // workaround for buggy drivers
354 glUniformMatrix4fvARB (location (), 16, 0, data); 374 glUniformMatrix4fvARB (loc, 1, 0, data);
355 } 375 }
356 }; 376 };
357 377
358 template<class var_i> 378 template<class var_i>
359 struct var_ref : ref<var_i> 379 struct var_ref : ref<var_i>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines