]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - contrib/camera/renderer.cpp
my own uncrustify run
[xonotic/netradiant.git] / contrib / camera / renderer.cpp
index 9f44a37d29750ef94a9de1ba72bc434c4287d2f5..ac270836ad7c4d72ea1060e0e73f3c13a69d3b51 100644 (file)
-/*\r
-Copyright (C) 1999-2007 id Software, Inc. and contributors.\r
-For a list of contributors, see the accompanying CONTRIBUTORS file.\r
-\r
-This file is part of GtkRadiant.\r
-\r
-GtkRadiant is free software; you can redistribute it and/or modify\r
-it under the terms of the GNU General Public License as published by\r
-the Free Software Foundation; either version 2 of the License, or\r
-(at your option) any later version.\r
-\r
-GtkRadiant is distributed in the hope that it will be useful,\r
-but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-GNU General Public License for more details.\r
-\r
-You should have received a copy of the GNU General Public License\r
-along with GtkRadiant; if not, write to the Free Software\r
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\r
-*/\r
-\r
-/*\r
-Camera plugin for GtkRadiant\r
-Copyright (C) 2002 Splash Damage Ltd.\r
-*/\r
-\r
-#include "camera.h"\r
-\r
-CRenderer::CRenderer() {\r
-\r
-  refCount = 1;\r
-\r
-  m_bHooked = FALSE;\r
-  \r
-  Register();\r
-  Initialize();\r
-}\r
-\r
-CRenderer::~CRenderer() {\r
-  if( m_bHooked )\r
-    UnRegister();\r
-}\r
-\r
-void CRenderer::Register() {\r
-       g_QglTable.m_pfnHookGL2DWindow( this );\r
-       g_QglTable.m_pfnHookGL3DWindow( this );\r
-       m_bHooked = TRUE;\r
-}\r
-\r
-void CRenderer::UnRegister() {\r
-       if( g_QglTable.m_nSize ) {\r
-               g_QglTable.m_pfnUnHookGL2DWindow( this );\r
-               g_QglTable.m_pfnUnHookGL3DWindow( this );\r
-       }\r
-       m_bHooked = FALSE;\r
-}\r
-\r
-void CRenderer::Initialize() {\r
-\r
-}\r
-\r
-void CRenderer::Draw2D( VIEWTYPE vt ) {\r
-\r
-  g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS);\r
-       g_QglTable.m_pfn_qglPushMatrix();\r
-\r
-  switch(vt)\r
-  {\r
-  case XY:\r
-    break;\r
-  case XZ:\r
-    g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f);\r
-    break;\r
-  case YZ:\r
-    g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f);\r
-    g_QglTable.m_pfn_qglRotatef(270.0f, 0.0f, 0.0f, 1.0f);\r
-    break;\r
-  }\r
-\r
-  CCamera *cam = firstCam;\r
-  while( cam ) {\r
-    cam->GetCam()->draw( ((Listener && cam == g_pCurrentEditCam) ? true : false) );\r
-    cam = cam->GetNext();\r
-  }\r
-\r
-       g_QglTable.m_pfn_qglPopMatrix();\r
-       g_QglTable.m_pfn_qglPopAttrib();\r
-}\r
-\r
-void CRenderer::Draw3D() {\r
-       // FIXME: really need a mainloop callback from the editor core\r
-       static long start;\r
-       static float cycle;\r
-       static long msecs;\r
-       static long current;\r
-\r
-       if( g_iPreviewRunning ) {\r
-               if( g_iPreviewRunning == 1 ) {\r
-                       start = g_FuncTable.m_pfnQGetTickCount();\r
-                       GetCurrentCam()->GetCam()->startCamera( start );\r
-                       cycle = GetCurrentCam()->GetCam()->getTotalTime();\r
-                       msecs = (long)(cycle * 1000);\r
-                       current = start;\r
-                       g_iPreviewRunning = 2;\r
-               }\r
-\r
-               if( current < start + msecs ) {\r
-                       float fov;\r
-      vec3_t origin = {0.0f, 0.0f, 0.0f}, dir = {0.0f, 0.0f, 0.0f}, angles;\r
-\r
-                       GetCurrentCam()->GetCam()->getCameraInfo( current, &origin[0], &dir[0], &fov );\r
-                       VectorSet( angles, asin (dir[2])*180/3.14159, atan2 (dir[1], dir[0])*180/3.14159, 0 );\r
-                       g_CameraTable.m_pfnSetCamera( origin, angles );\r
-                       current = g_FuncTable.m_pfnQGetTickCount();\r
-               } else {\r
-                       g_iPreviewRunning = 0;\r
-                       GetCurrentCam()->GetCam()->setRunning( false );\r
-                       g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );\r
-               }\r
-       }\r
-\r
-  g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS);\r
-\r
-  CCamera *cam = firstCam;\r
-  while( cam ) {\r
-    cam->GetCam()->draw( ((Listener && cam == g_pCurrentEditCam) ? true : false) );\r
-    cam = cam->GetNext();\r
-  }\r
-\r
-       if( g_iPreviewRunning ) {\r
-               int x, y, width, height, i;\r
-               float degInRad;\r
-\r
-               g_CameraTable.m_pfnGetCamWindowExtents( &x, &y, &width, &height );\r
-\r
-               // setup orthographic projection mode\r
-               g_QglTable.m_pfn_qglMatrixMode(GL_PROJECTION);\r
-               g_QglTable.m_pfn_qglLoadIdentity();\r
-               g_QglTable.m_pfn_qglDisable( GL_DEPTH_TEST );\r
-               g_QglTable.m_pfn_qglOrtho( 0, (float)width, 0, (float)height, -100, 100 );\r
-               g_QglTable.m_pfn_qglMatrixMode( GL_MODELVIEW );\r
-\r
-               g_QglTable.m_pfn_qglLoadIdentity();\r
-               g_QglTable.m_pfn_qglColor3f( 1.f, 1.f, 1.f );\r
-               g_QglTable.m_pfn_qglBegin( GL_LINE_LOOP );\r
-               g_QglTable.m_pfn_qglVertex2f( 10, 10 );\r
-               g_QglTable.m_pfn_qglVertex2f( 40, 10 );\r
-               g_QglTable.m_pfn_qglVertex2f( 40, 25 );\r
-               g_QglTable.m_pfn_qglVertex2f( 10, 25 );\r
-               g_QglTable.m_pfn_qglEnd();\r
-\r
-               g_QglTable.m_pfn_qglBegin( GL_LINE_LOOP );\r
-               for( i = 0; i < 360; i += 60 ) {\r
-                       degInRad = i * (3.14159265358979323846/180.f);\r
-                       g_QglTable.m_pfn_qglVertex2f( 18 + cos(degInRad) * 5, 18 + sin(degInRad) * 5 );\r
-               }\r
-               g_QglTable.m_pfn_qglEnd();\r
-\r
-               degInRad = (360-((current - start) % 360)) * (3.14159265358979323846/180.f);\r
-               g_QglTable.m_pfn_qglBegin( GL_LINES );\r
-               g_QglTable.m_pfn_qglVertex2f( 18, 18 );\r
-               g_QglTable.m_pfn_qglVertex2f( 18 + cos(degInRad) * 5, 18 + sin(degInRad) * 5 );\r
-               g_QglTable.m_pfn_qglVertex2f( 32, 18 );\r
-               g_QglTable.m_pfn_qglVertex2f( 32 + cos(degInRad) * 5, 18 + sin(degInRad) * 5 );\r
-               g_QglTable.m_pfn_qglEnd();\r
-\r
-               g_QglTable.m_pfn_qglBegin( GL_LINE_LOOP );\r
-               for( i = 0; i < 360; i += 60 ) {\r
-                       degInRad = i * (3.14159265358979323846/180.f);\r
-                       g_QglTable.m_pfn_qglVertex2f( 32 + cos(degInRad) * 5, 18 + sin(degInRad) * 5 );\r
-               }\r
-               g_QglTable.m_pfn_qglEnd();\r
-\r
-               g_QglTable.m_pfn_qglBegin( GL_LINES );\r
-               g_QglTable.m_pfn_qglVertex2f( 40, 22 );\r
-               g_QglTable.m_pfn_qglVertex2f( 52, 31 );\r
-               g_QglTable.m_pfn_qglVertex2f( 40, 13 );\r
-               g_QglTable.m_pfn_qglVertex2f( 52, 4 );\r
-               g_QglTable.m_pfn_qglEnd();\r
-       }\r
-\r
-  g_QglTable.m_pfn_qglPopAttrib();\r
-}\r
+/*
+   Copyright (C) 1999-2006 Id Software, Inc. and contributors.
+   For a list of contributors, see the accompanying CONTRIBUTORS file.
+
+   This file is part of GtkRadiant.
+
+   GtkRadiant is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   GtkRadiant is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GtkRadiant; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+/*
+   Camera plugin for GtkRadiant
+   Copyright (C) 2002 Splash Damage Ltd.
+ */
+
+#include "camera.h"
+
+CRenderer::CRenderer() {
+
+       refCount = 1;
+
+       m_bHooked = FALSE;
+
+       Register();
+       Initialize();
+}
+
+CRenderer::~CRenderer() {
+       if ( m_bHooked ) {
+               UnRegister();
+       }
+}
+
+void CRenderer::Register() {
+       g_QglTable.m_pfnHookGL2DWindow( this );
+       g_QglTable.m_pfnHookGL3DWindow( this );
+       m_bHooked = TRUE;
+}
+
+void CRenderer::UnRegister() {
+       if ( g_QglTable.m_nSize ) {
+               g_QglTable.m_pfnUnHookGL2DWindow( this );
+               g_QglTable.m_pfnUnHookGL3DWindow( this );
+       }
+       m_bHooked = FALSE;
+}
+
+void CRenderer::Initialize() {
+
+}
+
+void CRenderer::Draw2D( VIEWTYPE vt ) {
+
+       g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS );
+       g_QglTable.m_pfn_qglPushMatrix();
+
+       switch ( vt )
+       {
+       case XY:
+               break;
+       case XZ:
+               g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f );
+               break;
+       case YZ:
+               g_QglTable.m_pfn_qglRotatef( 270.0f, 1.0f, 0.0f, 0.0f );
+               g_QglTable.m_pfn_qglRotatef( 270.0f, 0.0f, 0.0f, 1.0f );
+               break;
+       }
+
+       CCamera *cam = firstCam;
+       while ( cam ) {
+               cam->GetCam()->draw( ( ( Listener && cam == g_pCurrentEditCam ) ? true : false ) );
+               cam = cam->GetNext();
+       }
+
+       g_QglTable.m_pfn_qglPopMatrix();
+       g_QglTable.m_pfn_qglPopAttrib();
+}
+
+void CRenderer::Draw3D() {
+       // FIXME: really need a mainloop callback from the editor core
+       static long start;
+       static float cycle;
+       static long msecs;
+       static long current;
+
+       if ( g_iPreviewRunning ) {
+               if ( g_iPreviewRunning == 1 ) {
+                       start = Q_QGetTickCount();
+                       GetCurrentCam()->GetCam()->startCamera( start );
+                       cycle = GetCurrentCam()->GetCam()->getTotalTime();
+                       msecs = (long)( cycle * 1000 );
+                       current = start;
+                       g_iPreviewRunning = 2;
+               }
+
+               if ( current < start + msecs ) {
+                       float fov;
+                       vec3_t origin = {0.0f, 0.0f, 0.0f}, dir = {0.0f, 0.0f, 0.0f}, angles;
+
+                       GetCurrentCam()->GetCam()->getCameraInfo( current, &origin[0], &dir[0], &fov );
+                       VectorSet( angles, asin( dir[2] ) * 180 / 3.14159, atan2( dir[1], dir[0] ) * 180 / 3.14159, 0 );
+                       g_CameraTable.m_pfnSetCamera( origin, angles );
+                       current = Q_QGetTickCount();
+               }
+               else {
+                       g_iPreviewRunning = 0;
+                       GetCurrentCam()->GetCam()->setRunning( false );
+                       g_FuncTable.m_pfnSysUpdateWindows( W_XY_OVERLAY | W_CAMERA );
+               }
+       }
+
+       g_QglTable.m_pfn_qglPushAttrib( GL_ALL_ATTRIB_BITS );
+
+       CCamera *cam = firstCam;
+       while ( cam ) {
+               cam->GetCam()->draw( ( ( Listener && cam == g_pCurrentEditCam ) ? true : false ) );
+               cam = cam->GetNext();
+       }
+
+       if ( g_iPreviewRunning ) {
+               int x, y, width, height, i;
+               float degInRad;
+
+               g_CameraTable.m_pfnGetCamWindowExtents( &x, &y, &width, &height );
+
+               // setup orthographic projection mode
+               g_QglTable.m_pfn_qglMatrixMode( GL_PROJECTION );
+               g_QglTable.m_pfn_qglLoadIdentity();
+               g_QglTable.m_pfn_qglDisable( GL_DEPTH_TEST );
+               g_QglTable.m_pfn_qglOrtho( 0, (float)width, 0, (float)height, -100, 100 );
+               g_QglTable.m_pfn_qglMatrixMode( GL_MODELVIEW );
+
+               g_QglTable.m_pfn_qglLoadIdentity();
+               g_QglTable.m_pfn_qglColor3f( 1.f, 1.f, 1.f );
+               g_QglTable.m_pfn_qglBegin( GL_LINE_LOOP );
+               g_QglTable.m_pfn_qglVertex2f( 10, 10 );
+               g_QglTable.m_pfn_qglVertex2f( 40, 10 );
+               g_QglTable.m_pfn_qglVertex2f( 40, 25 );
+               g_QglTable.m_pfn_qglVertex2f( 10, 25 );
+               g_QglTable.m_pfn_qglEnd();
+
+               g_QglTable.m_pfn_qglBegin( GL_LINE_LOOP );
+               for ( i = 0; i < 360; i += 60 ) {
+                       degInRad = i * ( 3.14159265358979323846 / 180.f );
+                       g_QglTable.m_pfn_qglVertex2f( 18 + cos( degInRad ) * 5, 18 + sin( degInRad ) * 5 );
+               }
+               g_QglTable.m_pfn_qglEnd();
+
+               degInRad = ( 360 - ( ( current - start ) % 360 ) ) * ( 3.14159265358979323846 / 180.f );
+               g_QglTable.m_pfn_qglBegin( GL_LINES );
+               g_QglTable.m_pfn_qglVertex2f( 18, 18 );
+               g_QglTable.m_pfn_qglVertex2f( 18 + cos( degInRad ) * 5, 18 + sin( degInRad ) * 5 );
+               g_QglTable.m_pfn_qglVertex2f( 32, 18 );
+               g_QglTable.m_pfn_qglVertex2f( 32 + cos( degInRad ) * 5, 18 + sin( degInRad ) * 5 );
+               g_QglTable.m_pfn_qglEnd();
+
+               g_QglTable.m_pfn_qglBegin( GL_LINE_LOOP );
+               for ( i = 0; i < 360; i += 60 ) {
+                       degInRad = i * ( 3.14159265358979323846 / 180.f );
+                       g_QglTable.m_pfn_qglVertex2f( 32 + cos( degInRad ) * 5, 18 + sin( degInRad ) * 5 );
+               }
+               g_QglTable.m_pfn_qglEnd();
+
+               g_QglTable.m_pfn_qglBegin( GL_LINES );
+               g_QglTable.m_pfn_qglVertex2f( 40, 22 );
+               g_QglTable.m_pfn_qglVertex2f( 52, 31 );
+               g_QglTable.m_pfn_qglVertex2f( 40, 13 );
+               g_QglTable.m_pfn_qglVertex2f( 52, 4 );
+               g_QglTable.m_pfn_qglEnd();
+       }
+
+       g_QglTable.m_pfn_qglPopAttrib();
+}