blob: 00d40a79b7487986ef4d35d9ee0e6a123e50ea2a [file] [view]
---
layout: doc
title: "Starboard Module Reference: blitter.h"
---
The Blitter API provides support for issuing simple blit-style draw commands to
either an offscreen surface or to a Starboard `SbWindow` object. Blitter is
jargon that means "BLock Transfer," which might be abbreviated as BLT and,
hence, the word "blit."
This API is designed to allow implementations make use of GPU hardware
acceleration, if it is available. Draw commands exist for solid-color rectangles
and rasterization/blitting of rectangular images onto rectangular target
patches.
## Threading Concerns ##
Note that in general the Blitter API is not thread safe, except for all
`SbBlitterDevice`-related functions. All functions that are not required to
internally ensure any thread safety guarantees are prefaced with a comment
indicating that they are not thread safe.
Functions which claim to not be thread safe can still be used from multiple
threads, but manual synchronization must be performed in order to ensure their
parameters are not referenced at the same time on another thread by another
function.
### Examples ###
* Multiple threads should not issue commands to the same `SbBlitterContext`
object unless they are manually synchronized.
* Multiple threads should not issue draw calls to the same render target, even
if the draw calls are made within separate contexts. In this case, be sure
to manually synchronize through the use of syncrhonization primitives and
use of the `SbBlitterFlushContext()` command.
* Multiple threads can operate on the swap chain, but they must perform manual
synchronization.
## Enums ##
### SbBlitterPixelDataFormat ###
Defines the set of pixel formats that can be used with the Blitter API
`SbBlitterPixelData` objects. Note that not all of these formats are guaranteed
to be supported by a particular device, so before using these formats in pixel
data creation commands, it should be checked that they are supported first (e.g.
via `SbBlitterIsPixelFormatSupportedByPixelData()`). `SbBlitterPixelDataFormat`
specifies specific orderings of the color channels, and when doing so, byte-
order is used, e.g. "RGBA" implies that a value for red is stored in the byte
with the lowest memory address. All pixel values are assumed to be in
premultiplied alpha format.
#### Values ####
* `kSbBlitterPixelDataFormatARGB8`
32-bit pixels with 8-bits per channel, the alpha component in the byte with
the lowest address and blue in the byte with the highest address.
* `kSbBlitterPixelDataFormatBGRA8`
32-bit pixels with 8-bits per channel, the blue component in the byte with
the lowest address and alpha in the byte with the highest address.
* `kSbBlitterPixelDataFormatRGBA8`
32-bit pixels with 8-bits per channel, the red component in the byte with
the lowest address and alpha in the byte with the highest address.
* `kSbBlitterPixelDataFormatA8`
8-bit pixels that contain only a single alpha channel. When rendered,
surfaces in this format will have `(R, G, B)` values of `(255, 255, 255)`.
* `kSbBlitterNumPixelDataFormats`
Constant that indicates how many unique pixel formats Starboard supports.
* `kSbBlitterInvalidPixelDataFormat`
### SbBlitterSurfaceFormat ###
Enumeration that describes the color format of surfaces. Note that
`SbBlitterSurfaceFormat` does not differentiate between permutations of the
color channel ordering (e.g. RGBA vs ARGB) since client code will never be able
to access surface pixels directly. This is the main difference between
`SbBlitterPixelDataFormat`, which does explicitly dictate an ordering.
#### Values ####
* `kSbBlitterSurfaceFormatRGBA8`
32-bit RGBA color, with 8 bits per channel.
* `kSbBlitterSurfaceFormatA8`
8-bit alpha-only color.
* `kSbBlitterNumSurfaceFormats`
Constant that indicates how many unique surface formats Starboard supports.
* `kSbBlitterInvalidSurfaceFormat`
## Typedefs ##
### SbBlitterColor ###
A simple 32-bit color representation that is a parameter to many Blitter
functions.
#### Definition ####
```
typedef uint32_t SbBlitterColor
```
## Structs ##
### SbBlitterRect ###
Defines a rectangle via a point `(x, y)` and a size `(width, height)`. This
structure is used as a parameter type in various blit calls.
#### Members ####
* `int x`
* `int y`
* `int width`
* `int height`
### SbBlitterSurfaceInfo ###
`SbBlitterSurfaceInfo` collects information about surfaces that can be queried
from them at any time.
#### Members ####
* `int width`
* `int height`
* `SbBlitterSurfaceFormat format`
## Functions ##
### SbBlitterAFromColor ###
Extract alpha from a `SbBlitterColor` object.
#### Declaration ####
```
static uint8_t SbBlitterAFromColor(SbBlitterColor color)
```
### SbBlitterBFromColor ###
Extract blue from a `SbBlitterColor` object.
#### Declaration ####
```
static uint8_t SbBlitterBFromColor(SbBlitterColor color)
```
### SbBlitterBlitRectToRect ###
Issues a draw call on `context` that blits the area of `source_surface`
specified by `src_rect` to `context`'s current render target at `dst_rect`. The
source rectangle must lie within the dimensions of `source_surface`. Note that
the `source_surface`'s alpha is modulated by `opacity` before being drawn. For
`opacity`, a value of 0 implies complete invisibility, and a value of 255
implies complete opacity.
This function is not thread-safe.
The return value indicates whether the draw call succeeded.
`src_rect`: The area to be block transferred (blitted).
#### Declaration ####
```
bool SbBlitterBlitRectToRect(SbBlitterContext context, SbBlitterSurface source_surface, SbBlitterRect src_rect, SbBlitterRect dst_rect)
```
### SbBlitterBlitRectToRectTiled ###
This function functions identically to SbBlitterBlitRectToRect(), except it
permits values of `src_rect` outside the dimensions of `source_surface`. In
those regions, the pixel data from `source_surface` will be wrapped. Negative
values for `src_rect.x` and `src_rect.y` are allowed.
The output is all stretched to fit inside of `dst_rect`.
This function is not thread-safe.
The return value indicates whether the draw call succeeded.
#### Declaration ####
```
bool SbBlitterBlitRectToRectTiled(SbBlitterContext context, SbBlitterSurface source_surface, SbBlitterRect src_rect, SbBlitterRect dst_rect)
```
### SbBlitterBlitRectsToRects ###
This function achieves the same effect as calling `SbBlitterBlitRectToRect()`
`num_rects` times with each of the `num_rects` values of `src_rects` and
`dst_rects`. This function allows for greater efficiency than looped calls to
`SbBlitterBlitRectToRect()`.
This function is not thread-safe.
The return value indicates whether the draw call succeeded.
#### Declaration ####
```
bool SbBlitterBlitRectsToRects(SbBlitterContext context, SbBlitterSurface source_surface, const SbBlitterRect *src_rects, const SbBlitterRect *dst_rects, int num_rects)
```
### SbBlitterBytesPerPixelForFormat ###
A convenience function to return the number of bytes per pixel for a given pixel
format.
#### Declaration ####
```
static int SbBlitterBytesPerPixelForFormat(SbBlitterPixelDataFormat format)
```
### SbBlitterColorFromRGBA ###
A convenience function to create a `SbBlitterColor` object from separate 8-bit
RGBA components.
#### Declaration ####
```
static SbBlitterColor SbBlitterColorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a)
```
### SbBlitterCreateContext ###
Creates an `SbBlitterContext` object on `device`. The returned context can be
used to set up draw state and issue draw calls.
Note that there is a limit on the number of contexts that can exist
simultaneously, which can be queried by calling `SbBlitterGetMaxContexts()`.
(The limit is often `1`.)
`SbBlitterContext` objects keep track of draw state between a series of draw
calls. Please refer to the `SbBlitterContext()` definition for more information
about contexts.
This function is thread-safe.
This function returns `kSbBlitterInvalidContext` upon failure. Note that the
function fails if it has already been used to create the maximum number of
contexts.
`device`: The `SbBlitterDevice` for which the `SbBlitterContext` object is
created.
#### Declaration ####
```
SbBlitterContext SbBlitterCreateContext(SbBlitterDevice device)
```
### SbBlitterCreateDefaultDevice ###
Creates and returns an `SbBlitterDevice` based on the Blitter API
implementation's decision of which device should be the default. The returned
`SbBlitterDevice` represents a connection to a device (like a GPU).
On many platforms there is always one single obvious choice for a device to use,
and that is the one that this function will return. For example, if this is
called on a platform that has a single GPU, this call should return an object
that represents that GPU. On a platform that has no GPU, an object representing
a software CPU implementation may be returned.
Only one default device can exist within a process at a time. This function is
thread-safe.
Returns `kSbBlitterInvalidDevice` on failure.
#### Declaration ####
```
SbBlitterDevice SbBlitterCreateDefaultDevice()
```
### SbBlitterCreatePixelData ###
Allocates an `SbBlitterPixelData` object through `device` with `width`, `height`
and `pixel_format`. `pixel_format` must be supported by `device` (see
`SbBlitterIsPixelFormatSupportedByPixelData()`).
This function is thread-safe.
Calling this function results in the allocation of CPU-accessible (though
perhaps blitter-device-resident) memory to store pixel data of the requested
size/format. An `SbBlitterPixelData` object should eventually be passed either
into a call to `SbBlitterCreateSurfaceFromPixelData()` or into a call to
`SbBlitterDestroyPixelData()`.
Returns `kSbBlitterInvalidPixelData` upon failure.
#### Declaration ####
```
SbBlitterPixelData SbBlitterCreatePixelData(SbBlitterDevice device, int width, int height, SbBlitterPixelDataFormat pixel_format)
```
### SbBlitterCreateRenderTargetSurface ###
Creates a new surface with undefined pixel data on `device` with the specified
`width`, `height` and `surface_format`. One can set the pixel data on the
resulting surface by getting its associated SbBlitterRenderTarget object and
then calling `SbBlitterGetRenderTargetFromSurface()`.
This function is thread-safe.
Returns `kSbBlitterInvalidSurface` upon failure.
#### Declaration ####
```
SbBlitterSurface SbBlitterCreateRenderTargetSurface(SbBlitterDevice device, int width, int height, SbBlitterSurfaceFormat surface_format)
```
### SbBlitterCreateSurfaceFromPixelData ###
Creates an `SbBlitterSurface` object on `device`. Note that `device` must match
the device that was used to create the `SbBlitterPixelData` object provided via
the `pixel_data` parameter.
This function also destroys the input `pixel_data` object. As a result,
`pixel_data` should not be accessed again after a call to this function.
The returned object cannot be used as a render target (e.g. calling
`SbBlitterGetRenderTargetFromSurface()` on it will return
`kSbBlitterInvalidRenderTarget`).
This function is thread-safe with respect to `device`, but `pixel_data` should
not be modified on another thread while this function is called.
Returns `kSbBlitterInvalidSurface` in the event of an error.
#### Declaration ####
```
SbBlitterSurface SbBlitterCreateSurfaceFromPixelData(SbBlitterDevice device, SbBlitterPixelData pixel_data)
```
### SbBlitterCreateSwapChainFromWindow ###
Creates and returns an `SbBlitterSwapChain` that can then be used to send
graphics to the display. This function links `device` to `window`'s output, and
drawing to the returned swap chain will result in `device` being used to render
to `window`.
This function must be called from the thread that called `SbWindowCreate()` to
create `window`.
Returns `kSbBlitterInvalidSwapChain` on failure.
#### Declaration ####
```
SbBlitterSwapChain SbBlitterCreateSwapChainFromWindow(SbBlitterDevice device, SbWindow window)
```
### SbBlitterDestroyContext ###
Destroys the specified `context`, freeing all its resources.
This function is not thread-safe.
The return value indicates whether the destruction succeeded.
`context`: The object to be destroyed.
#### Declaration ####
```
bool SbBlitterDestroyContext(SbBlitterContext context)
```
### SbBlitterDestroyDevice ###
Destroys `device`, cleaning up all resources associated with it. This function
is thread-safe, but it should not be called if `device` is still being accessed
elsewhere.
The return value indicates whether the destruction succeeded.
`device`: The SbBlitterDevice object to be destroyed.
#### Declaration ####
```
bool SbBlitterDestroyDevice(SbBlitterDevice device)
```
### SbBlitterDestroyPixelData ###
Destroys `pixel_data`. Note that this function does not need to be called and
should not be called if `SbBlitterCreateSurfaceFromPixelData()` has been called
on `pixel_data` before.
This function is thread-safe.
The return value indicates whether the destruction succeeded.
`pixel_data`: The object to be destroyed.
#### Declaration ####
```
bool SbBlitterDestroyPixelData(SbBlitterPixelData pixel_data)
```
### SbBlitterDestroySurface ###
Destroys the `surface` object, cleaning up all resources associated with it.
This function is not thread safe.
The return value indicates whether the destruction succeeded.
`surface`: The object to be destroyed.
#### Declaration ####
```
bool SbBlitterDestroySurface(SbBlitterSurface surface)
```
### SbBlitterDestroySwapChain ###
Destroys `swap_chain`, cleaning up all resources associated with it. This
function is not thread-safe and must be called on the same thread that called
`SbBlitterCreateSwapChainFromWindow()`.
The return value indicates whether the destruction succeeded.
`swap_chain`: The SbBlitterSwapChain to be destroyed.
#### Declaration ####
```
bool SbBlitterDestroySwapChain(SbBlitterSwapChain swap_chain)
```
### SbBlitterDownloadSurfacePixels ###
Downloads `surface` pixel data into CPU memory pointed to by `out_pixel_data`,
formatted according to the requested `pixel_format` and the requested
`pitch_in_bytes`. Before calling this function, you can call
`SbBlitterIsPixelFormatSupportedByDownloadSurfacePixels()` to confirm that
`pixel_format` is, in fact, valid for `surface`.
When this function is called, it first waits for all previously flushed graphics
commands to be executed by the device before downloading the data. Since this
function waits for the pipeline to empty, it should be used sparingly, such as
within in debug or test environments.
The return value indicates whether the pixel data was downloaded successfully.
The returned alpha format is premultiplied.
This function is not thread-safe.
`out_pixel_data`: A pointer to a region of memory with a size of surface_height
* `pitch_in_bytes` bytes.
#### Declaration ####
```
bool SbBlitterDownloadSurfacePixels(SbBlitterSurface surface, SbBlitterPixelDataFormat pixel_format, int pitch_in_bytes, void *out_pixel_data)
```
### SbBlitterFillRect ###
Issues a draw call on `context` that fills the specified rectangle `rect`. The
rectangle's color is determined by the last call to `SbBlitterSetColor()`.
This function is not thread-safe.
The return value indicates whether the draw call succeeded.
`context`: The context on which the draw call will operate. `rect`: The
rectangle to be filled.
#### Declaration ####
```
bool SbBlitterFillRect(SbBlitterContext context, SbBlitterRect rect)
```
### SbBlitterFlipSwapChain ###
Flips the `swap_chain` by making the buffer previously accessible to draw
commands via `SbBlitterGetRenderTargetFromSwapChain()` visible on the display,
while another buffer in an initially undefined state is set up as the new draw
command target. Note that you do not need to call
`SbBlitterGetRenderTargetFromSwapChain()` again after flipping, the swap chain's
render target always refers to its current back buffer.
This function stalls the calling thread until the next vertical refresh. In
addition, to ensure consistency with the Starboard Player API when rendering
punch-out video, calls to `SbPlayerSetBounds()` do not take effect until this
method is called.
The return value indicates whether the flip succeeded.
This function is not thread-safe.
`swap_chain`: The SbBlitterSwapChain to be flipped.
#### Declaration ####
```
bool SbBlitterFlipSwapChain(SbBlitterSwapChain swap_chain)
```
### SbBlitterFlushContext ###
Flushes all draw calls previously issued to `context`. Calling this function
guarantees that the device processes all draw calls issued to this point on this
`context` before processing any subsequent draw calls on any context.
Before calling `SbBlitterFlipSwapChain()`, it is often prudent to call this
function to ensure that all draw calls are submitted before the flip occurs.
This function is not thread-safe.
The return value indicates whether the flush succeeded.
`context`: The context for which draw calls are being flushed.
#### Declaration ####
```
bool SbBlitterFlushContext(SbBlitterContext context)
```
### SbBlitterGFromColor ###
Extract green from a `SbBlitterColor` object.
#### Declaration ####
```
static uint8_t SbBlitterGFromColor(SbBlitterColor color)
```
### SbBlitterGetMaxContexts ###
Returns the maximum number of contexts that `device` can support in parallel.
Note that devices often support only a single context.
This function is thread-safe.
This function returns `-1` upon failure.
`device`: The SbBlitterDevice for which the maximum number of contexts is
returned.
#### Declaration ####
```
int SbBlitterGetMaxContexts(SbBlitterDevice device)
```
### SbBlitterGetPixelDataPitchInBytes ###
Retrieves the pitch (in bytes) for `pixel_data`. This indicates the number of
bytes per row of pixel data in the image.
This function is not thread-safe.
Returns `-1` in the event of an error.
`pixel_data`: The object for which you are retrieving the pitch.
#### Declaration ####
```
int SbBlitterGetPixelDataPitchInBytes(SbBlitterPixelData pixel_data)
```
### SbBlitterGetPixelDataPointer ###
Retrieves a CPU-accessible pointer to the pixel data represented by
`pixel_data`. This pixel data can be modified by the CPU to initialize it on the
CPU before calling `SbBlitterCreateSurfaceFromPixelData()`.
Note that the pointer returned here is valid as long as `pixel_data` is valid,
which means it is valid until either `SbBlitterCreateSurfaceFromPixelData()` or
`SbBlitterDestroyPixelData()` is called.
This function is not thread-safe.
Returns `NULL` in the event of an error.
#### Declaration ####
```
void* SbBlitterGetPixelDataPointer(SbBlitterPixelData pixel_data)
```
### SbBlitterGetRenderTargetFromSurface ###
Returns the `SbBlitterRenderTarget` object owned by `surface`. The returned
object can be used as a target for draw calls.
This function returns `kSbBlitterInvalidRenderTarget` if `surface` is not able
to provide a render target or on any other error.
This function is not thread-safe.
#### Declaration ####
```
SbBlitterRenderTarget SbBlitterGetRenderTargetFromSurface(SbBlitterSurface surface)
```
### SbBlitterGetRenderTargetFromSwapChain ###
Returns the `SbBlitterRenderTarget` object that is owned by `swap_chain`. The
returned object can be used to provide a target to blitter draw calls that draw
directly to the display buffer. This function is not thread-safe.
Returns `kSbBlitterInvalidRenderTarget` on failure.
`swap_chain`: The SbBlitterSwapChain for which the target object is being
retrieved.
#### Declaration ####
```
SbBlitterRenderTarget SbBlitterGetRenderTargetFromSwapChain(SbBlitterSwapChain swap_chain)
```
### SbBlitterGetSurfaceInfo ###
Retrieves an `SbBlitterSurfaceInfo` structure, which describes immutable
parameters of the `surface`, such as its width, height and pixel format. The
results are set on the output parameter `surface_info`, which cannot be `NULL`.
The return value indicates whether the information was retrieved successfully.
This function is not thread-safe.
#### Declaration ####
```
bool SbBlitterGetSurfaceInfo(SbBlitterSurface surface, SbBlitterSurfaceInfo *surface_info)
```
### SbBlitterIsContextValid ###
Checks whether a blitter context is invalid.
#### Declaration ####
```
static bool SbBlitterIsContextValid(SbBlitterContext context)
```
### SbBlitterIsDeviceValid ###
Checks whether a blitter device is invalid.
#### Declaration ####
```
static bool SbBlitterIsDeviceValid(SbBlitterDevice device)
```
### SbBlitterIsPixelDataValid ###
Checks whether a pixel data object is invalid.
#### Declaration ####
```
static bool SbBlitterIsPixelDataValid(SbBlitterPixelData pixel_data)
```
### SbBlitterIsPixelFormatSupportedByDownloadSurfacePixels ###
Indicates whether the combination of parameter values is valid for calls to
`SbBlitterDownloadSurfacePixels()`.
This function is not thread-safe.
`surface`: The surface being checked. `pixel_format`: The pixel format that
would be used on the surface.
#### Declaration ####
```
bool SbBlitterIsPixelFormatSupportedByDownloadSurfacePixels(SbBlitterSurface surface, SbBlitterPixelDataFormat pixel_format)
```
### SbBlitterIsPixelFormatSupportedByPixelData ###
Indicates whether `device` supports calls to `SbBlitterCreatePixelData` with the
specified `pixel_format`. This function is thread-safe.
`device`: The device for which compatibility is being checked. `pixel_format`:
The SbBlitterPixelDataFormat for which compatibility is being checked.
#### Declaration ####
```
bool SbBlitterIsPixelFormatSupportedByPixelData(SbBlitterDevice device, SbBlitterPixelDataFormat pixel_format)
```
### SbBlitterIsRenderTargetValid ###
Checks whether a render target is invalid.
#### Declaration ####
```
static bool SbBlitterIsRenderTargetValid(SbBlitterRenderTarget render_target)
```
### SbBlitterIsSurfaceFormatSupportedByRenderTargetSurface ###
Indicates whether the `device` supports calls to
`SbBlitterCreateRenderTargetSurface()` with `surface_format`.
This function is thread-safe.
`device`: The device being checked for compatibility. `surface_format`: The
surface format being checked for compatibility.
#### Declaration ####
```
bool SbBlitterIsSurfaceFormatSupportedByRenderTargetSurface(SbBlitterDevice device, SbBlitterSurfaceFormat surface_format)
```
### SbBlitterIsSurfaceValid ###
Checks whether a surface is invalid.
#### Declaration ####
```
static bool SbBlitterIsSurfaceValid(SbBlitterSurface surface)
```
### SbBlitterIsSwapChainValid ###
Checks whether a swap chain is invalid.
#### Declaration ####
```
static bool SbBlitterIsSwapChainValid(SbBlitterSwapChain swap_chain)
```
### SbBlitterMakeRect ###
Convenience function to setup a rectangle with the specified parameters.
#### Declaration ####
```
static SbBlitterRect SbBlitterMakeRect(int x, int y, int width, int height)
```
### SbBlitterPixelDataFormatToSurfaceFormat ###
This function maps SbBlitterPixelDataFormat values to their corresponding
`SbBlitterSurfaceFormat` value. Note that many `SbBlitterPixelDataFormat`s
correspond to the same `SbBlitterSurfaceFormat`, so this function is not
invertible. When creating a `SbBlitterSurface` object from a
`SbBlitterPixelData` object, the `SbBlitterSurface`'s format will be computed
from the `SbBlitterPixelData` object by using this function.
#### Declaration ####
```
static SbBlitterSurfaceFormat SbBlitterPixelDataFormatToSurfaceFormat(SbBlitterPixelDataFormat pixel_format)
```
### SbBlitterRFromColor ###
Extract red from a `SbBlitterColor` object.
#### Declaration ####
```
static uint8_t SbBlitterRFromColor(SbBlitterColor color)
```
### SbBlitterSetBlending ###
Sets the blending state for the specified `context`. By default, blending is
disabled on a `SbBlitterContext`.
This function is not thread-safe.
The return value indicates whether the blending state was set successfully.
`context`: The context for which the blending state is being set.
`blending`: The blending state for the `context`. If `blending` is `true`, the
source alpha of subsequent draw calls is used to blend with the destination
color. In particular,
```
Fc = Sc * Sa + Dc * (1 - Sa)
```
where:
* `Fc` is the final color.
* `Sc` is the source color.
* `Sa` is the source alpha.
* `Dc` is the destination color.
If `blending` is `false`, the source color and source alpha overwrite the
destination color and alpha.
#### Declaration ####
```
bool SbBlitterSetBlending(SbBlitterContext context, bool blending)
```
### SbBlitterSetColor ###
Sets the context's current color. The current color's default value is
`SbBlitterColorFromRGBA(255, 255, 255 255)`.
The current color affects the fill rectangle's color in calls to
`SbBlitterFillRect()`. If `SbBlitterSetModulateBlitsWithColor()` has been called
to enable blit color modulation, the source blit surface pixel color is also
modulated by the color before being output.
This function is not thread-safe.
The return value indicates whether the color was set successfully.
`context`: The context for which the color is being set. `color`: The context's
new color, specified in unpremultiplied alpha format.
#### Declaration ####
```
bool SbBlitterSetColor(SbBlitterContext context, SbBlitterColor color)
```
### SbBlitterSetModulateBlitsWithColor ###
Sets whether or not blit calls should have their source pixels modulated by the
current color, which is set using `SbBlitterSetColor()`, before being output.
This function can apply opacity to blit calls, color alpha-only surfaces, and
apply other effects.
This function is not thread-safe.
The return value indicates whether the state was set successfully.
`modulate_blits_with_color`: Indicates whether to modulate source pixels in blit
calls.
#### Declaration ####
```
bool SbBlitterSetModulateBlitsWithColor(SbBlitterContext context, bool modulate_blits_with_color)
```
### SbBlitterSetRenderTarget ###
Sets up `render_target` as the render target that all subsequent draw calls made
on `context` will use.
This function is not thread-safe.
The return value indicates whether the render target was set successfully.
`context`: The object for which the render target is being set. `render_target`:
The target that the `context` should use for draw calls.
#### Declaration ####
```
bool SbBlitterSetRenderTarget(SbBlitterContext context, SbBlitterRenderTarget render_target)
```
### SbBlitterSetScissor ###
Sets the scissor rectangle, which dictates a visibility area that affects all
draw calls. Only pixels within the scissor rectangle are rendered, and all
drawing outside of that area is clipped.
When `SbBlitterSetRenderTarget()` is called, that function automatically sets
the scissor rectangle to the size of the specified render target. If a scissor
rectangle is specified outside of the extents of the current render target
bounds, it will be intersected with the render target bounds.
This function is not thread-safe.
Returns whether the scissor was successfully set. It returns an error if it is
called before a render target has been specified for the context.
#### Declaration ####
```
bool SbBlitterSetScissor(SbBlitterContext context, SbBlitterRect rect)
```