Render to texture

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 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
In its most basic form, an is set up in  or  and a triangle strip or quad is rendered to the screen in a fashion which results in each texel being equivalent to one  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
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. A further developed code base, the Doom Classic Unity port, replaced the id Tech-based abstraction layer with the off-the-shelf.

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 triangle-based rendering engine.

Custom implementations

 * Terminal DOOM

Direct3D implementations

 * ZDoom

OpenGL implementations

 * Calico
 * Chocolate Doom
 * Eternity Engine
 * PrBoom+
 * Strife: Veteran Edition