# NNS_G2dDrawOneOam3DDirect*Fast

## C Specification

      #include <nnsys/g2d/g2d_OamSoftwareSpriteDraw.h>

      void NNS_G2dDrawOneOam3DDirectFast(
          (
              const GXOamAttr*                pOam,
              const NNSG2dImageAttr*          pTexImageAttr,
              u32                             texBaseAddr,
              u32                             pltBaseAddr
          );

      void NNS_G2dDrawOneOam3DDirectWithPosFast(
          (
              s16                             posX,
              s16                             posY,
              s16                             posZ,
              const GXOamAttr*                pOam,
              const NNSG2dImageAttr*          pTexImageAttr,
              u32                             texBaseAddr,
              u32                             pltBaseAddr
          );

      void NNS_G2dDrawOneOam3DDirectWithPosAffineFast(
          (
              s16                             posX,
              s16                             posY,
              s16                             posZ,
              const GXOamAttr*                pOam,
              const NNSG2dImageAttr*          pTexImageAttr,
              u32                             texBaseAddr,
              u32                             pltBaseAddr,
              const MtxFx22*                  pMtx
          );

## Return Values

None.

## Description

Directly renders a simple OBJ using the 3D Graphics Engine without using the internal buffer. The contents of the current matrix of the geometry engine are not saved before and after rendering with the `NNS_G2dDrawOneOam3DDirectXXXFast()` function. Since the Push and Pop processes of the current matrix stack are not performed, only that part will operate at a high speed. In particular, if it is not necessary to save each time the current matrix is rendered, more efficient processing becomes possible (Code Example 1).

    Code Example 1:

    G3_PushMtx();
    for( i = 0; i < N; i++ )
    {
    G3_Identity();// Or G3_LoadMtx43( &mtx ), etc.
    NNS_G2dDrawOneOam3DDirectXXXFast();
    }
    G3_PopMtx(1);

As indicated in the code example below, `NNS_G2dDrawOneOam3DDirectXXX` is implemented via `NNS_G2dDrawOneOam3DDirectXXXFast()` (Code Example 2).

    Code Example 2:

    NNS_G2dDrawOneOam3DDirectXXX
    {
    G3_PushMtx();
    NNS_G2dDrawOneOam3DDirectXXXFast();
    G3_PopMtx(1);
    }

## See Also

`NNS_G2dDrawOneOam3DDirect`, `NNS_G2dDrawOneOam3DDirectWithPos`, `NNS_G2dDrawOneOam3DDirectWithPosAffine`

## Revision History

11/10/2004 Initial version.