AudioAsset
Ease
FastString
FontAsset
NineSlice
PackedSprite
PackedSpriteID
RB
   HardwareSettings
   IRetroBlitGame
RBAsset
Rect2i
ShaderAsset
SoundReference
SpriteGrid
SpriteSheetAsset
TMXMapAsset
   TMXLayer
   TMXLayerLoadState
   TMXObject
   TMXObjectGroup
   TMXProperties
Vector2i

RB.Offscreen

Method  -  Static

public static void Offscreen(SpriteSheetAsset spriteSheet)

Parameters

spriteSheet SpriteSheetAsset SpriteSheet to switch to

Returns

Nothing.

Description

Switch rendering target to a sprite sheet given by spriteSheetIndex. All rendering that follows will be done on the sprite sheet until end of frame, or until RB.Offscreen or RB.Onscreen is called.

The target sprite sheet could be any sprite sheet, including one loaded from an image, a sprite pack, or a blank sprite sheet.

The results can then be copied to the display by targeting the display again with RB.Onscreen, and copying from the previously targeted sprite sheet with RB.DrawCopy.

This is a very powerful feature of RetroBlit, it can be used for numerous effects, and mixed with custom shaders.

Example

SpriteSheetAsset  offscreenSurfaceA = new SpriteSheetAsset();
SpriteSheetAsset offscreenSurfaceB = new SpriteSheetAsset();

ShaderAsset shaderWater = new ShaderAsset();

const int LAYER_TERRAIN = 0;
const int LAYER_WATER_MASK = 0;

void Initialize() {
    // Create two blank sprite sheets the same size as the display
    offscreenSurfaceA.Create(RB.DisplaySize);
    offscreenSurfaceB.Create(RB.DisplaySize);

    // Load terrain, and setup shader
    // -- snip --
}

void Render() {
    // Draw terrain into offscreen A
    RB.Offscreen(offscreenSurfaceA);
    RB.DrawMapLayer(LAYER_TERRAIN);

    // Draw a water mask into offscreen B
    RB.Offscreen(offscreenSurfaceB);
    RB.DrawMapLayer(LAYER_WATER_MASK);

    // Switch back to drawing to display
    RB.Onscreen();

    // Use a custom shader that combines offscreen A and B to create a rippling water effect
    RB.ShaderSet(shaderWater);
    RB.SpriteSheetSet(offscreenSurfaceA);
    shaderWater.SpriteSheetTextureSet(offscreenSurfaceB);

    // Draw the results to display while the shader is active
    RB.DrawCopy(new Rect2i(00, offscreenSurfaceA.grid.width, offscreenSurfaceA.grid.height), Vector2i.zero);
    RB.ShaderApplyNow();

    RB.ShaderReset();
}

See Also

RB.Onscreen
RB.ShaderSet

See Docs

Features - Drawing into a Sprite Sheet
Features - Shaders (Advanced Topic)