diff --git a/include/ifilter.h b/include/ifilter.h index 4fad9c4e..35071076 100644 --- a/include/ifilter.h +++ b/include/ifilter.h @@ -48,6 +48,7 @@ enum EXCLUDE_DECALS = 0x00100000, EXCLUDE_FUNC_GROUPS = 0x00200000, EXCLUDE_POINT_ENT = 0x00400000, + EXCLUDE_SKY = 0x00800000, }; class Filter diff --git a/include/ishaders.h b/include/ishaders.h index 1a0cd252..7ab5ac43 100644 --- a/include/ishaders.h +++ b/include/ishaders.h @@ -37,6 +37,7 @@ enum QER_AREAPORTAL = 1 << 8, QER_CLIP = 1 << 9, QER_BOTCLIP = 1 << 10, + QER_SKY = 1 << 11, }; struct qtexture_t; diff --git a/plugins/shaders/shaders.cpp b/plugins/shaders/shaders.cpp index c1f00bc1..b9ddc65a 100644 --- a/plugins/shaders/shaders.cpp +++ b/plugins/shaders/shaders.cpp @@ -1245,6 +1245,8 @@ bool ShaderTemplate::parseQuake3( Tokeniser& tokeniser ){ if( !string_equal( sky, "-" ) ){ m_skyBox = sky; } + + m_nFlags |= QER_SKY; } else if ( string_equal_nocase( token, "cull" ) ) { const char* cull = tokeniser.getToken(); diff --git a/radiant/brushmanip.cpp b/radiant/brushmanip.cpp index 48d26255..29a59ea3 100644 --- a/radiant/brushmanip.cpp +++ b/radiant/brushmanip.cpp @@ -1196,6 +1196,9 @@ filter_brush_all_faces g_filter_brush_detail( &g_filter_face_detail ); filter_face_shader_prefix g_filter_face_decals( "textures/decals/" ); filter_brush_any_face g_filter_brush_decals( &g_filter_face_decals ); +filter_face_flags g_filter_face_sky( QER_SKY ); +filter_brush_any_face g_filter_brush_sky( &g_filter_face_sky ); + void BrushFilters_construct(){ add_brush_filter( g_filter_brush_clip, EXCLUDE_CLIP ); @@ -1227,6 +1230,7 @@ void BrushFilters_construct(){ add_brush_filter( g_filter_brush_liquids_q1, EXCLUDE_LIQUIDS ); add_brush_filter( g_filter_brush_lightgrid, EXCLUDE_LIGHTGRID ); add_brush_filter( g_filter_brush_decals, EXCLUDE_DECALS ); + add_brush_filter( g_filter_brush_sky, EXCLUDE_SKY ); } #if 0 diff --git a/radiant/filterbar.cpp b/radiant/filterbar.cpp index 86f5321c..79a3d855 100644 --- a/radiant/filterbar.cpp +++ b/radiant/filterbar.cpp @@ -152,6 +152,8 @@ GtkToolbar* create_filter_toolbar(){ button = toolbar_append_toggle_button( toolbar, "HintsSkips (CTRL + H)\nRightClick: toggle tex\n\thint\n\thintLocal\n\thintSkip", "f-hint.png", "FilterHintsSkips" ); g_commonFuncs.emplace_back( button, std::vector{ "hint", "hintlocal", "hintskip" } ); + button = toolbar_append_toggle_button( toolbar, "Sky", "f-sky.png", "FilterSky" ); + //toolbar_append_toggle_button( toolbar, "Paths (ALT + 8)", "texture_lock.png", "FilterPaths" ); toolbar_append_space( toolbar ); toolbar_append_toggle_button( toolbar, "Entities (ALT + 2)", "f-entities.png", "FilterEntities" ); diff --git a/radiant/filters.cpp b/radiant/filters.cpp index 1473d838..b9bbf6b4 100644 --- a/radiant/filters.cpp +++ b/radiant/filters.cpp @@ -207,6 +207,7 @@ void Filters_constructMenu( GtkMenu* menu_in_menu ){ } create_check_menu_item_with_mnemonic( menu_in_menu, "FuncGroups", "FilterFuncGroups" ); create_check_menu_item_with_mnemonic( menu_in_menu, "Point Entities", "FilterPointEntities" ); + create_check_menu_item_with_mnemonic( menu_in_menu, "Sky", "FilterSky" ); // filter manipulation menu_separator( menu_in_menu ); create_menu_item_with_mnemonic( menu_in_menu, "Invert filters", "InvertFilters" ); @@ -256,6 +257,7 @@ void ConstructFilters(){ } add_filter_command( EXCLUDE_FUNC_GROUPS, "FilterFuncGroups", accelerator_null() ); add_filter_command( EXCLUDE_POINT_ENT, "FilterPointEntities", accelerator_null() ); + add_filter_command( EXCLUDE_SKY, "FilterSky", accelerator_null() ); PerformFiltering(); } diff --git a/setup/data/tools/bitmaps/f-sky.png b/setup/data/tools/bitmaps/f-sky.png new file mode 100644 index 00000000..fe6a9970 Binary files /dev/null and b/setup/data/tools/bitmaps/f-sky.png differ