83 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| #version 450
 | |
| 
 | |
| struct S {
 | |
|     int a;
 | |
| };
 | |
| 
 | |
| uniform ubuf {
 | |
|     S s;
 | |
| };
 | |
| 
 | |
| uniform sampler2D s2d;
 | |
| 
 | |
| layout(location = 0) in vec4 inv;
 | |
| layout(location = 0) out vec4 outv;
 | |
| 
 | |
| vec4 foo(S s)
 | |
| {
 | |
|     vec4 r = s.a * inv;
 | |
|     ++r;
 | |
|     if (r.x > 3.0)
 | |
|         --r;
 | |
|     else
 | |
|         r *= 2;
 | |
| 
 | |
|     return r;
 | |
| }
 | |
| 
 | |
| float testBranch(float x, float y)
 | |
| {
 | |
|     float result = 0;
 | |
|     bool b = x > 0;
 | |
| 
 | |
|     // branch with load
 | |
|     if (b) {
 | |
|         result += 1;
 | |
|     }
 | |
|     else {
 | |
|         result -= 1;
 | |
|     }
 | |
| 
 | |
|     // branch with expression
 | |
|     if (x > y) {
 | |
|         result += x - y;
 | |
|     }
 | |
| 
 | |
|     // selection with load
 | |
|     result += b ?
 | |
|         1 : -1;
 | |
| 
 | |
|     // selection with expression
 | |
|     result += x < y ? 
 | |
|         y : 
 | |
|         float(b);
 | |
| 
 | |
|     return result;
 | |
| }
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     outv = foo(s);
 | |
|     outv += testBranch(inv.x, inv.y);
 | |
|     outv += texture(s2d, vec2(0.5));
 | |
| 
 | |
|     switch (s.a) {
 | |
|     case 10:
 | |
|         ++outv;
 | |
|         break;
 | |
|     case 20:
 | |
|         outv = 2 * outv;
 | |
|         ++outv;
 | |
|         break;
 | |
|     default:
 | |
|         --outv;
 | |
|         break;
 | |
|     }
 | |
| 
 | |
|     for (int i = 0; i < 10; ++i)
 | |
|         outv *= 3.0;
 | |
| 
 | |
|     outv.x < 10.0 ?
 | |
|         outv = sin(outv) :
 | |
|         outv = cos(outv);
 | |
| } | 
