Add overlay positions in the center of viewport edges, move PAUSE and LOADING... overlays to the top center.

PiperOrigin-RevId: 570054949
Change-Id: If0046df382e67ad3a48e7138a75e9e200c0626b9
This commit is contained in:
Yuval Tassa
2023-10-02 07:03:58 -07:00
committed by Copybara-Service
parent 639e77876d
commit 177aec68dc
6 changed files with 49 additions and 16 deletions
+5 -1
View File
@@ -1338,7 +1338,11 @@ typedef enum mjtGridPos_ { // grid position for overlay
mjGRID_TOPLEFT = 0, // top left mjGRID_TOPLEFT = 0, // top left
mjGRID_TOPRIGHT, // top right mjGRID_TOPRIGHT, // top right
mjGRID_BOTTOMLEFT, // bottom left mjGRID_BOTTOMLEFT, // bottom left
mjGRID_BOTTOMRIGHT // bottom right mjGRID_BOTTOMRIGHT, // bottom right
mjGRID_TOP, // top center
mjGRID_BOTTOM, // bottom center
mjGRID_LEFT, // left center
mjGRID_RIGHT // right center
} mjtGridPos; } mjtGridPos;
typedef enum mjtFramebuffer_ { // OpenGL framebuffer option typedef enum mjtFramebuffer_ { // OpenGL framebuffer option
mjFB_WINDOW = 0, // default/window buffer mjFB_WINDOW = 0, // default/window buffer
+5 -1
View File
@@ -30,7 +30,11 @@ typedef enum mjtGridPos_ { // grid position for overlay
mjGRID_TOPLEFT = 0, // top left mjGRID_TOPLEFT = 0, // top left
mjGRID_TOPRIGHT, // top right mjGRID_TOPRIGHT, // top right
mjGRID_BOTTOMLEFT, // bottom left mjGRID_BOTTOMLEFT, // bottom left
mjGRID_BOTTOMRIGHT // bottom right mjGRID_BOTTOMRIGHT, // bottom right
mjGRID_TOP, // top center
mjGRID_BOTTOM, // bottom center
mjGRID_LEFT, // left center
mjGRID_RIGHT // right center
} mjtGridPos; } mjtGridPos;
+4
View File
@@ -610,6 +610,10 @@ ENUMS: Mapping[str, EnumDecl] = dict([
('mjGRID_TOPRIGHT', 1), ('mjGRID_TOPRIGHT', 1),
('mjGRID_BOTTOMLEFT', 2), ('mjGRID_BOTTOMLEFT', 2),
('mjGRID_BOTTOMRIGHT', 3), ('mjGRID_BOTTOMRIGHT', 3),
('mjGRID_TOP', 4),
('mjGRID_BOTTOM', 5),
('mjGRID_LEFT', 6),
('mjGRID_RIGHT', 7),
]), ]),
)), )),
('mjtFramebuffer', ('mjtFramebuffer',
+11 -14
View File
@@ -2185,7 +2185,7 @@ void Simulate::Render() {
// label // label
if (this->loadrequest) { if (this->loadrequest) {
mjr_overlay(mjFONT_BIG, mjGRID_TOPLEFT, smallrect, "loading", nullptr, mjr_overlay(mjFONT_BIG, mjGRID_TOP, smallrect, "LOADING...", nullptr,
&this->platform_ui->mjr_context()); &this->platform_ui->mjr_context());
} else { } else {
char intro_message[Simulate::kMaxFilenameLength]; char intro_message[Simulate::kMaxFilenameLength];
@@ -2283,10 +2283,11 @@ void Simulate::Render() {
&this->platform_ui->mjr_context()); &this->platform_ui->mjr_context());
} }
// make pause/loading label // show pause/loading label
std::string pauseloadlabel;
if (!this->run || this->loadrequest) { if (!this->run || this->loadrequest) {
pauseloadlabel = this->loadrequest ? "loading" : "pause"; const char* label = this->loadrequest ? "LOADING..." : "PAUSE";
mjr_overlay(mjFONT_BIG, mjGRID_TOP, smallrect, label, nullptr,
&this->platform_ui->mjr_context());
} }
// get desired and actual percent-of-real-time // get desired and actual percent-of-real-time
@@ -2301,22 +2302,18 @@ void Simulate::Render() {
char rtlabel[30] = {'\0'}; char rtlabel[30] = {'\0'};
if (desiredRealtime != 100.0 || misaligned) { if (desiredRealtime != 100.0 || misaligned) {
// print desired realtime // print desired realtime
int labelsize = std::snprintf(rtlabel, int labelsize = std::snprintf(rtlabel, sizeof(rtlabel), "%g%%", desiredRealtime);
sizeof(rtlabel), "%g%%", desiredRealtime);
// if misaligned, append to label // if misaligned, append to label
if (misaligned) { if (misaligned) {
std::snprintf(rtlabel+labelsize, std::snprintf(rtlabel+labelsize, sizeof(rtlabel)-labelsize, " (%-4.1f%%)", actualRealtime);
sizeof(rtlabel)-labelsize, " (%-4.1f%%)", actualRealtime);
} }
} }
// draw top left overlay // show real-time overlay
if (!pauseloadlabel.empty() || rtlabel[0]) { if (rtlabel[0]) {
std::string newline = !pauseloadlabel.empty() && rtlabel[0] ? "\n" : ""; mjr_overlay(mjFONT_BIG, mjGRID_TOPLEFT, smallrect, rtlabel, nullptr,
std::string topleftlabel = rtlabel + newline + pauseloadlabel; &this->platform_ui->mjr_context());
mjr_overlay(mjFONT_BIG, mjGRID_TOPLEFT, smallrect,
topleftlabel.c_str(), nullptr, &this->platform_ui->mjr_context());
} }
// show ui 0 // show ui 0
+20
View File
@@ -479,6 +479,26 @@ static int draw_overlay(int font, mjrRect viewport, int skip, int gridpos,
case mjGRID_BOTTOMRIGHT: case mjGRID_BOTTOMRIGHT:
glViewport(viewport.left+viewport.width-skip-1-PAD-W, glViewport(viewport.left+viewport.width-skip-1-PAD-W,
viewport.bottom+PAD, W, H); viewport.bottom+PAD, W, H);
break;
case mjGRID_TOP:
glViewport(viewport.left+(viewport.width-skip-W)/2-1-PAD,
viewport.bottom+viewport.height-1-PAD-H, W, H);
break;
case mjGRID_BOTTOM:
glViewport(viewport.left+(viewport.width-skip-W)/2-1-PAD,
viewport.bottom+PAD, W, H);
break;
case mjGRID_LEFT:
glViewport(viewport.left+skip+PAD,
viewport.bottom+(viewport.height-H)/2-1-PAD, W, H);
break;
case mjGRID_RIGHT:
glViewport(viewport.left+viewport.width-skip-1-PAD-W,
viewport.bottom+(viewport.height-H)/2-1-PAD, W, H);
} }
// set projection in pixels // set projection in pixels
+4
View File
@@ -384,6 +384,10 @@ public enum mjtGridPos : int{
mjGRID_TOPRIGHT = 1, mjGRID_TOPRIGHT = 1,
mjGRID_BOTTOMLEFT = 2, mjGRID_BOTTOMLEFT = 2,
mjGRID_BOTTOMRIGHT = 3, mjGRID_BOTTOMRIGHT = 3,
mjGRID_TOP = 4,
mjGRID_BOTTOM = 5,
mjGRID_LEFT = 6,
mjGRID_RIGHT = 7,
} }
public enum mjtFramebuffer : int{ public enum mjtFramebuffer : int{
mjFB_WINDOW = 0, mjFB_WINDOW = 0,