Unigine::Viewport Class
Header: | #include <UnigineViewport.h> |
A Viewport class is used to render a scene with the specified settings.
The main use cases of the Viewport class are as follows:
-
Integrate the engine to a 3rd party renderer (or vice versa) and render the image anywhere (via the render() method): to the external library, App interface, TextureRender interface (a frame buffers abstraction), etc.
-
To render the image to the TextureRender interface, do the following:
// mono rendering // initialization ViewportPtr viewport = Viewport::create(); TextureRenderPtr texturerender = TextureRender::create(); TexturePtr texture = Texture::create(); texture->create2D(512,512,Texture::FORMAT_RGBA8,Texture::USAGE_RENDER); // create 512 x 512 render target CameraPtr camera = Camera::create(); // set modelview & projection matrices to camera instance // rendering texturerender->enable(); texturerender->setColorTexture(0,texture); viewport->render(camera); texturerender->disable();
To render the image to the TextureRender interface in the stereo mode, do the following:
// stereo rendering // initialization ViewportPtr viewport = Viewport::create(); TextureRenderPtr texturerender = TextureRender::create(); TexturePtr left_texture = Texture::create(); TexturePtr right_texture = Texture::create(); // create two 512 x 512 render target for each eye left_texture->create2D(512,512,Texture::FORMAT_RGBA8,Texture::USAGE_RENDER); right_texture->create2D(512,512,Texture::FORMAT_RGBA8,Texture::USAGE_RENDER); CameraPtr left_eye = Camera::create(); CameraPtr right_eye = Camera::create(); // set modelview & projection matrices for each eyes // rendering texturerender->enable(); texturerender->setColorTexture(0,left_texture); texturerender->setColorTexture(0,right_texture); viewport->renderStereo(left_eye,right_eye,"post_stereo_separate"); // use "post_stereo_separate" material in order to render to both textures texturerender->disable();
- To render the image to the App interface, check the App samples (source -> plugins -> App -> App*
App* samples are available only for the Professional and Sim Unigine SDKs.
-
- Render a scene to the image (data will be transfered from GPU memory to CPU memory) or texture (data stays in the GPU memory).
- To render the scene to the Texture interface, use the renderTexture2D(camera,texture) method.
// initialization ViewportPtr viewport = Viewport::create(); TexturePtr texture = Texture::create(); texture->create2D(512,512,Texture::FORMAT_RGBA8,Texture::USAGE_RENDER); // create 512 x 512 render target CameraPtr camera = Camera::create(); // set modelview & projection matrices to camera instance // rendering RenderState *render_state = RenderState::get(); // saving current render state and clearing it render_state->saveState(); render_state->clearStates(); // rendering an image from the camera to the texture viewport->renderTexture2D(camera, texture); // restoring back render state render_state->restoreState();
- To render the scene to the Image interface, use the following methods:
- To render the scene to the Texture interface, use the renderTexture2D(camera,texture) method.
- Render a node to the image (data will be transfered from GPU memory to CPU memory) or texture (data stays in the GPU memory).
- To render the node to the Texture interface, use the renderNodeTexture2D(camera,node,texture) method.
- To render the node to the Image interface, use the following methods:
You can set callbacks before and after any rendering pass using the addCallback() method: thus, getting access to the intermediate state of rendering buffers and matrices. Some of them are read-only, but most of them can be modified ad hoc. The callback can get a Renderer pointer.
Thanks to this feature you can get direct access to G-Buffer, SSAO, lights or any other effect. One more example: you can create a custom post-process and apply it before TAA, thus, getting correct antialiased image as a result. You can even create your own custom light sources, decals, etc. The feature can also be useful for custom sensors view.
Viewport class has different rendering modes: RENDER_DEPTH (depth only), RENDER_DEPTH_GBUFFER (depth + G-buffer), RENDER_DEPTH_GBUFFER_FINAL (depth + G-buffer + final image). This can give you extra performance boost if you need only depth info, for example.
To set any viewport as a main, use the setViewport() method of the Render class.
A single viewport should be used with a single camera, otherwise it may cause visual artefacts. To avoid artefacts, when using several cameras with a single viewport, all post effects must be disabled using the setSkipFlags() method with the SKIP_POSTEFFECTS flag. See the usage example below.
See also
- See the following C++ samples:
- source/samples/Api/Render/GBufferWrite
- source/samples/Api/Render/GBufferRead
- See the following C++/C# usage example:
Viewport Class
Members
static ViewportPtr create()
Creates a new viewport with default settings.void setAspectCorrection(int correction)
Sets the aspect correction for current viewport. 1 enables correction, 0 disables.Arguments
- int correction - 1 to enable aspect correction, 0 to disable.
int getAspectCorrection()
Return the value indicating if the aspect correction enabled for current viewport.Return value
1 if the aspect correction enabled, otherwise 0.int addCallback(int callback, Unigine::CallbackBase * func)
Adds a callback for the specified stage of the rendering sequence. Callback functions can be used to get access to buffers and matrices at intermediate stages of the rendering sequence. Some of them are read-only, but most of them can be modified ad hoc.Callback function must be as follows:void callback_name(Renderer *renderer){
/* .. */
}
Arguments
- int callback - Stage of the rendering sequence for which a callback is to be added. One of the CALLBACK_* variables.The _BEGIN prefix corresponds to the beginning of the rendering pass, _END - to its completion.
- Unigine::CallbackBase * func - Callback pointer.
Return value
Number of the last added callback of the specified type, if the callback was added successsfully; otherwise, -1.void clearCallbacks(int callback)
Clears all added callbacks for the specified stage of the rendering sequence. Callback functions can be used to get access to buffers and matrices at intermediate stages of the rendering sequence. Some of them are read-only, but most of them can be modified ad hoc.Arguments
- int callback - Stage of the rendering sequence for which the callbacks are to be cleared. One of the CALLBACK_* variables.The _BEGIN prefix corresponds to the beginning of the rendering pass, _END - to its completion.
void removeCallback(int callback, int num)
Removes a callback with a given number from the list of callbacks for the specified stage of the rendering sequence. Callback functions can be used to get access to buffers and matrices at intermediate stages of the rendering sequence. Some of them are read-only, but most of them can be modified ad hoc.Arguments
- int callback - Stage of the rendering sequence for which the callback is to be removed. One of the CALLBACK_* variables. The _BEGIN prefix corresponds to the beginning of the rendering pass, _END - to its completion.
- int num - Callback number.
void setFirstFrame(int frame)
Sets a value indicating if the first frame should be enabled over the current frame.Arguments
- int frame - 1 to set the first frame flag; otherwise, 0.
int getFirstFrame()
Returns a value indicating if the first frame is enabled over the current frame.Return value
1 if the first frame flag is set; otherwise, 0.int getID()
Returns the viewport ID.Return value
Viewport ID.void setMode(int mode)
Sets the rendering mode for the current viewport. It can be one of the stereo or panoramic modes or the default mode.Arguments
- int mode - A rendering mode.
int getMode()
Returns the rendering mode set for the current viewport. It can be one of the stereo or panoramic modes or the default mode.Return value
The current rendering mode.void setNodeEnvironmentTextureName(const char * name)
Sets a name for the environment texture.Arguments
- const char * name - A texture name.
void setNodeLightUsage(int usage)
Sets the type of lighting for the render node.Arguments
- int usage - The lighting type. Can be one of the following:
int getNodeLightUsage()
Returns the type of lighting of the render node.Return value
The lighting type. Can be one of the following:int isPanorama180()
Returns a value indicating if a 180-degree panoramic rendering is enabled.Return value
1 if a 180-degree panoramic rendering is enabled; otherwise, 0.int isPanorama360()
Returns a value indicating if a 360-degree panoramic rendering is enabled.Return value
1 if a 360-degree panoramic rendering is enabled; otherwise, 0.void setRenderMode(int mode)
Sets the specified render mode. The mode determines the set buffers to be rendered.Arguments
- int mode - Render mode to set. Can be one of the following:
int getRenderMode()
Returns the current render mode. The mode determines the set buffers to be rendered.Return value
Current render mode. Can be one of the following:void setSkipFlags(int flags)
Sets the skip flag for the current viewport.Arguments
- int flags - A skip flag.
int getSkipFlags()
Returns the skip flag set for the current viewport.Return value
A skip flag.int isStereo()
Returns a value indicating if the stereo rendering is enabled for the current viewport (one of the stereo modes is set).Return value
1 if the stereo rendering is enabled; otherwise, 0.void setStereoDistance(float distance)
Sets the focal distance for stereo rendering (distance in the world space to the point where two views line up, i.e. to the zero parallax plane).Arguments
- float distance - A focal distance in units.
float getStereoDistance()
Returns the focal distance for stereo rendering (distance in the world space to the point where two views line up, i.e. to the zero parallax plane).Return value
A focal distance in units.void setStereoOffset(float offset)
Updates the virtual camera offset (an offset after the perspective projection).Arguments
- float offset - A virtual camera offset in units.
float getStereoOffset()
Returns the virtual camera offset (an offset after the perspective projection).Return value
A virtual camera offset in units.void setStereoRadius(float radius)
Updates the radius for stereo (the half of the separation distance between the cameras (i.e. between eyes)).Arguments
- float radius - A stereo radius in units. If a negative value is provided, 0 will be used instead.
float getStereoRadius()
Returns the current radius for stereo (the half of the separation distance between the cameras (i.e. between eyes)).Return value
Stereo radius in units.void appendSkipFlags(int flags)
Appends specified skip flags to the list of currently used ones.Arguments
- int flags - Skip flags to append.
int checkSkipFlags(int flags)
Returns a value indicating if the specified skip flags are set for the current viewport.Arguments
- int flags - Skip flags to check.
Return value
1 if the skip flags are set; otherwise, 0.void removeSkipFlags(int flags)
Removes specified skip flags from the list of currently used ones.Arguments
- int flags - Skip flags to remove.
void render(const Ptr<Camera> & camera)
Renders an image from the specified camera. This method is used to integrate the engine to a 3rd party renderer.
To render an image from the camera to the TextureRender interface, do the following:
camera = Camera::create();
texturerender->enable();
viewport->render(camera);
texturerender->disable();
Arguments
- const Ptr<Camera> & camera - Camera an image from which should be rendered.
void render(const Ptr<Camera> & camera, int width, int height)
Renders an image of the specified size from the specified camera to the current rendering target.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- int width - Image width, in pixels.
- int height - Image height, in pixels.
void renderImage2D(const Ptr<Camera> & camera, const Ptr<Image> & image)
Renders an image from the camera to the given 2D image.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Ptr<Image> & image - Target 2D image to save the result to.
void renderImage2D(const Ptr<Camera> & camera, const Ptr<Image> & image, int width, int height, int hdr = 0)
Renders an image of the specified size from the camera to the 2D image.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Ptr<Image> & image - Target 2D image to save the result to.
- int width - Image width, in pixels.
- int height - Image height, in pixels.
- int hdr - HDR flag.
void renderImageCube(const Ptr<Camera> & camera, const Ptr<Image> & image, int size, int hdr = 0, int local_space = 0)
Renders the image from the camera to the cube map of the specified size.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Ptr<Image> & image - Target cube map to save the result to.
- int size - Cube map edge size.
- int hdr - HDR flag.
- int local_space - A flag indicating if the camera angle should be used for the cube map rendering.
void renderImageCube(const Ptr<Camera> & camera, const Ptr<Image> & image)
Renders the image from the camera into the cube map.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Ptr<Image> & image - Target cube map to save the result to.
void renderNode(const Ptr<Camera> & camera, const Ptr<Node> & node)
Renders the given node with all children to the current rendering target.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Ptr<Node> & node - Node to be rendered.
void renderNode(const Ptr<Camera> & camera, const Ptr<Node> & node, int width, int height)
Renders the given node with all children to the current rendering target.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Ptr<Node> & node - Node to be rendered.
- int width - Image width, in pixels.
- int height - Image height, in pixels.
void renderNodeImage2D(const Ptr<Camera> & camera, const Ptr<Node> & node, const Ptr<Image> & image, int width, int height, int hdr)
Renders the given node with all children to the 2D image of the specified size.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Ptr<Node> & node - Pointer to the node to be rendered.
- const Ptr<Image> & image - Target 2D image to save the result to.
- int width - Image width, in pixels.
- int height - Image height, in pixels.
- int hdr - HDR flag.
void renderNodeImage2D(const Ptr<Camera> & camera, const Ptr<Node> & node, const Ptr<Image> & image)
Renders the given node with all children to the specified 2D image.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Ptr<Node> & node - Pointer to the node to be rendered.
- const Ptr<Image> & image - Target 2D image to save the result to.
void renderNodeTexture2D(const Ptr<Camera> & camera, const Ptr<Node> & node, const Ptr<Texture> & texture)
Renders the given node with all children to the specified 2D texture.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Ptr<Node> & node - Pointer to the node to be rendered.
- const Ptr<Texture> & texture - Target 2D texture to save the result to.
void renderNodes(const Ptr<Camera> & camera, const Vector< Ptr<Node> > & nodes)
Renders given nodes with all their children to the current rendering target.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Vector< Ptr<Node> > & nodes - List of the nodes to be rendered.
void renderNodes(const Ptr<Camera> & camera, const Vector< Ptr<Node> > & nodes, int width, int height)
Renders given nodes with all their children to the current rendering target of the specified size.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Vector< Ptr<Node> > & nodes - List of the nodes to be rendered.
- int width - Image width, in pixels.
- int height - Image height, in pixels.
void renderNodesImage2D(const Ptr<Camera> & camera, const Vector< Ptr<Node> > & nodes, const Ptr<Image> & image)
Renders given nodes with all their children to the specified 2D image.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Vector< Ptr<Node> > & nodes - List of the nodes to be rendered.
- const Ptr<Image> & image - Target 2D image to save the result to.
void renderNodesImage2D(const Ptr<Camera> & camera, const Vector< Ptr<Node> > & nodes, const Ptr<Image> & image, int width, int height, int hdr)
Renders given nodes with all their children to the 2D image of the specified size.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Vector< Ptr<Node> > & nodes - List of the nodes to be rendered.
- const Ptr<Image> & image - Target 2D image to save the result to.
- int width - Image width, in pixels.
- int height - Image height, in pixels.
- int hdr - HDR flag.
void renderNodesTexture2D(const Ptr<Camera> & camera, const Vector< Ptr<Node> > & nodes, const Ptr<Texture> & texture)
Renders given nodes with all their children to the specified 2D texture.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Vector< Ptr<Node> > & nodes - List of the nodes to be rendered.
- const Ptr<Texture> & texture - Target 2D texture to save the result to.
void renderStereo(const Ptr<Camera> & camera_left, const Ptr<Camera> & camera_right, const char * stereo_material)
Renders a stereo image in the current viewport.Arguments
- const Ptr<Camera> & camera_left - Camera that renders an image for the left eye.
- const Ptr<Camera> & camera_right - Camera that renders an image for the right eye.
- const char * stereo_material - List of names of stereo materials to be used.
void renderTexture2D(const Ptr<Camera> & camera, const Ptr<Texture> & texture)
Renders an image from the camera to the specified 2D texture.Arguments
- const Ptr<Camera> & camera - Camera, an image from which should be rendered.
- const Ptr<Texture> & texture - Target 2D texture to save the result to.