Skip to content

Commit

Permalink
Lua api for toggling Render types, features and info display
Browse files Browse the repository at this point in the history
  • Loading branch information
maxim-productengine committed Jan 4, 2025
1 parent 86f0bb6 commit f4ff498
Show file tree
Hide file tree
Showing 5 changed files with 288 additions and 286 deletions.
119 changes: 82 additions & 37 deletions indra/newview/llpipelinelistener.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,14 @@

namespace {
// Render Types
void toggle_render_types_wrapper(LLSD const& request)
void get_render_types(LLSD const& request)
{
LLEventAPI::Response response(llsd::map("types", get_render_types_list()), request);
}

void toggle_render_types(LLSD const& request)
{
LLEventAPI::Response response(LLSD(), request);
for (LLSD::array_const_iterator iter = request["types"].beginArray();
iter != request["types"].endArray();
++iter)
Expand All @@ -50,10 +56,14 @@ namespace {
{
LLPipeline::toggleRenderTypeControl( render_type );
}
else
{
response.error(stringize("unknown type ", std::quoted(iter->asString())));
}
}
}

void has_render_type_wrapper(LLSD const& request)
void has_render_type(LLSD const& request)
{
LLEventAPI::Response response(LLSD(), request);
U32 render_type = render_type_from_string( request["type"].asString() );
Expand All @@ -63,36 +73,46 @@ namespace {
}
else
{
response.error(STRINGIZE("unknown type '" << request["type"].asString() << "'"));
response.error(stringize("unknown type ", std::quoted(request["type"].asString())));
}
}

void disable_all_render_types_wrapper(LLSD const& request)
void disable_all_render_types(LLSD const& request)
{
gPipeline.clearAllRenderTypes();
}

void enable_all_render_types_wrapper(LLSD const& request)
void enable_all_render_types(LLSD const& request)
{
gPipeline.setAllRenderTypes();
}

// Render Features
void toggle_render_features_wrapper(LLSD const& request)
void get_render_features(LLSD const& request)
{
LLEventAPI::Response response(llsd::map("types", get_render_features_list()), request);
}

void toggle_render_features(LLSD const& request)
{
LLEventAPI::Response response(LLSD(), request);
for (LLSD::array_const_iterator iter = request["features"].beginArray();
iter != request["features"].endArray();
++iter)
{
U32 render_feature = feature_from_string( iter->asString() );
if ( render_feature != 0 )
{
LLPipeline::toggleRenderDebugFeatureControl( render_feature );
LLPipeline::toggleRenderDebugFeature(render_feature);
}
else
{
response.error(stringize("unknown feature ", std::quoted(iter->asString())));
}
}
}

void has_render_feature_wrapper(LLSD const& request)
void has_render_feature(LLSD const& request)
{
LLEventAPI::Response response(LLSD(), request);
U32 render_feature = feature_from_string( request["feature"].asString() );
Expand All @@ -102,23 +122,29 @@ namespace {
}
else
{
response.error(STRINGIZE("unknown feature '" << request["feature"].asString() << "'"));
response.error(stringize("unknown feature ", std::quoted(request["feature"].asString())));
}
}

void disable_all_render_features_wrapper(LLSD const& request)
void disable_all_render_features(LLSD const& request)
{
gPipeline.clearAllRenderDebugFeatures();
}

void enable_all_render_features_wrapper(LLSD const& request)
void enable_all_render_features(LLSD const& request)
{
gPipeline.setAllRenderDebugFeatures();
}

// Render Info Displays
void toggle_info_displays_wrapper(LLSD const& request)
void get_render_info_displays(LLSD const& request)
{
LLEventAPI::Response response(llsd::map("displays", get_info_display_list()), request);
}

void toggle_info_displays(LLSD const& request)
{
LLEventAPI::Response response(LLSD(), request);
for (LLSD::array_const_iterator iter = request["displays"].beginArray();
iter != request["displays"].endArray();
++iter)
Expand All @@ -128,10 +154,14 @@ namespace {
{
LLPipeline::toggleRenderDebug( info_display );
}
else
{
response.error(stringize("unknown display ", std::quoted(iter->asString())));
}
}
}

void has_info_display_wrapper(LLSD const& request)
void has_info_display(LLSD const& request)
{
LLEventAPI::Response response(LLSD(), request);
U64 info_display = info_display_from_string( request["display"].asString() );
Expand All @@ -141,16 +171,16 @@ namespace {
}
else
{
response.error(STRINGIZE("unknown display '" << request["display"].asString() << "'"));
response.error(stringize("unknown display ", std::quoted(request["display"].asString())));
}
}

void disable_all_info_displays_wrapper(LLSD const& request)
void disable_all_info_displays(LLSD const& request)
{
gPipeline.clearAllRenderDebugDisplays();
}

void enable_all_info_displays_wrapper(LLSD const& request)
void enable_all_info_displays(LLSD const& request)
{
gPipeline.setAllRenderDebugDisplays();
}
Expand All @@ -163,54 +193,69 @@ LLPipelineListener::LLPipelineListener():
"API to te rendering pipeline.")
{
// Render Types
add("getRenderTypes",
"Return a table with the list of available render types",
&get_render_types,
llsd::map("reply", LLSD()));
add("toggleRenderTypes",
"Toggle rendering [\"types\"]:\n"
"See: llviewermenu.cpp:render_type_from_string for list of available types.",
&toggle_render_types_wrapper);
"use getRenderTypes() to get a list of available types.",
&toggle_render_types,
llsd::map("reply", LLSD(), "types", LLSD()));
add("hasRenderType",
"Check if rendering [\"type\"] is enabled:\n"
"See: llviewermenu.cpp:render_type_from_string for list of available types.",
&has_render_type_wrapper,
LLSDMap("reply", LLSD()));
"use getRenderTypes() to get a list of available types.",
&has_render_type,
llsd::map("reply", LLSD()));
add("disableAllRenderTypes",
"Turn off all rendering types.",
&disable_all_render_types_wrapper);
&disable_all_render_types);
add("enableAllRenderTypes",
"Turn on all rendering types.",
&enable_all_render_types_wrapper);
&enable_all_render_types);

