title: How to get coordinate of fragment shaders? gl_FragCoord not working
body: <p>I'm trying to make a Mandelbrot set explorer, which will shade the pixels on the screen based on its coordinate in the window. I've done this before without using shaders but its extremely slow. I can't figure out how to get the position of the fragment so that I can use the algorithm I've already developed to render the Mandelbrot set.</p>
  
  <p>I'm using ljgwl 3. I've been researching all day on how to do this, and I can't find any comprehensive findings on how to get the coordinates. It seems like gl_FragCoord should work and then I could use gl_FragCoord.x and gl_FragCoord.y to get the x and y values, which is all I need for the algorithm, but my screen always ends up being all red. I'm not passing any info from the vertex shader into my fragment shader because I need to render the color of each coordinate in the Mandelbrot based on its x and y values, so the vertex positions aren't helpful (I also don't understand how to get those).</p>
  
  <p>Here is my fragment shader:</p>
  
  <pre><code>    in vec4 gl_FragCoord;
      uniform vec2 viewportDimensions;
      uniform float minX;
      uniform float maxX;
      uniform float minY;
      uniform float maxY;
  
      vec3 hsv2rgb(vec3 c){
          vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
          vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
          return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
      }
  
      void main(){
          float x = gl_FragCoord.x;
          float y = gl_FragCoord.y;
  
          vec2 c = vec2((x* (maxX-minX) / viewportDimensions.x + minX), (y*(maxY-minY)/ viewportDimensions.y + minY));
          vec2 z = c;
  
          float limit = 1000;
          float iterations = 0;
          for(int i = 0; i &lt; int(limit); i++){
              float t = 2.0 * z.x * z.y + c.y;
              z.x = z.x * z.x - z.y * z.y + c.x;
              z.y = t;
  
              if(z.x * z.x + z.y *z.y &gt; 4){
                  break;
              }
  
              iterations += 1.0;
          }
          float itRGB = iterations/limit;
          vec3 hsv = vec3(itRGB, 1.0, 1.0);
          vec3 rgb = hsv2rgb(hsv);
          gl_FragColor = vec4(rgb, 1);
      }
  </code></pre>
  
  <p>I thought that I could use gl_FragCoord without declaring it as in first but it doesn't work either way. vec2 c is attempting to map the current coordinate to a coordinate in the complex number grid based on current resolution of the window.</p>
  
  <p>This is all that's in my vertex shader:</p>
  
  <pre><code>    void main(){
          gl_Position = ftransform();
      }
  </code></pre>
  
  <p>And the relevant bit of my client code:</p>
  
  <pre><code>    glBegin(GL_POLYGON);
                  glVertex2f(-1f, -1f);
                  glVertex2f(1f, -1f);
                  glVertex2f(1f, 1f);
                  glVertex2f(-1f, 1f);
      glEnd();
  </code></pre>
  
  <p>This is running in my window loop, and just creates the square where the mandelbrot is supposed to render.</p>
  
  <p>This is the output of my working java Mandelbrot program which doesn't use shaders: <a href="https://i.stack.imgur.com/5i4bZ.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/5i4bZ.jpg" alt="enter image description here"></a></p>
  
  <p>This is the output of my shader program:
  <a href="https://i.stack.imgur.com/3UYuA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/3UYuA.png" alt="enter image description here"></a></p>
  
  <p>Fullscreen:
  <a href="https://i.stack.imgur.com/H3v0g.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/H3v0g.png" alt="enter image description here"></a></p>
  
  <p>I also have no clue as to how to be able to resize the window properly without the black bars. I am attempting to do this with vec2 c in my code above as I have set the uniforms to be the windows height and width and am using that when mapping the coordinate to the complex number plane, but as gl_FragCoord doesn't seem to work then neither should this. A link to a current guide on lgjwl screen resizing based on glfwCreateWindow would be vastly appreciated.</p>