diff --git a/doc/includes/references.h b/doc/includes/references.h index c0d5de37..14ce8845 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -1303,6 +1303,9 @@ struct mjrContext_ { // custom OpenGL context // framebuffer int currentBuffer; // currently active framebuffer: mjFB_WINDOW or mjFB_OFFSCREEN + + // pixel output format + int readPixelFormat; // default color pixel format for mjr_readPixels }; typedef struct mjrContext_ mjrContext; typedef enum mjtButton_ { // mouse button diff --git a/include/mujoco/mjrender.h b/include/mujoco/mjrender.h index 8c68f230..2e095d40 100644 --- a/include/mujoco/mjrender.h +++ b/include/mujoco/mjrender.h @@ -149,6 +149,9 @@ struct mjrContext_ { // custom OpenGL context // framebuffer int currentBuffer; // currently active framebuffer: mjFB_WINDOW or mjFB_OFFSCREEN + + // pixel output format + int readPixelFormat; // default color pixel format for mjr_readPixels }; typedef struct mjrContext_ mjrContext; diff --git a/src/render/render_context.c b/src/render/render_context.c index 849137fd..8b763b7f 100644 --- a/src/render/render_context.c +++ b/src/render/render_context.c @@ -1602,6 +1602,9 @@ void mjr_makeContext_offSize(const mjModel* m, mjrContext* con, int fontscale, while ((err = glGetError())) { mju_warning_i("OpenGL error 0x%x in or before mjr_makeContext", err); } + + // set default color pixel format for mjr_readPixels + con->readPixelFormat = GL_RGB; } diff --git a/src/render/render_gl2.c b/src/render/render_gl2.c index 0c252fbc..7ea8f91b 100644 --- a/src/render/render_gl2.c +++ b/src/render/render_gl2.c @@ -153,7 +153,7 @@ void mjr_readPixels(unsigned char* rgb, float* depth, // read rgb and depth if (rgb) { glReadPixels(viewport.left, viewport.bottom, viewport.width, viewport.height, - GL_RGB, GL_UNSIGNED_BYTE, rgb); + con->readPixelFormat, GL_UNSIGNED_BYTE, rgb); } if (depth) { glReadPixels(viewport.left, viewport.bottom, viewport.width, viewport.height, diff --git a/unity/Runtime/Bindings/MjBindings.cs b/unity/Runtime/Bindings/MjBindings.cs index 51f88e24..97f891ab 100644 --- a/unity/Runtime/Bindings/MjBindings.cs +++ b/unity/Runtime/Bindings/MjBindings.cs @@ -2282,6 +2282,7 @@ public unsafe struct mjrContext_ { public int windowStereo; public int windowDoublebuffer; public int currentBuffer; + public int readPixelFormat; } [StructLayout(LayoutKind.Sequential)]