Render to texture

From DoomWiki.org

The ability to render to texture is a feature of a number of Doom source ports which allows use of hardware-accelerated rendering contexts without conversion of the rendering engine to a "true 3D" polygon-based approach.

Support for the feature is increasingly important due to the number of new computing devices such as tablets which only support APIs such as OpenGL ES for graphics. Other advantages of the feature include the ability to do hardware scaling, support for vertical synchronization and page flipping, and possible reductions in the amount of main RAM and CPU time needed for the rendering process.

Details[edit]

In its most basic form, an orthographic projection is set up in OpenGL or Direct3D and a triangle strip or quad is rendered to the screen in a fashion which results in each texel being equivalent to one pixel on the screen. The game's framebuffer is then uploaded as a texture to the video card each frame and the texture is mapped to the polygon(s) used as the display surface.

Use of GL extensions such as the ARB pixel buffer object extension can provide for asynchronous update capability and faster uploads, taking greater advantage of modern graphics cards' vast bus bandwidth.

In more advanced forms, it is possible for the game to be rendered onto an arbitrary surface within a larger three-dimensional environment. Such is the case for the Terminal DOOM source port, which modifies the engine to render onto an id Tech 4 user interface surface which is integrated into an arcade-cabinet-like world mesh. The player walks up to the device to play the game as it renders to the surface within the environment of the Doom 3 level.

Official implementations[edit]

Doom Classic, included as part of Doom 3: BFG Edition, renders to a full-screen id Tech 4 UI surface. It inherited this system from the Xbox and Xbox 360 ports from which it descends.

The port of Hexen to the Sony PlayStation used a similar approach. As a result of the hardware being poorly tuned to this sort of application, however, it had a lower framerate than the Doom port to the same console, which used a customized quad-strip-based rendering engine.

Source ports[edit]

Custom implementations[edit]

Direct3D implementations[edit]

OpenGL implementations[edit]