title: Why doesn't glCopyTexSubImage2D copy my square correctly?
body: <p>here is the output: <a href="http://i43.tinypic.com/9a5zyx.png" rel="noreferrer">http://i43.tinypic.com/9a5zyx.png</a>
  if things were working the way i wanted, the colors in the left square would match the colors in the right square. thanks for any help regarding the subject</p>
  
  <pre>#include &lt;gl/glfw.h&gt;
  
  const char* title="test";
  GLuint img;
  unsigned int w=64,h=64;
  int screenwidth,screenheight;
  
  void enable2d()
  {
      glMatrixMode(GL_PROJECTION);
      glPushMatrix();
      glLoadIdentity();
  
      glViewport(0,0,screenwidth,screenheight);
      glOrtho(0,screenwidth,screenheight,0,-1,1);
  
      glMatrixMode(GL_MODELVIEW);
      glPushMatrix();
      glLoadIdentity();
  
      glPushAttrib(GL_DEPTH_BUFFER_BIT|GL_LIGHTING_BIT);
      glDisable(GL_DEPTH_TEST);
      glDisable(GL_LIGHTING);
  
      glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
  }
  
  void drawmytex()
  {
      glEnable(GL_TEXTURE_2D);
      glBindTexture(GL_TEXTURE_2D,img);
      glBegin(GL_QUADS);
      glTexCoord2i(0,0);
      glVertex2i(0,0);
      glTexCoord2i(1,0);
      glVertex2i(w,0);
      glTexCoord2i(1,1);
      glVertex2i(w,h);
      glTexCoord2i(0,1);
      glVertex2i(0,h);
      glEnd();
      glDisable(GL_TEXTURE_2D);
  }
  
  void drawquad(int x,int y)
  {
      glBegin(GL_QUADS);
      glColor3f(0.0f,1.0f,0.0f);
      glVertex2i(x,y);
      glColor3f(1.0f,0.0f,1.0f);
      glVertex2i(x+w,y);
      glColor3f(0.0f,1.0f,1.0f);
      glVertex2i(x+w,y+h);
      glColor3f(0.0f,0.0f,1.0f);
      glVertex2i(x,y+h);
      glEnd();
  }
  
  void texcopy()
  {
      if (!glIsTexture(img))
          glDeleteTextures(1,&img);
      glGenTextures(1,&img);
      glBindTexture(GL_TEXTURE_2D,img);
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
      glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,w,h,0,GL_RGBA,GL_UNSIGNED_BYTE,0);
  
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      glOrtho(0,w,h,0,-1,1);
      glViewport(0,0,w,h);
      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity();
  
      glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
      drawquad(0,0);
  
      glBindTexture(GL_TEXTURE_2D,img);
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
      //glCopyTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,0,0,w,h,0);
      glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,w,h);
  
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      glOrtho(0,screenwidth,screenheight,0,-1,1);
      glViewport(0,0,screenwidth,screenheight);
      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity();
  }
  
  int main()
  {
      int running;
  
      glfwInit();
  
      running=glfwOpenWindow(640,480,0,0,0,0,0,0,GLFW_WINDOW);
      if (!running)
      {
          glfwTerminate();
          return 0;
      }
  
  
      glfwSetWindowTitle(title);
      glfwEnable(GLFW_STICKY_KEYS);
      glfwGetWindowSize(&screenwidth,&screenheight);
  
      enable2d();
      texcopy();
  
      do
      {
          glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
          glLoadIdentity();
  
          drawquad(64,0);
          drawmytex();
  
          glfwSwapBuffers();
          running=!glfwGetKey(GLFW_KEY_ESC)&&glfwGetWindowParam(GLFW_OPENED);
          GLenum error=glGetError();
          if (error!=GL_NO_ERROR)running=error;
          glfwSleep(.017);
      }
      while (running==1);
  
      glDeleteTextures(1,&img);
  
      glfwTerminate();
      return running;
  }
  </pre>