diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 1998-11-08 15:55:23 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 1998-11-08 15:55:23 +0000 |
| commit | 32d18a35914c8b09165a43ec0eb8bfaa83d2712e (patch) | |
| tree | 5136f8457ba87675af1e941960f515829ccbd338 | |
| parent | 0768612ddbeef6977a756a13f909bbb83ee2d9c6 (diff) | |
Added 8-bit palette for OpenGL (3:3:2 RGB). This should fix all of the
OpenGL colormap problems...
git-svn-id: file:///fltk/svn/fltk/trunk@73 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | src/Fl_Gl_Window.cxx | 21 | ||||
| -rw-r--r-- | src/fl_color_win32.cxx | 22 |
2 files changed, 39 insertions, 4 deletions
diff --git a/src/Fl_Gl_Window.cxx b/src/Fl_Gl_Window.cxx index c5b0ab16b..1f596ebee 100644 --- a/src/Fl_Gl_Window.cxx +++ b/src/Fl_Gl_Window.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Gl_Window.cxx,v 1.7 1998/10/21 14:20:06 mike Exp $" +// "$Id: Fl_Gl_Window.cxx,v 1.8 1998/11/08 15:55:22 mike Exp $" // // OpenGL window code for the Fast Light Tool Kit (FLTK). // @@ -59,6 +59,14 @@ #define SWAP_TYPE SWAP #endif +// +// Windows may need a different color palette... +// + +#if defined(WIN32) && HAVE_GL +extern HPALETTE fl_gl_palette; +#endif + //////////////////////////////////////////////////////////////// int Fl_Gl_Window::can_do(int a, const int *b) { @@ -123,6 +131,7 @@ int Fl_Gl_Window::mode(int m, const int *a) { void Fl_Gl_Window::make_current() { #ifdef WIN32 HDC hdc = fl_private_dc(this, mode_,&g); + if (!context) { context = wglCreateContext(hdc); if (fl_first_context) wglShareLists(fl_first_context, (GLXContext)context); @@ -138,6 +147,14 @@ void Fl_Gl_Window::make_current() { } glXMakeCurrent(fl_display, fl_xid(this), (GLXContext)context); #endif + +# if USE_COLORMAP + if (fl_gl_palette) { + SelectPalette(fl_gc, fl_gl_palette, FALSE); + RealizePalette(fl_gc); + } +# endif // USE_COLORMAP + glDrawBuffer(GL_BACK); } @@ -310,5 +327,5 @@ void Fl_Gl_Window::draw_overlay() {} #endif // -// End of "$Id: Fl_Gl_Window.cxx,v 1.7 1998/10/21 14:20:06 mike Exp $". +// End of "$Id: Fl_Gl_Window.cxx,v 1.8 1998/11/08 15:55:22 mike Exp $". // diff --git a/src/fl_color_win32.cxx b/src/fl_color_win32.cxx index da8431395..a55f17850 100644 --- a/src/fl_color_win32.cxx +++ b/src/fl_color_win32.cxx @@ -1,5 +1,5 @@ // -// "$Id: fl_color_win32.cxx,v 1.3 1998/10/21 14:20:45 mike Exp $" +// "$Id: fl_color_win32.cxx,v 1.4 1998/11/08 15:55:23 mike Exp $" // // WIN32 color functions for the Fast Light Tool Kit (FLTK). // @@ -47,6 +47,9 @@ Fl_XMap fl_xmap[256]; Fl_XMap* fl_current_xmap; HPALETTE fl_palette; +#if HAVE_GL +HPALETTE fl_gl_palette; +#endif // HAVE_GL static void clear_xmap(Fl_XMap& xmap) { if (xmap.pen) { @@ -214,6 +217,21 @@ fl_select_palette(void) // Create the palette: fl_palette = CreatePalette(pPal); + +#if HAVE_GL + // Now do the OpenGL palette... Any 8-bit display will want 3:3:2 RGB, + // and doing OpenGL on anything less than 8-bits is just asking for + // disappointment! + + for (int i = 0; i < nColors; i ++) { + pPal->palPalEntry[i].peRed = 255 * ((i >> 5) & 7) / 7; + pPal->palPalEntry[i].peGreen = 255 * ((i >> 2) & 7) / 7; + pPal->palPalEntry[i].peBlue = 255 * (i & 3) / 3; + pPal->palPalEntry[i].peFlags = 0; + }; + + fl_gl_palette = CreatePalette(pPal); +#endif // HAVE_GL } if (fl_palette) { SelectPalette(fl_gc, fl_palette, FALSE); @@ -225,5 +243,5 @@ fl_select_palette(void) #endif // -// End of "$Id: fl_color_win32.cxx,v 1.3 1998/10/21 14:20:45 mike Exp $". +// End of "$Id: fl_color_win32.cxx,v 1.4 1998/11/08 15:55:23 mike Exp $". // |