// Render Features
add("getRenderFeatures",
"Return a table with the list of available render features",
&get_render_features,
llsd::map("reply", LLSD()));
add("toggleRenderFeatures",
"Toggle rendering [\"features\"]:\n"
"See: llviewermenu.cpp:feature_from_string for list of available features.",
&toggle_render_features_wrapper);
"use getRenderFeatures() to get a list of available features.",
&toggle_render_features,
llsd::map("reply", LLSD(), "features", LLSD()));
add("hasRenderFeature",
"Check if rendering [\"feature\"] is enabled:\n"
"See: llviewermenu.cpp:render_feature_from_string for list of available features.",
&has_render_feature_wrapper,
LLSDMap("reply", LLSD()));
"use getRenderFeatures() to get a list of available features.",
&has_render_feature,
llsd::map("reply", LLSD()));
add("disableAllRenderFeatures",
"Turn off all rendering features.",
&disable_all_render_features_wrapper);
&disable_all_render_features);
add("enableAllRenderFeatures",
"Turn on all rendering features.",
&enable_all_render_features_wrapper);
&enable_all_render_features);

// Render Info Displays
add("getRenderInfoDisplays",
"Return a table with the list of available render info displays",
&get_render_info_displays,
llsd::map("reply", LLSD()));
add("toggleRenderInfoDisplays",
"Toggle info [\"displays\"]:\n"
"See: llviewermenu.cpp:info_display_from_string for list of available displays.",
&toggle_info_displays_wrapper);
"use getRenderInfoDisplays() to get a list of available displays.",
&toggle_info_displays,
llsd::map("reply", LLSD(), "displays", LLSD()));
add("hasRenderInfoDisplay",
"Check if info [\"display\"] is enabled:\n"
"See: llviewermenu.cpp:info_display_from_string for list of available displays.",
&has_info_display_wrapper,
LLSDMap("reply", LLSD()));
"use getRenderInfoDisplays() to get a list of available displays.",
&has_info_display,
llsd::map("reply", LLSD()));
add("disableAllRenderInfoDisplays",
"Turn off all info displays.",
&disable_all_info_displays_wrapper);
&disable_all_info_displays);
add("enableAllRenderInfoDisplays",
"Turn on all info displays.",
&enable_all_info_displays_wrapper);
&enable_all_info_displays);
}

Loading

1 comment on commit f4ff498

@nat-goodspeed
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for this!

I'm a little nervous about using string_view for map keys, but of course it works as long as the key values are all string literals.

Overall I like the cleanup a lot.

Please sign in to comment.