>>The downside is that I think it would require adding  
>> an  if()
>> test to the vertex shader, something I've been avoiding due to
>> (unfounded?)
>> concerns about performance.

> General advice that I can find is that GLSL is designed as a linear  
> program:
> conditionals and loops are best avoided:

>From my own experience:

* conditionals on flags (say uniform int) are in general unproblematic and work 
as intended

* conditionals on a varying are dangerous and only worth trying if you have an 
expensive operation which you can avoid - but then they help.

Say, replacing

expensive = some_expensive_operation();
mix(cheap, expensive, x) ;

by

if (x>0.0) 
  {
  expensive = some_expensive_operation();
  mix(cheap, expensive, x) ;
  }

usually does help if x is zero for enough pixels/vertices. The exception to 
this are texture lookups which are expensive, but must be evaluated outside of 
a branch if the condition involves a varying

* nested conditionals might work for performance gain up to a depth of 2, never 
any deeper - then you end up evaluating every branch

* conditionals of the form

if (x>0) {do stuff();}

(...)

if (x>0) {do_other_stuff();}

don't seem to be recognized as referring to the same condition - they need to 
be merged into a single block to be effective for performance.

In general, I think one should stay clear of conditionals, but they have their 
use for optimization as well.

* Thorsten
------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel

Reply via email to