Game Development Reference
sf::RenderTarget and sf::RenderWindow
We are already familiar with the RenderWindow class, but we haven't covered it in de-
tail. One reason is that we don't need to know too much besides its RenderWin-
dow::draw() method to work with it in the early stages. However, now that we are go-
ing to talk about rendering on different targets (textures in this instance), it is important to
understand what RenderWindow is.
We will start with the introduction of the concept of a render target. A render target is an
object that we can use the graphics module to draw on. In order for a class to be considered
a render target, it has to inherit from sf::RenderTarget . The class provides the inter-
face needed in the child classes for drawing Drawable objects, using Views (or camer-
as), shaders, and so on. The RenderWindow class is one of those children classes.
The inheritance tree of the RenderWindow class looks like this:
From this, we can get an understanding of what the class represents—a way for us to draw
a Drawable object in a window. If we look at the base Window class we see no drawing
functionality in it, only window related properties—such as handling events, changing size,
title, position, and so on. In order to draw something in the base Window class, we have to
use OpenGL. However, every class that implements the RenderTarget methods can
serve as a canvas for all the features of the graphics module—most importantly the Draw-
able objects. And that is the reason why RenderTarget is so important—without the
functionality that the class provides, we cannot utilize most of the module's features.
Most of the RenderWindow methods we have talked about before are actually declared
in RenderTarget — draw() , setView() , clear() , mapPixelToCoords() , and
so on. Some of those methods are implemented differently depending on RenderTar-
get , but most of them work in the same way. Before we go any further there is an import-
ant note which we have to mention about the RenderTarget::draw() method.