title: Common OpenGL cleanup operation WITHOUT destroying context
body: <p>Recently, I've been doing offscreen GPU acceleration for my <strong>real-time</strong> program. </p>
  
  <p>I want to create a context and reuse it several times (100+). And I'm using <code>OpenGL 2.1 and GLSL version 1.20</code>.</p>
  
  <p>Each time I reuse the context, I'm going to do the following things: </p>
  
  <ul>
  <li>Compile <code>shaders</code>, link <code>program</code> then <code>glUsePrograme</code> (Question 1: should I relink the <code>program</code> or re-create the <code>program</code> each time?)</li>
  <li>Generate <code>FBO</code> and <code>Texture</code>, then bind them so I can do offscreen rendering. (Question2: should I destroy those <code>FBO</code> and <code>Texture</code>)</li>
  <li>Generate <code>GL_Array_BUFFER</code> and put some vertices data in it. (Question3: Do I even need to clean this?)</li>
  <li>glDrawArray bluh bluh...</li>
  <li>Call <code>glFinish()</code> then copy data from GPU to CPU by calling <code>glReadPixels</code>.</li>
  </ul>
  
  <p>And is there any other necessary cleanup operation that I should consider?</p>