#version 110 int f(int a, int b, int c) { int a = b; // ERROR, redefinition { float a = float(a) + 1.0; // okay } return a; } int f(int a, int b, int c); // okay to redeclare bool b; float b(int a); // okay, b and b() are different float c(int a); bool c; // okay, and c() are different float f; // okay f and f() are different float tan; // okay, hides built-in function float sin(float x); // okay, can redefine built-in functions float cos(float x) // okay, can redefine built-in functions { return 1.0; } bool radians(bool x) // okay, can overload built-in functions { return true; } int gi = f(1,2,3); // ERROR, can't call user-defined function from global scope void main() { int g(); // okay g(); float sin; // okay sin; sin(0.7); // okay f(1,2,3); float f; f = 3.0; gl_Position = vec4(f); for (int f = 0; f < 10; ++f) ++f; int x = 1; { float x = 2.0, /* 2nd x visible here */ y = x; // y is initialized to 2 int z = z; // ERROR: z not previously defined. } { int x = x; // x is initialized to '1' } struct S { int x; }; { S S = S(0); // 'S' is only visible as a struct and constructor S.x; // 'S' is now visible as a variable } int degrees; degrees(3.2); }