MFrameContext provides access to information for the current render frame. The information available is independent of the device state and hence is available outside of draw time.
This interface is generally available to all Viewport 2.0 interfaces. This includes access from within any interfaces that are using MUIDrawManager to draw transient UI (such as tools and manipulators).
One important advantage of using MFrameContext (and MDrawContext) is that the state is cached to avoiding recomputation. Data queries, in general, do not access the GPU device, which helps to avoid expensive pipeline stalls. For example, a plug-in may make a call to get the model view and projection matrices in OpenGL:
float tmp; glGetFloatv(GL_MODELVIEW_MATRIX, &tmp); glGetFloatv(GL_PROJECTION_MATRIX, &tmp);
Another notable piece of available device information is the current color and depth targets (buffers) being used. This information can change on a per pass basis if multi-pass rendering is being performed. This pass information is only available at draw time and hence via the MDrawContext interface.
In addition to device state, various display mode information is available, such as: whether Maya is drawing in wireframe versus shaded mode, the current lighting mode, and global render settings (such as the current transparency algorithm being used). Even though this information is available at the per frame level, it would generally be accessed for self drawing interfaces that require an MDrawContext.
MDrawContext is almost solely geared towards interfaces that draw themselves and attempt to integrate with Maya by using the state to render in accordance with the internal renderer state. This includes MPxShaderOverride and MPxDrawOverride and MUserRenderOperations used for MRenderOverrides.
Additional semantic information is provided in the form of a “pass context” (MPassContext). Currently an identifier for a pass and a list of semantics can be queried. The pass identifier can be internally generated, or specified by a render loop override. See for more information.
Items in the semantic list provide a progressively refined set of information as to the state or location within a pipeline. (The first element provides the broadest description and additional elements provide additional details about the previous element.) Some examples include:
Additional render target functionality is available at draw time, including the ability to make copies of the current color and depth targets, as well as access to specific textures used for certain passes. For example, the textures used for depth peeling are available.
The plug-in writer can decide on how integrated the plug-in should be with the active options enabled by Maya for rendering. The frame and draw context interfaces (MFrameContext and MDrawContext) allow for access to draw time “context” to determine any additional code required.
For example, to handle the display style returned by MFrameContext::getDisplayStyle():
Features such as hardware fog can also be supported via shader adjustments based on the information returned from MFrameContext::getHwFogParameters().
Occasionally, shaders require access to the current color and/or depth render targets in order to bind as shader inputs. The methods MDrawContext::copyCurrentColorRenderTargetToTexture() and MDrawContext::copyCurrentDepthRenderTargetToTexture() are suitable for such applications.