1#version 110 2 3int f(int a, int b, int c) 4{ 5 int a = b; // ERROR, redefinition 6 7 { 8 float a = float(a) + 1.0; // okay 9 } 10 11 return a; 12} 13 14int f(int a, int b, int c); // okay to redeclare 15 16bool b; 17float b(int a); // okay, b and b() are different 18 19float c(int a); 20bool c; // okay, and c() are different 21 22float f; // okay f and f() are different 23float tan; // okay, hides built-in function 24float sin(float x); // okay, can redefine built-in functions 25float cos(float x) // okay, can redefine built-in functions 26{ 27 return 1.0; 28} 29bool radians(bool x) // okay, can overload built-in functions 30{ 31 return true; 32} 33 34int gi = f(1,2,3); // ERROR, can't call user-defined function from global scope 35 36void main() 37{ 38 int g(); // okay 39 g(); 40 41 float sin; // okay 42 sin; 43 sin(0.7); // okay 44 f(1,2,3); 45 46 float f; 47 f = 3.0; 48 49 gl_Position = vec4(f); 50 51 for (int f = 0; f < 10; ++f) 52 ++f; 53 54 int x = 1; 55 { 56 float x = 2.0, /* 2nd x visible here */ y = x; // y is initialized to 2 57 int z = z; // ERROR: z not previously defined. 58 } 59 { 60 int x = x; // x is initialized to '1' 61 } 62 63 struct S 64 { 65 int x; 66 }; 67 { 68 S S = S(0); // 'S' is only visible as a struct and constructor 69 S.x; // 'S' is now visible as a variable 70 } 71 72 int degrees; 73 degrees(3.2); 74 75 { 76 S s; 77 s.x = 3; 78 struct S { // okay, hides S 79 bool b; 80 }; 81 S t; 82 t.b = true; 83 struct S { // ERROR, redefinition of struct S 84 float f; 85 }; 86 } 87} 88