88 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
#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);
 | 
						|
 | 
						|
    {
 | 
						|
        S s;
 | 
						|
        s.x = 3;
 | 
						|
        struct S {   // okay, hides S
 | 
						|
            bool b;
 | 
						|
        };
 | 
						|
        S t;
 | 
						|
        t.b = true;
 | 
						|
        struct S {    // ERROR, redefinition of struct S
 | 
						|
            float f;
 | 
						|
        };
 | 
						|
    }
 | 
						|
}
 |