glcanvas.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:8k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: glcanvas.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 20:50:30  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.25
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: glcanvas.cpp,v 1000.1 2004/06/01 20:50:30 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Mike DiCuccio
  35.  *
  36.  * File Description:
  37.  *    CGlCanvas -- provide standardized OpenGL view setup for FLTK
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <gui/opengl.h>
  41. #include <gui/opengl/glcanvas.hpp>
  42. #include <gui/opengl/glprint.hpp>
  43. #include <gui/opengl/glutils.hpp>
  44. BEGIN_NCBI_SCOPE
  45. //
  46. // hackish work-around to eliminate the default callback that FLTK uses...
  47. //
  48. static void s_NullCallback(Fl_Widget*, void*)
  49. {
  50. }
  51. CGlCanvas::CGlCanvas(int x, int y, int width, int height, const char* label)
  52.     : Fl_Gl_Window(x, y, width, height, label),
  53.       m_RenderModes(0),
  54.       m_Capture(false)
  55. {
  56.     callback(s_NullCallback);
  57. }
  58. CGlCanvas::~CGlCanvas(void)
  59. {
  60. }
  61. void CGlCanvas::draw_print(void)
  62. {
  63.     m_Capture = true;
  64.     draw();
  65.     m_Capture = false;
  66. }
  67. void CGlCanvas::draw(void)
  68. {
  69.     x_SetupView();
  70.     x_Draw();
  71.     if (!m_Capture) {
  72.         x_OverlayDraw();
  73.     }
  74.     CGlUtils::CheckGlError();
  75. }
  76. //
  77. // CGlCanvas::setupRenderModes(void)
  78. // this function sets a very basic set of render modes
  79. //
  80. void CGlCanvas::x_SetupRenderModes(void)
  81. {
  82.     if (m_RenderModes & fLighting) {
  83.         glEnable(GL_LIGHTING);
  84.     } else {
  85.         glDisable(GL_LIGHTING);
  86.     }
  87.     if (m_RenderModes & fCullFace) {
  88.         glEnable(GL_CULL_FACE);
  89.     } else {
  90.         glDisable(GL_CULL_FACE);
  91.     }
  92.     if (m_RenderModes & fDepthTest) {
  93.         glEnable(GL_DEPTH_TEST);
  94.     } else {
  95.         glDisable(GL_DEPTH_TEST);
  96.     }
  97.     if (m_RenderModes & fTexture2D) {
  98.         glEnable(GL_TEXTURE_2D);
  99.     } else {
  100.         glDisable(GL_TEXTURE_2D);
  101.     }
  102. }
  103. void CGlCanvas::x_DrawBackground(float red, float green, float blue)
  104. {
  105.     glClearColor(red, green, blue, 0);
  106.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  107. }
  108. void CGlCanvas::Print(const CPrintOptions& opts)
  109. {
  110.     make_current();
  111.     const unsigned int orig_w = w();
  112.     const unsigned int orig_h = h();
  113.     const CPrintOptions::TOutputFormat fmt = opts.GetOutputFormat();
  114.     if (CPrintOptions::s_IsRasterFormat(fmt)) {
  115.         const unsigned int _w = opts.GetRasterWidth();
  116.         const unsigned int _h = opts.GetRasterHeight();
  117.         size(_w, _h);
  118.     }
  119.     GLPrint(this, &CGlCanvas::draw_print, opts);
  120.     if (CPrintOptions::s_IsRasterFormat(fmt)) {
  121.         size(orig_w, orig_h);
  122.         draw();
  123.     }
  124. }
  125. END_NCBI_SCOPE
  126. /*
  127.  * ===========================================================================
  128.  * $Log: glcanvas.cpp,v $
  129.  * Revision 1000.1  2004/06/01 20:50:30  gouriano
  130.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.25
  131.  *
  132.  * Revision 1.25  2004/05/21 22:27:44  gorelenk
  133.  * Added PCH ncbi_pch.hpp
  134.  *
  135.  * Revision 1.24  2003/09/29 15:43:43  dicuccio
  136.  * +glutils.hpp for CGlUtils
  137.  *
  138.  * Revision 1.23  2003/07/21 19:31:34  dicuccio
  139.  * Added NULL callback for CGlCanvas - works around interenting problem with
  140.  * Fl_Gl_Window's default callback.  Removed unused ctor.
  141.  *
  142.  * Revision 1.22  2003/07/15 18:53:53  meric
  143.  * Resize the canvas as requested if printing to a raster format
  144.  *
  145.  * Revision 1.21  2003/06/25 16:22:41  meric
  146.  * Moved printing functionality to gui/opengl/gl_print and gui/utils/print
  147.  *
  148.  * Revision 1.20  2003/06/24 22:46:45  meric
  149.  * Temporary fix: added includes to allow MSVC++ to compile error/warning-free.
  150.  * These includes are for printing functionality, which will be moved shortly.
  151.  *
  152.  * Revision 1.19  2003/06/19 16:34:21  meric
  153.  * Pass file type parameter to CAppPopup::PopupFile
  154.  *
  155.  * Revision 1.18  2003/06/19 00:54:58  dicuccio
  156.  * Minor reformatting.  Changed LOG_POST() to _TRACE().
  157.  *
  158.  * Revision 1.17  2003/06/18 19:44:40  meric
  159.  * Print: loop to increase size of feedback buffer as necessary
  160.  *
  161.  * Revision 1.16  2003/06/18 17:26:57  meric
  162.  * Final phase of print reorg: print classes now in gui/utils
  163.  *
  164.  * Revision 1.15  2003/06/17 19:34:32  meric
  165.  * Call CAppPopup::PopupFile() instead of CAppPopup::Popup()
  166.  *
  167.  * Revision 1.14  2003/06/17 12:08:42  meric
  168.  * Fixed CVectorOutput to include separate call to SetOutputStream()
  169.  * Remove static keyword from s_Print (anachronism)
  170.  *
  171.  * Revision 1.13  2003/06/16 21:20:31  meric
  172.  * Changed auto_ptr<> to CRef<> on a CObject-derived class (COpenGLPrintBuffer)
  173.  *
  174.  * Revision 1.12  2003/06/16 19:10:59  meric
  175.  * Remove print buffer from print context before the context is destroyed. (this
  176.  * code was 'lost' in the previous update).
  177.  *
  178.  * Revision 1.11  2003/06/16 16:56:10  dicuccio
  179.  * Fix compiler error for MSVC
  180.  *
  181.  * Revision 1.10  2003/06/16 15:59:10  dicuccio
  182.  * Work-in-progress: everything compiles, still much reorganization to be done.
  183.  * Moved generic functionality out of opengl/print/ and into gui/utils (print
  184.  * options, print dialogs, etc.).  Removed interactive state from CGlCanvas.
  185.  * Added hook in CView for opening standard print dialog, and for generic print
  186.  * handling.  Restored log for glcanvas.cpp
  187.  *
  188.  * Revision 1.9  2003/06/13 18:44:04  meric
  189.  * Initialization in x_Init(), which is called by all c'tors
  190.  * Remove print-related functinality from draw(), which can now be
  191.  * overridden freely without affecting the Print() function.
  192.  * Add print functions [ Print(), x_Print() etc ]
  193.  *
  194.  * Revision 1.8  2003/05/22 15:51:06  meric
  195.  * small changes to GL Feedback code (remains commented out)
  196.  *
  197.  * Revision 1.7  2003/05/13 19:25:20  dicuccio
  198.  * Prepare CGlCanvas for printing support (Peter Meric)
  199.  *
  200.  * Revision 1.6  2003/05/06 15:59:44  dicuccio
  201.  * Split CGlCanvas into 2D and 3D versions; moved hardware check into CGlUtils
  202.  *
  203.  * Revision 1.5  2003/03/28 17:16:01  dicuccio
  204.  * Added first support for testing for hardware acceleration
  205.  *
  206.  * Revision 1.4  2003/01/13 13:10:11  dicuccio
  207.  * Namespace clean-up.  Retired namespace gui -> converted all to namespace
  208.  * ncbi.  Moved all FLUID-generated code into namespace ncbi.
  209.  *
  210.  * Revision 1.3  2002/11/14 16:24:44  dicuccio
  211.  * Changed to include standard OpenGL headers through 'gui/opengl.h'
  212.  *
  213.  * Revision 1.2  2002/11/08 13:27:45  dicuccio
  214.  * Code clean-up and reformatting.
  215.  *
  216.  * Revision 1.1  2002/11/05 20:21:47  dicuccio
  217.  * Initial revision
  218.  *
  219.  * ===========================================================================
  220.  */