gfxinit.c 4.54 KB
/*====================================================================
 * gfxinit.c
 *
 * Synopsis:
 *
 * mostly pinched from rdpcov written by hsa
 *
 * Copyright 1993, Silicon Graphics, Inc.
 * All Rights Reserved.
 *
 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
 * Inc.; the contents of this file may not be disclosed to third
 * parties, copied or duplicated in any form, in whole or in part,
 * without the prior written permission of Silicon Graphics, Inc.
 *
 * RESTRICTED RIGHTS LEGEND:
 * Use, duplication or disclosure by the Government is subject to
 * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
 * in Technical Data and Computer Software clause at DFARS
 * 252.227-7013, and/or in similar or successor clauses in the FAR,
 * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
 * Copyright Laws of the United States.
 *====================================================================*/

#include <ultra64.h>
#include "gfx.h"

/*
 * Remember, viewport structures have 2 bits of fraction in them.
 */
static Vp vp = {
    SCREEN_WD*2, SCREEN_HT*2, G_MAXZ/2, 0,	/* scale */
    SCREEN_WD*2, SCREEN_HT*2, G_MAXZ/2, 0,	/* translate */
};

Gfx setup_rdpstate[] = {

    /*
     * This RDP initialization sequence will setup the following modes
     *
     * 1 cycle mode, point sampled, non-zbuffer, smooth shaded opaque polygons
     */

    /*
     * scissor must be larger than background clear rectangle
     */

    /* dp */	gsDPSetScissor(G_SC_NON_INTERLACE, 0, 0, SCREEN_WD, SCREEN_HT),
    /* dp */	gsDPSetCycleType(G_CYC_1CYCLE),
    /* dp */	gsDPPipelineMode(G_PM_1PRIMITIVE),

    /* cc */	gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
    /* cc */	gsDPSetCombineKey(G_CK_NONE),
    /* bl */	gsDPSetAlphaCompare(G_AC_NONE),
    /* bl */	gsDPSetDepthSource(G_ZS_PIXEL),
    /* bl */	gsDPSetRenderMode(G_RM_OPA_SURF, G_RM_OPA_SURF2),
    /* bl */	gsDPSetBlendMask(0xff),

    /* mi */	gsDPSetColorDither(G_CD_DISABLE),

    gsSPEndDisplayList(),
};

Gfx setup_rspstate[] = {
    gsSPViewport(&vp),
    gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH | G_CULL_BACK),
    gsSPEndDisplayList(),
};

/*
 * Acorn says that for lighting to work properly the viewing matrix must
 * be incorporated into the projection matrix, not the "modelview" matrix.
 */
Gfx sun_matrix[] = {
  gsSPMatrix(&dynamic.projection, G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.viewing_sun, G_MTX_PROJECTION|G_MTX_MUL|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.sun, G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPEndDisplayList(),
};
Gfx mercury_matrix[] = {
  gsSPMatrix(&dynamic.projection, G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.viewing_mercury, G_MTX_PROJECTION|G_MTX_MUL|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.mercury, G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPEndDisplayList(),
};
Gfx venus_matrix[] = {
  gsSPMatrix(&dynamic.projection, G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.viewing_venus, G_MTX_PROJECTION|G_MTX_MUL|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.venus, G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPEndDisplayList(),
};
Gfx earth_matrix[] = {
  gsSPMatrix(&dynamic.projection, G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.viewing_earth, G_MTX_PROJECTION|G_MTX_MUL|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.earth, G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPEndDisplayList(),
};
Gfx enterprise_earth_matrix[] = {
  gsSPMatrix(&dynamic.projection, G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.viewing, G_MTX_PROJECTION|G_MTX_MUL|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.enterprise_earth,G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPEndDisplayList(),
};
Gfx enterprise_venus_matrix[] = {
  gsSPMatrix(&dynamic.projection, G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.viewing, G_MTX_PROJECTION|G_MTX_MUL|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.enterprise_venus,G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPEndDisplayList(),
};
Gfx enterprise_mercury_matrix[] = {
  gsSPMatrix(&dynamic.projection, G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.viewing, G_MTX_PROJECTION|G_MTX_MUL|G_MTX_NOPUSH),
  gsSPMatrix(&dynamic.enterprise_mercury,
                                  G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPEndDisplayList(),
};
Gfx model_1_matrix[] = {
    gsSPMatrix(&dynamic.projection, G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
    gsSPMatrix(&dynamic.viewing, G_MTX_PROJECTION|G_MTX_MUL|G_MTX_NOPUSH),
    gsSPMatrix(&dynamic.model1, G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
    gsSPEndDisplayList(),
};