diff --git a/include/ientity.h b/include/ientity.h index 49116b9d..7420dea2 100644 --- a/include/ientity.h +++ b/include/ientity.h @@ -126,8 +126,12 @@ virtual void setLightRadii( bool lightRadii ) = 0; virtual bool getLightRadii() = 0; virtual void setShowNames( bool showNames ) = 0; virtual bool getShowNames() = 0; +virtual void setShowBboxes( bool showBboxes ) = 0; +virtual bool getShowBboxes() = 0; virtual void setShowNamesDist( int dist ) = 0; virtual int getShowNamesDist() = 0; +virtual void setShowNamesRatio( int ratio ) = 0; +virtual int getShowNamesRatio() = 0; virtual void setShowTargetNames( bool showNames ) = 0; virtual bool getShowTargetNames() = 0; virtual void setShowAngles( bool showAngles ) = 0; diff --git a/include/igl.h b/include/igl.h index eca09ae7..e6dc2c11 100644 --- a/include/igl.h +++ b/include/igl.h @@ -1976,6 +1976,115 @@ typedef unsigned int GLhandleARB; #endif + + + +/* ----------------------- GL_ARB_framebuffer_object ----------------------- */ + +#ifndef GL_ARB_framebuffer_object +#define GL_ARB_framebuffer_object 1 + +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_INDEX 0x8222 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_SRGB 0x8C40 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 + +#define glBindFramebuffer GlobalOpenGL().m_glBindFramebuffer +#define glBindRenderbuffer GlobalOpenGL().m_glBindRenderbuffer +#define glBlitFramebuffer GlobalOpenGL().m_glBlitFramebuffer +#define glCheckFramebufferStatus GlobalOpenGL().m_glCheckFramebufferStatus +#define glDeleteFramebuffers GlobalOpenGL().m_glDeleteFramebuffers +#define glDeleteRenderbuffers GlobalOpenGL().m_glDeleteRenderbuffers +#define glFramebufferRenderbuffer GlobalOpenGL().m_glFramebufferRenderbuffer +#define glFramebufferTexture1D GlobalOpenGL().m_glFramebufferTexture1D +#define glFramebufferTexture2D GlobalOpenGL().m_glFramebufferTexture2D +#define glFramebufferTexture3D GlobalOpenGL().m_glFramebufferTexture3D +#define glFramebufferTextureLayer GlobalOpenGL().m_glFramebufferTextureLayer +#define glGenFramebuffers GlobalOpenGL().m_glGenFramebuffers +#define glGenRenderbuffers GlobalOpenGL().m_glGenRenderbuffers +#define glGenerateMipmap GlobalOpenGL().m_glGenerateMipmap +#define glGetFramebufferAttachmentParameteriv GlobalOpenGL().m_glGetFramebufferAttachmentParameteriv +#define glGetRenderbufferParameteriv GlobalOpenGL().m_glGetRenderbufferParameteriv +#define glIsFramebuffer GlobalOpenGL().m_glIsFramebuffer +#define glIsRenderbuffer GlobalOpenGL().m_glIsRenderbuffer +#define glRenderbufferStorage GlobalOpenGL().m_glRenderbufferStorage +#define glRenderbufferStorageMultisample GlobalOpenGL().m_glRenderbufferStorageMultisample + +#endif /* GL_ARB_framebuffer_object */ + + + + #include "gtkutil/glfont.h" /// \brief A module which wraps a runtime-binding of the standard OpenGL functions. @@ -2789,6 +2898,32 @@ struct OpenGLBinding void ( QGL_DLLEXPORT* m_glProgramNamedParameter4fNV )( GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat ); void ( QGL_DLLEXPORT* m_glProgramNamedParameter4fvNV )( GLuint, GLsizei, const GLubyte *, const GLfloat * ); void ( QGL_DLLEXPORT* m_glGetProgramNamedParameterfvNV )( GLuint, GLsizei, const GLubyte *, GLfloat * ); + + // GL_ARB_framebuffer_object + bool support_ARB_framebuffer_object; + bool ARB_framebuffer_object(){ + return support_ARB_framebuffer_object; + } + void ( QGL_DLLEXPORT * m_glBindFramebuffer )( GLenum target, GLuint framebuffer ); + void ( QGL_DLLEXPORT * m_glBindRenderbuffer )( GLenum target, GLuint renderbuffer ); + void ( QGL_DLLEXPORT * m_glBlitFramebuffer )( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter ); + GLenum( QGL_DLLEXPORT * m_glCheckFramebufferStatus )( GLenum target ); + void ( QGL_DLLEXPORT * m_glDeleteFramebuffers )( GLsizei n, const GLuint * framebuffers ); + void ( QGL_DLLEXPORT * m_glDeleteRenderbuffers )( GLsizei n, const GLuint * renderbuffers ); + void ( QGL_DLLEXPORT * m_glFramebufferRenderbuffer )( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer ); + void ( QGL_DLLEXPORT * m_glFramebufferTexture1D )( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level ); + void ( QGL_DLLEXPORT * m_glFramebufferTexture2D )( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level ); + void ( QGL_DLLEXPORT * m_glFramebufferTexture3D )( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer ); + void ( QGL_DLLEXPORT * m_glFramebufferTextureLayer )( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer ); + void ( QGL_DLLEXPORT * m_glGenFramebuffers )( GLsizei n, GLuint * framebuffers ); + void ( QGL_DLLEXPORT * m_glGenRenderbuffers )( GLsizei n, GLuint * renderbuffers ); + void ( QGL_DLLEXPORT * m_glGenerateMipmap )( GLenum target ); + void ( QGL_DLLEXPORT * m_glGetFramebufferAttachmentParameteriv )( GLenum target, GLenum attachment, GLenum pname, GLint * params ); + void ( QGL_DLLEXPORT * m_glGetRenderbufferParameteriv )( GLenum target, GLenum pname, GLint * params ); + GLboolean( QGL_DLLEXPORT * m_glIsFramebuffer )( GLuint framebuffer ); + GLboolean( QGL_DLLEXPORT * m_glIsRenderbuffer )( GLuint renderbuffer ); + void ( QGL_DLLEXPORT * m_glRenderbufferStorage )( GLenum target, GLenum internalformat, GLsizei width, GLsizei height ); + void ( QGL_DLLEXPORT * m_glRenderbufferStorageMultisample )( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height ); }; #include "modulesystem.h" diff --git a/libs/entitylib.h b/libs/entitylib.h index 2b358dcf..b0c300f9 100644 --- a/libs/entitylib.h +++ b/libs/entitylib.h @@ -675,4 +675,9 @@ namespace std } } +inline bool aabb_fits_view( const AABB& aabb, const Matrix4& viewport, int ratio ){ + //return ( aabb.extents[0] / viewport[0] ) > 0.25f || ( aabb.extents[1] / viewport[5] ) > 0.25f; + return ( viewport[0] + viewport[5] ) / ( aabb.extents[0] + aabb.extents[1] ) < ratio; +} + #endif diff --git a/plugins/entity/doom3group.cpp b/plugins/entity/doom3group.cpp index bdc62b96..a7fcbaaa 100644 --- a/plugins/entity/doom3group.cpp +++ b/plugins/entity/doom3group.cpp @@ -363,7 +363,7 @@ void renderSolid( Renderer& renderer, const VolumeTest& volume, const Matrix4& l renderer.addRenderable( m_curveCatmullRom.m_renderCurve, localToWorld ); } - if ( g_showNames || selected || childSelected ) { + if ( selected || childSelected || ( g_showNames && ( volume.fill() || aabb_fits_view( aabb_for_oriented_aabb( childBounds, volume.GetModelview() ), volume.GetViewport(), g_showNamesRatio ) ) ) ) { // draw models as usual if ( !isModel() ) { // don't draw the name for worldspawn diff --git a/plugins/entity/eclassmodel.cpp b/plugins/entity/eclassmodel.cpp index 7d351c62..6ee57e64 100644 --- a/plugins/entity/eclassmodel.cpp +++ b/plugins/entity/eclassmodel.cpp @@ -242,8 +242,9 @@ void detach( scene::Traversable::Observer* observer ){ } void renderSolid( Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld, bool selected ) const { - if ( selected ) { - m_renderOrigin.render( renderer, volume, localToWorld ); + if ( selected || g_showBboxes ) { + if( selected ) + m_renderOrigin.render( renderer, volume, localToWorld ); renderer.PushState(); renderer.Highlight( Renderer::ePrimitive, false ); @@ -253,7 +254,7 @@ void renderSolid( Renderer& renderer, const VolumeTest& volume, const Matrix4& l renderer.PopState(); } renderer.SetState( m_entity.getEntityClass().m_state_wire, Renderer::eWireframeOnly ); - if ( g_showNames || selected ) { + if ( selected || ( g_showNames && ( volume.fill() || aabb_fits_view( aabb_for_oriented_aabb( m_aabb_local, volume.GetModelview() ), volume.GetViewport(), g_showNamesRatio ) ) ) ) { m_renderName.render( renderer, volume, localToWorld, selected ); } } diff --git a/plugins/entity/entity.cpp b/plugins/entity/entity.cpp index 8cde4297..0053c668 100644 --- a/plugins/entity/entity.cpp +++ b/plugins/entity/entity.cpp @@ -113,7 +113,9 @@ EntityCreator::KeyValueChangedFunc KeyValue::m_entityKeyValueChanged = 0; Counter* EntityKeyValues::m_counter = 0; bool g_showNames = true; +bool g_showBboxes = false; int g_showNamesDist = 512; +int g_showNamesRatio = 64; bool g_showTargetNames = false; bool g_showAngles = true; bool g_lightRadii = true; @@ -267,12 +269,24 @@ void setShowNames( bool showNames ){ bool getShowNames(){ return g_showNames; } +void setShowBboxes( bool showBboxes ){ + g_showBboxes = showBboxes; +} +bool getShowBboxes(){ + return g_showBboxes; +} void setShowNamesDist( int dist ){ g_showNamesDist = dist; } int getShowNamesDist(){ return g_showNamesDist; } +void setShowNamesRatio( int ratio ){ + g_showNamesRatio = ratio; +} +int getShowNamesRatio(){ + return g_showNamesRatio; +} void setShowTargetNames( bool showNames ){ g_showTargetNames = showNames; } @@ -383,7 +397,9 @@ void Entity_Construct( EGameType gameType ){ } GlobalPreferenceSystem().registerPreference( "SI_ShowNames", BoolImportStringCaller( g_showNames ), BoolExportStringCaller( g_showNames ) ); + GlobalPreferenceSystem().registerPreference( "SI_ShowBboxes", BoolImportStringCaller( g_showBboxes ), BoolExportStringCaller( g_showBboxes ) ); GlobalPreferenceSystem().registerPreference( "SI_ShowNamesDist", IntImportStringCaller( g_showNamesDist ), IntExportStringCaller( g_showNamesDist ) ); + GlobalPreferenceSystem().registerPreference( "SI_ShowNamesRatio", IntImportStringCaller( g_showNamesRatio ), IntExportStringCaller( g_showNamesRatio ) ); GlobalPreferenceSystem().registerPreference( "SI_ShowTargetNames", BoolImportStringCaller( g_showTargetNames ), BoolExportStringCaller( g_showTargetNames ) ); GlobalPreferenceSystem().registerPreference( "SI_ShowAngles", BoolImportStringCaller( g_showAngles ), BoolExportStringCaller( g_showAngles ) ); GlobalPreferenceSystem().registerPreference( "LightRadiuses", BoolImportStringCaller( g_lightRadii ), BoolExportStringCaller( g_lightRadii ) ); diff --git a/plugins/entity/entity.h b/plugins/entity/entity.h index 37a1202b..a27e4e86 100644 --- a/plugins/entity/entity.h +++ b/plugins/entity/entity.h @@ -39,7 +39,9 @@ void Entity_Construct( EGameType gameType = eGameTypeQuake3 ); void Entity_Destroy(); extern bool g_showNames; +extern bool g_showBboxes; extern int g_showNamesDist; +extern int g_showNamesRatio; extern bool g_showTargetNames; extern bool g_showAngles; extern bool g_lightRadii; diff --git a/plugins/entity/generic.cpp b/plugins/entity/generic.cpp index e9a838da..2c22d708 100644 --- a/plugins/entity/generic.cpp +++ b/plugins/entity/generic.cpp @@ -227,7 +227,7 @@ void renderWireframe( Renderer& renderer, const VolumeTest& volume, const Matrix renderer.SetState( m_entity.getEntityClass().m_state_wire, Renderer::eWireframeOnly ); renderer.addRenderable( m_aabb_wire, localToWorld ); renderArrow( renderer, volume, localToWorld ); - if ( g_showNames || selected ) { + if ( selected || ( g_showNames && aabb_fits_view( aabb_for_oriented_aabb( m_aabb_local, volume.GetModelview() ), volume.GetViewport(), g_showNamesRatio ) ) ) { m_renderName.render( renderer, volume, localToWorld, selected ); } } diff --git a/plugins/entity/group.cpp b/plugins/entity/group.cpp index 215d7607..97c823b1 100644 --- a/plugins/entity/group.cpp +++ b/plugins/entity/group.cpp @@ -150,7 +150,7 @@ void detach( scene::Traversable::Observer* observer ){ void renderSolid( Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld, bool selected, bool childSelected, const AABB& childBounds ) const { renderer.SetState( m_entity.getEntityClass().m_state_wire, Renderer::eWireframeOnly ); - if ( g_showNames || selected || childSelected ) { + if ( selected || childSelected || ( g_showNames && ( volume.fill() || aabb_fits_view( aabb_for_oriented_aabb( childBounds, volume.GetModelview() ), volume.GetViewport(), g_showNamesRatio ) ) ) ) { // don't draw the name for worldspawn if ( !strcmp( m_entity.getEntityClass().name(), "worldspawn" ) ) { return; diff --git a/plugins/entity/light.cpp b/plugins/entity/light.cpp index b0623208..988b20fa 100644 --- a/plugins/entity/light.cpp +++ b/plugins/entity/light.cpp @@ -1460,7 +1460,7 @@ void renderSolid( Renderer& renderer, const VolumeTest& volume, const Matrix4& l } } - if ( ( g_showNames || selected ) && !string_equal( m_named.name(), "light" ) ) { + if ( ( selected || ( g_showNames && ( volume.fill() || aabb_fits_view( aabb_for_oriented_aabb( m_aabb_light, volume.GetModelview() ), volume.GetViewport(), g_showNamesRatio ) ) ) ) && !string_equal( m_named.name(), "light" ) ) { m_renderName.render( renderer, volume, localToWorld, selected ); } } diff --git a/plugins/entity/miscmodel.cpp b/plugins/entity/miscmodel.cpp index 460c579a..06949bab 100644 --- a/plugins/entity/miscmodel.cpp +++ b/plugins/entity/miscmodel.cpp @@ -195,7 +195,7 @@ void renderSolid( Renderer& renderer, const VolumeTest& volume, const Matrix4& l m_renderOrigin.render( renderer, volume, localToWorld ); } renderer.SetState( m_entity.getEntityClass().m_state_wire, Renderer::eWireframeOnly ); - if ( ( g_showNames || selected ) && !string_equal( m_named.name(), "misc_model" ) ) { + if ( ( selected || ( g_showNames && ( volume.fill() || aabb_fits_view( aabb_for_oriented_aabb( AABB( Vector3( 0, 0, 0 ), Vector3( 32, 32, 32 ) ), volume.GetModelview() ), volume.GetViewport(), g_showNamesRatio ) ) ) ) && !string_equal( m_named.name(), "misc_model" ) ) { m_renderName.render( renderer, volume, localToWorld, selected ); } } diff --git a/radiant/entity.cpp b/radiant/entity.cpp index 6a098460..6b8e1a23 100644 --- a/radiant/entity.cpp +++ b/radiant/entity.cpp @@ -588,11 +588,28 @@ void ShowNamesDistExport( EntityCreator& self, const IntImportCallback& importer } typedef ReferenceCaller1 ShowNamesDistExportCaller; + +void ShowNamesRatioImport( EntityCreator& self, int value ){ + self.setShowNamesRatio( value ); + UpdateAllWindows(); +} +typedef ReferenceCaller1 ShowNamesRatioImportCaller; + +void ShowNamesRatioExport( EntityCreator& self, const IntImportCallback& importer ){ + importer( self.getShowNamesRatio() ); +} +typedef ReferenceCaller1 ShowNamesRatioExportCaller; + + void Entity_constructPreferences( PreferencesPage& page ){ - page.appendSpinner( "Names Display Distance", 512.0, 0.0, 200500.0, + page.appendSpinner( "Names Display Distance (3D)", 512.0, 0.0, 200500.0, IntImportCallback( ShowNamesDistImportCaller( GlobalEntityCreator() ) ), IntExportCallback( ShowNamesDistExportCaller( GlobalEntityCreator() ) ) ); + page.appendSpinner( "Names Display Ratio (2D)", 64.0, 0.0, 100500.0, + IntImportCallback( ShowNamesRatioImportCaller( GlobalEntityCreator() ) ), + IntExportCallback( ShowNamesRatioExportCaller( GlobalEntityCreator() ) ) + ); } void Entity_constructPage( PreferenceGroup& group ){ PreferencesPage page( group.createPage( "Entities", "Entity Display Preferences" ) ); diff --git a/radiant/mainframe.cpp b/radiant/mainframe.cpp index 1eb7a80e..4ec23d11 100644 --- a/radiant/mainframe.cpp +++ b/radiant/mainframe.cpp @@ -2038,6 +2038,7 @@ GtkMenuItem* create_view_menu( MainFrame::EViewStyle style ){ create_check_menu_item_with_mnemonic( menu_in_menu, "Show Entity _Names", "ShowNames" ); create_check_menu_item_with_mnemonic( menu_in_menu, "Entity Names = Targetnames", "ShowTargetNames" ); create_check_menu_item_with_mnemonic( menu_in_menu, "Show Light Radiuses", "ShowLightRadiuses" ); + create_check_menu_item_with_mnemonic( menu_in_menu, "Show Entity Boxes", "ShowBboxes" ); menu_separator( menu_in_menu ); diff --git a/radiant/qgl.cpp b/radiant/qgl.cpp index 2e44768c..7f030a81 100644 --- a/radiant/qgl.cpp +++ b/radiant/qgl.cpp @@ -1453,6 +1453,39 @@ void QGL_sharedContextCreated( OpenGLBinding& table ){ globalOutputStream() << "No Anisotropic filtering available\n"; g_maxTextureAnisotropy = 0; } + + + if ( QGL_ExtensionSupported( "GL_ARB_framebuffer_object" ) ) { + table.support_ARB_framebuffer_object = + QGL_constructExtensionFunc( table.m_glBindFramebuffer, "glBindFramebuffer" ) + && QGL_constructExtensionFunc( table.m_glBindRenderbuffer, "glBindRenderbuffer" ) + && QGL_constructExtensionFunc( table.m_glBlitFramebuffer, "glBlitFramebuffer" ) + && QGL_constructExtensionFunc( table.m_glCheckFramebufferStatus, "glCheckFramebufferStatus" ) + && QGL_constructExtensionFunc( table.m_glDeleteFramebuffers, "glDeleteFramebuffers" ) + && QGL_constructExtensionFunc( table.m_glDeleteRenderbuffers, "glDeleteRenderbuffers" ) + && QGL_constructExtensionFunc( table.m_glFramebufferRenderbuffer, "glFramebufferRenderbuffer" ) + && QGL_constructExtensionFunc( table.m_glFramebufferTexture1D, "glFramebufferTexture1D" ) + && QGL_constructExtensionFunc( table.m_glFramebufferTexture2D, "glFramebufferTexture2D" ) + && QGL_constructExtensionFunc( table.m_glFramebufferTexture3D, "glFramebufferTexture3D" ) + && QGL_constructExtensionFunc( table.m_glFramebufferTextureLayer, "glFramebufferTextureLayer" ) + && QGL_constructExtensionFunc( table.m_glGenFramebuffers, "glGenFramebuffers" ) + && QGL_constructExtensionFunc( table.m_glGenRenderbuffers, "glGenRenderbuffers" ) + && QGL_constructExtensionFunc( table.m_glGenerateMipmap, "glGenerateMipmap" ) + && QGL_constructExtensionFunc( table.m_glGetFramebufferAttachmentParameteriv, "glGetFramebufferAttachmentParameteriv" ) + && QGL_constructExtensionFunc( table.m_glGetRenderbufferParameteriv, "glGetRenderbufferParameteriv" ) + && QGL_constructExtensionFunc( table.m_glIsFramebuffer, "glIsFramebuffer" ) + && QGL_constructExtensionFunc( table.m_glIsRenderbuffer, "glIsRenderbuffer" ) + && QGL_constructExtensionFunc( table.m_glRenderbufferStorage, "glRenderbufferStorage" ) + && QGL_constructExtensionFunc( table.m_glRenderbufferStorageMultisample, "glRenderbufferStorageMultisample" ); + + if ( !table.support_ARB_framebuffer_object ) { + extension_not_implemented( "GL_ARB_framebuffer_object" ); + } + } + else + { + table.support_ARB_framebuffer_object = false; + } } void QGL_sharedContextDestroyed( OpenGLBinding& table ){ diff --git a/radiant/xywindow.cpp b/radiant/xywindow.cpp index 23b9ca25..6cd80183 100644 --- a/radiant/xywindow.cpp +++ b/radiant/xywindow.cpp @@ -3041,6 +3041,18 @@ void ShowNamesToggle(){ UpdateAllWindows(); } +void ShowBboxesExport( const BoolImportCallback& importer ){ + importer( GlobalEntityCreator().getShowBboxes() ); +} +typedef FreeCaller1 ShowBboxesExportCaller; +ShowBboxesExportCaller g_show_bboxes_caller; +ToggleItem g_show_bboxes( g_show_bboxes_caller ); +void ShowBboxesToggle(){ + GlobalEntityCreator().setShowBboxes( !GlobalEntityCreator().getShowBboxes() ); + g_show_bboxes.update(); + UpdateAllWindows(); +} + void ShowTargetNamesExport( const BoolImportCallback& importer ){ importer( GlobalEntityCreator().getShowTargetNames() ); } @@ -3164,6 +3176,7 @@ void XYShow_registerCommands(){ GlobalToggles_insert( "ShowAngles", FreeCaller(), ToggleItem::AddCallbackCaller( g_show_angles ) ); GlobalToggles_insert( "ShowNames", FreeCaller(), ToggleItem::AddCallbackCaller( g_show_names ) ); + GlobalToggles_insert( "ShowBboxes", FreeCaller(), ToggleItem::AddCallbackCaller( g_show_bboxes ) ); GlobalToggles_insert( "ShowTargetNames", FreeCaller(), ToggleItem::AddCallbackCaller( g_show_targetnames ) ); GlobalToggles_insert( "ShowBlocks", FreeCaller(), ToggleItem::AddCallbackCaller( g_show_blocks ) ); GlobalToggles_insert( "ShowCoordinates", FreeCaller(), ToggleItem::AddCallbackCaller( g_show_coordinates ) );