title: Single OpenGL context, multiple views
body: <p>I have a Windows app which can create several view windows which can render some models using OpenGL (3.2+). Each window can either render it's own independent object, or two (or more) windows can render the same object (but for example from different camera perspectives):</p>
  
  <p><img src="https://i.stack.imgur.com/EM0ub.png" alt="example"></p>
  
  <p>After reading various posts here on stackoverflow I decided to create a single OpenGL context (HGLRC), and for each window that I am rendering to (HDC) I switch with</p>
  
  <pre><code>wglMakeCurrent(targetWindowHDC, m_deviceContext)
  </code></pre>
  
  <p>As you can see in the screenshot, that principally seems to work fine (the window code is happening on the main thread, and for Rendering I have my own RenderThread to which all the OpenGL operations are limited to). For each of the windows I render to an FBO (which has MSAA support if the user activates it), which only gets updated in case something in the scene changes, otherwise it will just draw it to the window as is. </p>
  
  <p>My question is now, what states do I have to set every time I switch to drawing to another window? And is my approach reasonable in terms of performance?</p>
  
  <p>This is what I now set every time after I make the context current for another HDC:</p>
  
  <pre><code>glClearDepth( 1.0f );
  glClearColor( color.r, color.g, color.b, 1.0f );
  glEnable(GL_DEPTH_TEST);
  glDepthMask(GL_TRUE);
  glDepthFunc(GL_LEQUAL);
  glDepthRange(0.0f, 1.0f);
  glPointSize(3.0f);
  glEnable(GL_BLEND);
  glBlendFunc( srcBlend, dstBlend );
  glPolygonMode( GL_FRONT_AND_BACK, targetType );
  glEnable( GL_CULL_FACE );
  glCullFace( GL_BACK );    
  glViewport( 0, 0, vp.width, vp.height );
  </code></pre>
  
  <p>These are basically all the settings that could be changed when the user sets up the render windows, so I need to be sure they are set correctly before rendering each window. </p>
  
  <p>But is it really necessary to do all those calls? It means in the above example with 4 render windows I need to call those 4 times each frame. Is there a better way? Would it be more efficient with several GL contexts? </p>