# GX_SetCapture

## Syntax

      #include <nitro/gx/gx_capture.h>

      void GX_SetCapture(
          GXCaptureSize sz,
          GXCaptureMode mode,
          GXCaptureSrcA a,
          GXCaptureSrcB b,
          GXCaptureDest dest,
          int eva,
          int evb
      );

## Arguments

`sz` | Capture size
`mode` | Capture mode (select whether to capture A only, B only, or AB blended)
`a` | Capture data source A (select either screen after 3D/2D blending, or only 3D screen)
`b` | Capture source B (Select VRAM/Main Memory)
`dest` | Capture data write target (select combination of VRAM-A,B,C,D, and offset)
`eva` | Blending coefficient (0-16) for capture data source A
`evb` | Blending coefficient (0-16) for capture data source B

## Return Values

None.

## Description

Sets to capture one screen of data from line 0 in the next frame. To capture each frame you must call this function in each frame.
Note 1: The target VRAM must already be mapped into LCDC memory. Note 2: When you set VRAM in `b`, the target VRAM is the same as the one set in `dest`. Note 3: When you are in the VRAM display mode, even if you set VRAM that has an offset in `b`, the VRAM offset specification is not enabled. If the offset exceeds `0x20000` when the memory is read, it wraps to `0x00000`. Note 4: When writing to `dest` if offset exceeds `0x20000`, it wraps to `0x00000` and writes. Note 5: During RAM capture, one line is always loaded as a 256-dot image. Therefore, it is not possible to perform blending while capturing is in process with the 128x128 dot setting.

`GX_CAPTURE_SIZE_128x128` | 128x128 dot (`0x08000` bytes)
`GX_CAPTURE_SIZE_256x64` | 256x64 dot (`0x08000` bytes)
`GX_CAPTURE_SIZE_256x128` | 256x128 dot (`0x10000` bytes)
`GX_CAPTURE_SIZE_256x192` | 256x192 dot (`0x18000` bytes)

`GX_CAPTURE_MODE_A` | Captures capture source A data.
`GX_CAPTURE_MODE_B` | Captures capture source B data.
`GX_CAPTURE_MODE_AB` | Blends capture source A and B data, and captures.

`GX_CAPTURE_SRCA_2D3D` | Captures graphics display screen (after 3D/2D blending).
`GX_CAPTURE_SRCA_3D` | Captures 3D screen.

`GX_CAPTURE_SRCB_VRAM_0x00000` | Reads from VRAM offset `0x00000`.
`GX_CAPTURE_SRCB_MRAM` | Captures display results from main memory display mode.
`GX_CAPTURE_SRCB_VRAM_0x08000` | Reads from VRAM offset `0x08000`.
`GX_CAPTURE_SRCB_VRAM_0x10000` | Reads from VRAM offset `0x10000`.
`GX_CAPTURE_SRCB_VRAM_0x18000` | Reads from VRAM offset `0x18000`.

`GX_CAPTURE_DEST_VRAM_A_0x00000` | Writes from VRAM-A offset `0x00000`.
`GX_CAPTURE_DEST_VRAM_B_0x00000` | Writes from VRAM-B offset `0x00000`.
`GX_CAPTURE_DEST_VRAM_C_0x00000` | Writes from VRAM-C offset `0x00000`.
`GX_CAPTURE_DEST_VRAM_D_0x00000` | Writes from VRAM-D offset `0x00000`.
`GX_CAPTURE_DEST_VRAM_A_0x08000` | Writes from VRAM-A offset `0x08000`.
`GX_CAPTURE_DEST_VRAM_B_0x08000` | Writes from VRAM-B offset `0x08000`.
`GX_CAPTURE_DEST_VRAM_C_0x08000` | Writes from VRAM-C offset `0x08000`.
`GX_CAPTURE_DEST_VRAM_D_0x08000` | Writes from VRAM-D offset `0x08000`.
`GX_CAPTURE_DEST_VRAM_A_0x10000` | Writes from VRAM-A offset `0x10000`.
`GX_CAPTURE_DEST_VRAM_B_0x10000` | Writes from VRAM-B offset `0x10000`.
`GX_CAPTURE_DEST_VRAM_C_0x10000` | Writes from VRAM-C offset `0x10000`.
`GX_CAPTURE_DEST_VRAM_D_0x10000` | Writes from VRAM-D offset `0x10000`.
`GX_CAPTURE_DEST_VRAM_A_0x18000` | Writes from VRAM-A offset `0x18000`.
`GX_CAPTURE_DEST_VRAM_B_0x18000` | Writes from VRAM-B offset `0x18000`.
`GX_CAPTURE_DEST_VRAM_C_0x18000` | Writes from VRAM-C offset `0x18000`.
`GX_CAPTURE_DEST_VRAM_D_0x18000` | Writes from VRAM-D offset `0x18000`.

Below are the matrix format type definitions used in the argument.

    typedef enum
    {
        GX_CAPTURE_SIZE_128x128 = 0,
        GX_CAPTURE_SIZE_256x64 = 1,
        GX_CAPTURE_SIZE_256x128 = 2,
        GX_CAPTURE_SIZE_256x192 = 3
    }
    GXCaptureSize;

    typedef enum
    {
        GX_CAPTURE_MODE_A = 0,
        GX_CAPTURE_MODE_B = 1,
        GX_CAPTURE_MODE_AB = 2
    }
    GXCaptureMode;

    typedef enum
    {
        GX_CAPTURE_SRCA_2D3D = 0,
        GX_CAPTURE_SRCA_3D = 1
    }
    GXCaptureSrcA;

    typedef enum
    {
        GX_CAPTURE_SRCB_VRAM_0x00000 = 0,
        GX_CAPTURE_SRCB_WRAM = 1,
        GX_CAPTURE_SRCB_VRAM_0x08000 = 2,
        GX_CAPTURE_SRCB_VRAM_0x10000 = 4,
        GX_CAPTURE_SRCB_VRAM_0x18000 = 6
    }
    GXCaptureSrcB;

    typedef enum
    {
        GX_CAPTURE_DEST_VRAM_A_0x00000 = 0,
        GX_CAPTURE_DEST_VRAM_B_0x00000 = 1,
        GX_CAPTURE_DEST_VRAM_C_0x00000 = 2,
        GX_CAPTURE_DEST_VRAM_D_0x00000 = 3,

        GX_CAPTURE_DEST_VRAM_A_0x08000 = 4,
        GX_CAPTURE_DEST_VRAM_B_0x08000 = 5,
        GX_CAPTURE_DEST_VRAM_C_0x08000 = 6,
        GX_CAPTURE_DEST_VRAM_D_0x08000 = 7,

        GX_CAPTURE_DEST_VRAM_A_0x10000 = 8,
        GX_CAPTURE_DEST_VRAM_B_0x10000 = 9,
        GX_CAPTURE_DEST_VRAM_C_0x10000 = 10,
        GX_CAPTURE_DEST_VRAM_D_0x10000 = 11,

        GX_CAPTURE_DEST_VRAM_A_0x18000 = 12,
        GX_CAPTURE_DEST_VRAM_B_0x18000 = 13,
        GX_CAPTURE_DEST_VRAM_C_0x18000 = 14,
        GX_CAPTURE_DEST_VRAM_D_0x18000 = 15
    }
    GXCaptureDest;

## Notes

In the LCD OFF state, some of the circuitry clocks in the GX are stopped, so the settings of this function are ignored.

## See Also

## Revision History

2009/02/25 Noted that the settings are ignored when state is LCD OFF.
2004/01/19 Initial version.

CONFIDENTIAL