2009-09-26 01:44:09 +00:00
/*
Bullet Continuous Collision Detection and Physics Library
Copyright ( c ) 2003 - 2009 Erwin Coumans http : //bulletphysics.org
This software is provided ' as - is ' , without any express or implied warranty .
In no event will the authors be held liable for any damages arising from the use of this software .
Permission is granted to anyone to use this software for any purpose ,
including commercial applications , and to alter it and redistribute it freely ,
subject to the following restrictions :
1. The origin of this software must not be misrepresented ; you must not claim that you wrote the original software . If you use this software in a product , an acknowledgment in the product documentation would be appreciated but is not required .
2. Altered source versions must be plainly marked as such , and must not be misrepresented as being the original software .
3. This notice may not be removed or altered from any source distribution .
*/
# ifndef GL_DIALOG_WINDOW_H
# define GL_DIALOG_WINDOW_H
class btCollisionObject ;
2009-09-29 02:12:40 +00:00
# ifdef WIN32 //for glut.h
# include <windows.h>
# endif
//think different
# if defined(__APPLE__) && !defined (VMDMESA)
# include "TargetConditionals.h"
# if defined (TARGET_OS_IPHONE) || defined (TARGET_IPHONE_SIMULATOR)
# import <OpenGLES / ES1 / gl.h>
# define glOrtho glOrthof
# else
# include <OpenGL/gl.h>
# include <OpenGL/glu.h>
# include <GLUT/glut.h>
# endif
# else
# include <GL/glut.h>
# ifdef _WINDOWS
# include <windows.h>
# include <GL/gl.h>
# include <GL/glu.h>
# endif
# endif
2009-09-26 01:44:09 +00:00
# include "LinearMath/btScalar.h"
# include "LinearMath/btAlignedObjectArray.h"
class btTypedConstraint ;
class GL_DialogWindow ;
enum GL_DIALOG_CONTROL_TYPES
{
GL_TEXT_CONTROL = 1 ,
GL_TOGGLE_CONTROL ,
GL_SLIDER_CONTROL ,
GL_CONTROL_MAX_TYPE
} ;
class GL_DialogControl
{
protected :
int m_type ;
public :
virtual ~ GL_DialogControl ( )
{
}
virtual void draw ( int & parentHorPos , int & parentVertPos , btScalar deltaTime ) = 0 ;
int getType ( ) const
{
return m_type ;
}
} ;
struct GL_TextControl : public GL_DialogControl
{
public :
btAlignedObjectArray < const char * > m_textLines ;
GL_TextControl ( )
{
m_type = GL_TEXT_CONTROL ;
}
2009-09-26 19:58:37 +00:00
virtual ~ GL_TextControl ( ) { }
2009-09-26 01:44:09 +00:00
virtual void draw ( int & parentHorPos , int & parentVertPos , btScalar deltaTime ) ;
} ;
struct GL_ToggleControl : public GL_DialogControl
{
btCollisionObject * m_toggleBody ;
GL_DialogWindow * m_parentWindow ;
const char * m_toggleText ;
public :
bool m_active ;
GL_ToggleControl ( const char * toggleText , btCollisionObject * toggleBody , GL_DialogWindow * parentWindow )
: m_toggleBody ( toggleBody ) ,
m_parentWindow ( parentWindow ) ,
m_toggleText ( toggleText ) ,
m_active ( false )
{
m_type = GL_TOGGLE_CONTROL ;
}
virtual void draw ( int & parentHorPos , int & parentVertPos , btScalar deltaTime ) ;
} ;
struct GL_SliderControl : public GL_DialogControl
{
btCollisionObject * m_sliderBody ;
GL_DialogWindow * m_parentWindow ;
btScalar m_lowerLimit ;
btScalar m_upperLimit ;
btTypedConstraint * m_constraint ;
const char * m_sliderText ;
public :
GL_SliderControl ( const char * sliderText , btCollisionObject * sliderBody , GL_DialogWindow * parentWindow , btScalar lowerLimit , btScalar upperLimit , btTypedConstraint * constaint )
: m_sliderBody ( sliderBody ) ,
m_parentWindow ( parentWindow ) ,
m_sliderText ( sliderText ) ,
m_lowerLimit ( lowerLimit ) ,
m_upperLimit ( upperLimit ) ,
m_constraint ( constaint )
{
m_type = GL_SLIDER_CONTROL ;
}
virtual void draw ( int & parentHorPos , int & parentVertPos , btScalar deltaTime ) ;
btScalar btGetFraction ( ) ;
btScalar getLowerLimit ( )
{
return m_lowerLimit ;
}
btScalar getUpperLimit ( )
{
return m_upperLimit ;
}
btTypedConstraint * getConstraint ( )
{
return m_constraint ;
}
} ;
///Very basic OpenGL Graphical Userinterface Window with text, toggle, slider control
class GL_DialogWindow
{
int m_dialogHorPos ;
int m_dialogVertPos ;
int m_dialogWidth ;
int m_dialogHeight ;
int m_screenWidth ;
int m_screenHeight ;
const char * m_dialogTitle ;
//saved OpenGL settings
GLfloat m_PrevLineWidth ;
GLint m_PrevTexEnv ;
GLint m_PrevPolygonMode [ 2 ] ;
GLint m_MaxClipPlanes ;
GLint m_PrevTexture ;
GLint m_PrevArrayBufferARB ;
GLint m_PrevElementArrayBufferARB ;
GLboolean m_PrevVertexProgramARB ;
GLboolean m_PrevFragmentProgramARB ;
GLuint m_PrevProgramObjectARB ;
GLboolean m_PrevTexture3D ;
GLboolean m_PrevActiveTexture1D [ 32 ] ;
GLboolean m_PrevActiveTexture2D [ 32 ] ;
GLboolean m_PrevActiveTexture3D [ 32 ] ;
GLint m_PrevActiveTextureARB ;
bool m_SupportTexRect ;
GLboolean m_PrevTexRectARB ;
GLint m_PrevBlendEquation ;
GLint m_PrevBlendEquationRGB ;
GLint m_PrevBlendEquationAlpha ;
GLint m_PrevBlendSrcRGB ;
GLint m_PrevBlendDstRGB ;
GLint m_PrevBlendSrcAlpha ;
GLint m_PrevBlendDstAlpha ;
GLint m_ViewportInit [ 4 ] ;
GLfloat m_ProjMatrixInit [ 16 ] ;
btCollisionObject * m_collisionObject ;
btAlignedObjectArray < GL_DialogControl * > m_controls ;
protected :
void saveOpenGLState ( ) ;
void restoreOpenGLState ( ) ;
// void drawLine(int _X0, int _Y0, int _X1, int _Y1, unsigned int _Color0, unsigned int _Color1, bool antiAliased);
// void drawRect(int horStart, int vertStart, int horEnd, int vertEnd, unsigned int argbColor00,unsigned int argbColor10,unsigned int argbColor01,unsigned int argbColor11);
public :
GL_DialogWindow ( int horPos , int vertPos , int dialogWidth , int dialogHeight , btCollisionObject * colObject , const char * dialogTitle ) ;
virtual ~ GL_DialogWindow ( ) ;
void draw ( btScalar deltaTime ) ;
void setScreenSize ( int width , int height ) ;
void setStartPosition ( int dialogHorPos , int dialogVertPos ) ;
void addControl ( GL_DialogControl * control )
{
m_controls . push_back ( control ) ;
}
void removeControl ( GL_DialogControl * control )
{
m_controls . remove ( control ) ;
}
btCollisionObject * getCollisionObject ( )
{
return m_collisionObject ;
}
int getDialogHorPos ( ) const
{
return m_dialogHorPos ;
}
int getDialogVertPos ( ) const
{
return m_dialogVertPos ;
}
int getDialogWidth ( ) const
{
return m_dialogWidth ;
}
int getDialogHeight ( ) const
{
return m_dialogHeight ;
}
int getScreenWidth ( ) const
{
return m_screenWidth ;
}
int getScreenHeight ( ) const
{
return m_screenHeight ;
}
int getNumControls ( ) const
{
return m_controls . size ( ) ;
}
const GL_DialogControl * getControl ( int index ) const
{
return m_controls [ index ] ;
}
GL_DialogControl * getControl ( int index )
{
return m_controls [ index ] ;
}
} ;
# endif //GL_DIALOG_WINDOW_H