# The Industry's Foundation for High Performance Graphics

#### from games to virtual reality, mobile phones to supercomputers

Hi, i want this shader to get working on my desktop PC but had no success.
#ifdef GL_ES
precision highp float;
#endif

uniform vec2 resolution;
uniform float time;

void main(void)
{
vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / resolution.xy;
float a = time*40.0;
float d,e,f,g=1.0/40.0,h,i,r,q;
e=400.0*(p.x*0.5+0.5);
f=400.0*(p.y*0.5+0.5);
i=200.0+sin(e*g+a/150.0)*20.0;
d=200.0+cos(f*g/2.0)*18.0+cos(e*g)*7.0;
r=sqrt(pow(i-e,2.0)+pow(d-f,2.0));
q=f/r;
e=(r*cos(q))-a/2.0;f=(r*sin(q))-a/2.0;
d=sin(e*g)*176.0+sin(e*g)*164.0+r;
h=((f+d)+a/2.0)*g;
i=cos(h+r*p.x/1.3)*(e+e+a)+cos(q*g*6.0)*(r+h/3.0);
h=sin(f*g)*144.0-sin(e*g)*212.0*p.x;
h=(h+(f-e)*q+sin(r-(a+h)/7.0)*10.0+i/4.0)*g;
i+=cos(h*2.3*sin(a/350.0-q))*184.0*sin(q-(r*4.3+a/12.0)*g)+tan(r*g+h)*184.0*cos(r*g+h);
i=mod(i/5.6,256.0)/64.0;
if(i<0.0) i+=4.0;
if(i>=2.0) i=4.0-i;
d=r/350.0;
d+=sin(d*d*8.0)*0.52;
f=(sin(a*g)+1.0)/2.0;
gl_FragColor=vec4(vec3(f*i/1.6,i/2.0+d/13.0,i)*d*p.x+vec3(i/1.3+d/8.0,i/2.0+d/18.0,i)*d*(1.0-p.x),1.0);
}
void main(void)
{
gl_Position = ftransform();
gl_FrontColor = gl_Color;
gl_TexCoord[0] = gl_MultiTexCoord0;
}
The function for rendering is like
void Draw(Point topLeft, Point bottomRight)
{
counter += 0.01;
if (counter > 360.0)
counter = 0;

int x = bottomRight.X() - topLeft.X();
int y = bottomRight.Y() - topLeft.Y();

glDisable(GL_CULL_FACE);

glColor4ub(rand()%255, rand()%255, rand()%255, 255);

glBegin(GL_TRIANGLES);
glVertex3d(topLeft.X(), topLeft.Y(), -10.0);
glVertex3d(topLeft.X(), bottomRight.Y(), -10.0);
glVertex3d(bottomRight.X(), topLeft.Y(), -10.0);

glVertex3d(topLeft.X(), bottomRight.Y(), -10.0);
glVertex3d(bottomRight.X(), bottomRight.Y(), -10.0);
glVertex3d(bottomRight.X(), topLeft.Y(), -10.0);
glEnd();

glEnable(GL_CULL_FACE);
}
Any idea why this gives me an black rectangle?

2. ## Re: Shader doesnt work

Possibly because it uses the worst, least intuitive variables names known to man.

Any guesses on what the shader is supposed to do? Have you confirmed that the triangle is on screen (by writing a solid color in the fragment shader)?

3. ## Re: Shader doesnt work

Why are you sending doubles as uniforms:
Code :
Code :
uniform vec2 resolution;
uniform float time;

4. ## Re: Shader doesnt work

Originally Posted by Alfonse Reinheart
Any guesses on what the shader is supposed to do? Have you confirmed that the triangle is on screen (by writing a solid color in the fragment shader)?
The result should look like this.

If i change the fragment shader to the following i get as supposed an filled rectangle.
void main(void)
{
gl_FragColor = gl_Color;
}

5. ## Re: Shader doesnt work

My guess is that you are not passing the uniforms correctly:
http://www.opengl.org/wiki/GLSL_:_common_mistakes

6. ## Re: Shader doesnt work

I agree to what BionicBytes says here. Pass the uniforms as floats like this,
Code :

7. ## Re: Shader doesnt work

void main(void)
{
vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / resolution.xy;
float a = time*40.0;
float d,e,f,g=1.0/40.0,h,i,r,q;
e=400.0*(p.x*0.5+0.5);
f=400.0*(p.y*0.5+0.5);
i=200.0+sin(e*g+a/150.0)*20.0;
d=200.0+cos(f*g/2.0)*18.0+cos(e*g)*7.0;
r=sqrt(pow(i-e,2.0)+pow(d-f,2.0));
q=f/r;
e=(r*cos(q))-a/2.0;f=(r*sin(q))-a/2.0;
d=sin(e*g)*176.0+sin(e*g)*164.0+r;
h=((f+d)+a/2.0)*g;
i=cos(h+r*p.x/1.3)*(e+e+a)+cos(q*g*6.0)*(r+h/3.0);
h=sin(f*g)*144.0-sin(e*g)*212.0*p.x;
h=(h+(f-e)*q+sin(r-(a+h)/7.0)*10.0+i/4.0)*g;
i+=cos(h*2.3*sin(a/350.0-q))*184.0*sin(q-(r*4.3+a/12.0)*g)+tan(r*g+h)*184.0*cos(r*g+h);
i=mod(i/5.6,256.0)/64.0;
if(i<0.0) i+=4.0;
if(i>=2.0) i=4.0-i;
d=r/350.0;
d+=sin(d*d*8.0)*0.52;
f=(sin(a*g)+1.0)/2.0;
gl_FragColor=vec4(vec3(f*i/1.6,i/2.0+d/13.0,i)*d*p.x+vec3(i/1.3+d/8.0,i/2.0+d/18.0,i)*d*(1.0-p.x),1.0);
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

My guess is that you've blown well past your instruction limit and are now sailing out merrily somewhere in the region of the Small Magellanic Cloud.

What kind of hardware are you trying to run this monstrosity on?

8. ## Re: Shader doesnt work

GLSL does not have an instruction limit:

"A shader should not fail to compile, and a program object should not fail to link due to lack of instruction space or lack of temporary variables. Implementations should ensure that all valid shaders and program objects may be successfully compiled, linked and executed."

9. ## Re: Shader doesnt work

Yeah, like any implementation has ever allowed that. Please; that's one of the Ivory Tower ideals that 3D Labs put into the original GLSL proposal. And like virtually all of those ideals, it amounted to nothing.

Shaders can and will fail to compile/link due to lack of instructions or temporaries.

10. ## Re: Shader doesnt work

Originally Posted by mhagain
My guess is that you've blown well past your instruction limit and are now sailing out merrily somewhere in the region of the Small Magellanic Cloud.
That shader is horrible to read, but I don't think it's anywhere close to instruction or temp limits on any modern PC GPU. It will even "run" on many smartphones.

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•