Картинка рисуется в две форточки. Их процедуры:
C++ Code:
  1. {
  2. PAINTSTRUCT Paintstructure;
  3. switch (Message)
  4. {
  5.   case WM_CREATE      : ViewGDIContext=GetDC(Window);
  6.                         SetDCPixelFormat(Window, ViewGDIContext);
  7.                         ViewGLContext=wglCreateContext (ViewGDIContext);
  8.                         wglMakeCurrent(ViewGDIContext, ViewGLContext);
  9.                         InitializeView(Window);
  10.   break;
  11.   case WM_SIZE        : wglMakeCurrent(ViewGDIContext, ViewGLContext);
  12.                         ReSizeView(Window);
  13.   break;
  14.   case WM_DESTROY     : wglMakeCurrent (NULL, NULL);
  15.                         wglDeleteContext (ViewGLContext);
  16.                         ReleaseDC (Window, ViewGDIContext);
  17.   break;
  18. }
  19. return DefWindowProc(Window, Message, First, Second);
и
C++ Code:
  1. PAINTSTRUCT Paintstructure;
  2. switch (Message)
  3. {
  4.   case WM_CREATE      : MapGDIContext=GetDC(Window);
  5.                         SetDCPixelFormat(Window, MapGDIContext);
  6.                         MapGLContext=wglCreateContext (MapGDIContext);
  7.                         wglMakeCurrent(MapGDIContext, MapGLContext);
  8.                         InitializeMap(Window);
  9.   break;
  10.   case WM_SIZE        : wglMakeCurrent(MapGDIContext, MapGLContext);
  11.                         ReSizeMap(Window);
  12.   break;
  13.   case WM_DESTROY     : wglMakeCurrent (NULL, NULL);
  14.                         wglDeleteContext (MapGLContext);
  15.                         ReleaseDC (Window, MapGDIContext);
  16.   break;
  17. }
  18. return DefWindowProc(Window, Message, First, Second);
, где
C++ Code:
  1. GLvoid                           InitializeMap                                (const HWND                   &Window               )
  2. {
  3. RECT Rectangle;
  4. GLdouble Rotate;
  5. glClearColor(0.0f, 0.0, 1.0, 0.0);
  6. GetClientRect(Window, &Rectangle);
  7. Rotate=((GLdouble)Rectangle.right)/((GLdouble)Rectangle.bottom);
  8. glViewport(0, 0, Rectangle.right, Rectangle.bottom);
  9. glMatrixMode(GL_PROJECTION);
  10. glLoadIdentity();
  11. gluPerspective (15.0*Rotate, Rotate, 1.0, 1000.0);
  12. }
  13. GLvoid ReSizeMap (const HWND &Window)
  14. {
  15. RECT Rectangle;
  16. GLdouble Rotate;
  17. glClearColor(0.0f, 0.0, 1.0, 0.0);
  18. GetClientRect(Window, &Rectangle);
  19. Rotate=((GLdouble)Rectangle.right)/((GLdouble)Rectangle.bottom);
  20. glViewport(0, 0, Rectangle.right, Rectangle.bottom);
  21. glMatrixMode(GL_PROJECTION);
  22. glLoadIdentity();
  23. gluPerspective (15.0*Rotate, Rotate, 1.0, 1000.0);
  24. }
  25. GLvoid ReSizeView (const HWND &Window)
  26. {
  27. RECT Rectangle;
  28. GLdouble Rotate;
  29. glClearColor(0.0f, 0.0, 1.0, 0.0);
  30. GetClientRect(Window, &Rectangle);
  31. Rotate=((GLdouble)Rectangle.right)/((GLdouble)Rectangle.bottom);
  32. glViewport(0, 0, Rectangle.right, Rectangle.bottom);
  33. glMatrixMode(GL_PROJECTION);
  34. glLoadIdentity();
  35. gluPerspective (45.0*Rotate, Rotate, 1.0, 1000.0);
  36. }
  37. GLvoid InitializeView (const HWND &Window)
  38. {
  39. RECT Rectangle;
  40. GLdouble Rotate;
  41. glClearColor(0.0f, 0.0, 1.0, 0.0);
  42. GetClientRect(Window, &Rectangle);
  43. Rotate=((GLdouble)Rectangle.right)/((GLdouble)Rectangle.bottom);
  44. glViewport(0, 0, Rectangle.right, Rectangle.bottom);
  45. glMatrixMode(GL_PROJECTION);
  46. glLoadIdentity();
  47. gluPerspective (45.0*Rotate, Rotate, 1.0, 1000.0);
  48. }
Функции отрисовки в одной форточке передаётся ViewGDIContext, а функции отрисовки в другой форточке передаётся MapGDIContext. При масштабировании обеих форточек то всё нормально рисуется, то вдруг то, что должно быть в одной форточке, рисуется в другой и наоборот. Там различается цвет фона, ни один полигон в обеих сценах не имеет цвета, совпадающего с цветом фона. В чём может быть проблема?