static.c 10.4 KB

/**************************************************************************
 *                                                                        *
 *               Copyright (C) 1995, Silicon Graphics, Inc.               *
 *                                                                        *
 *  These coded instructions, statements, and computer programs  contain  *
 *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
 *  are protected by Federal copyright  law.  They  may not be disclosed  *
 *  to  third  parties  or copied or duplicated in any form, in whole or  *
 *  in part, without the prior written consent of Silicon Graphics, Inc.  *
 *                                                                        *
 *************************************************************************/

/*
 * File:	static.c
 * Create Date:	Tue Apr 11 17:45:53 PDT 1995
 *
 * This file holds display list segments that are 'static' data.
 *
 */

#include <ultra64.h>
#include "app.h"
#include "texture.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 */
};

/* initialize the RSP state: */
Gfx rspinit_dl[] = {
    gsSPViewport(&vp),
    gsSPClearGeometryMode(G_SHADE | G_SHADING_SMOOTH | G_CULL_BOTH |
			  G_FOG | G_LIGHTING | G_TEXTURE_GEN |
			  G_TEXTURE_GEN_LINEAR | G_LOD),
    gsSPTexture(0, 0, 0, 0, G_OFF),
    gsSPSetGeometryMode(G_SHADE | G_SHADING_SMOOTH),
    gsSPEndDisplayList(),
};

/* initialize the RDP state: */
Gfx rdpinit_dl[] = {
    gsDPSetCycleType(G_CYC_1CYCLE),
    gsDPPipelineMode(G_PM_1PRIMITIVE),
    gsDPSetScissor(G_SC_NON_INTERLACE, 0, 0, SCREEN_WD, SCREEN_HT),
    gsDPSetTextureLOD(G_TL_TILE),
    gsDPSetTextureLUT(G_TT_NONE),
    gsDPSetTextureDetail(G_TD_CLAMP),
    gsDPSetTexturePersp(G_TP_PERSP),
    gsDPSetTextureFilter(G_TF_BILERP),
    gsDPSetTextureConvert(G_TC_FILT),
    gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
    gsDPSetCombineKey(G_CK_NONE),
    gsDPSetAlphaCompare(G_AC_NONE),
    gsDPSetRenderMode(G_RM_OPA_SURF, G_RM_OPA_SURF2),
    gsDPSetColorDither(G_CD_DISABLE),
	gsDPSetMaskImage(rsp_czb),
    gsDPPipeSync(),
    gsSPEndDisplayList(),
};


/* clear the color frame buffer: */

Gfx clearcfb_dl[] = {
    gsDPPipeSync(),
    gsDPSetCycleType(G_CYC_FILL),
    gsDPSetColorImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WD, rsp_cfb),
    gsDPSetFillColor(GPACK_RGBA5551(64,64,255,1) << 16 | 
		     GPACK_RGBA5551(64,64,255,1)),
    gsDPFillRectangle(0, 0, SCREEN_WD-1, SCREEN_HT-1),
    gsSPEndDisplayList(),
};

Gfx clearczb_dl[] = {
    gsDPPipeSync(),
    gsDPSetCycleType(G_CYC_FILL),
    gsDPSetColorImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WD, rsp_czb),
	gsDPSetFillColor(GPACK_ZDZ(G_MAXFBZ, 0) << 16 | GPACK_ZDZ(G_MAXFBZ, 0)),
    gsDPFillRectangle(0, 0, SCREEN_WD-1, SCREEN_HT-1),
    gsSPEndDisplayList(),
};


/* 
 * This group of vertices, and accompanying display list, demonstrate
 * simple Gouraud triangles:
 */
static Vtx shade_vtx[] =  {
        {        -64,  64, -5, 0, 0, 0, 0, 0xff, 0, 0xff	},
        {         64,  64, -5, 0, 0, 0, 0, 0, 0, 0xff	},
        {         64, -64, -5, 0, 0, 0, 0, 0, 0xff, 0xff	},
        {        -64, -64, -5, 0, 0, 0, 0xff, 0, 0, 0xff	},
};

Gfx shadetri_dl[] = {
    gsSPMatrix(OS_K0_TO_PHYSICAL(&(dynamic.projection)),
	       G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
    gsSPMatrix(OS_K0_TO_PHYSICAL(&(dynamic.viewing)),
	       G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
    /*
     * Setup display modes antialiased in 1 cycle
     */
    gsDPPipeSync(),
    gsDPSetCycleType(G_CYC_1CYCLE),
    gsSPClearGeometryMode(G_CULL_BACK),
    gsSPSetGeometryMode(G_SHADE | G_SHADING_SMOOTH | G_ZBUFFER),
    gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
    gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2),
    gsSPVertex(&(shade_vtx[0]), 4, 0),
    gsSP1Triangle(0, 1, 2, 0),
    gsSP1Triangle(0, 2, 3, 0),
    gsSPEndDisplayList(),
};


/* 
 * This group of vertices, and accompanying display list, demonstrate
 * simple textured triangles.
 *
 * The texture coordinates are texel-space coordinates that
 * are shifted up 6 bits; 5 bits because the texture coordinates
 * are S10.5 format, and 1 more bit so we can use a texture scaling
 * of 0.5, and get exact coordinates.
 *
 * The coordinates larger than the texture resolution, along with the
 * proper mode settings, cause the texture to repeat on itself.
 */
static Vtx tex_vtx[] =  {
        { -64,  64, -5, 0, (  0 << 6), (  0 << 6), 0xff, 0xff, 0xff, 0xff},
        {  64,  64, -5, 0, (127 << 6), (  0 << 6), 0xff, 0xff, 0xff, 0xff},
        {  64, -64, -5, 0, (127 << 6), (127 << 6), 0xff, 0xff, 0xff, 0xff},
        { -64, -64, -5, 0, (  0 << 6), (127 << 6), 0xff, 0xff, 0xff, 0xff},
};


Gfx textri_dl[] = {
    gsSPMatrix(OS_K0_TO_PHYSICAL(&(dynamic.projection)),
	       G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
    gsSPMatrix(OS_K0_TO_PHYSICAL(&(dynamic.viewing)),
	       G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
    gsDPPipeSync(),
    gsDPSetCycleType(G_CYC_1CYCLE),
    gsDPSetRenderMode(G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2),
    gsSPClearGeometryMode(G_SHADE | G_SHADING_SMOOTH),
    /*
     * The texture scaling parameters are .16 format. In order to
     * get an exact texture scale of 1.0, we scale above by 2.0, and
     * scale down here by 0.5
     */
    gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON),
    gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB),
    gsDPSetTextureFilter(G_TF_BILERP),
    gsDPLoadTextureBlock(RGBA16dana, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0,
			 G_TX_WRAP | G_TX_MIRROR, G_TX_WRAP | G_TX_MIRROR,
			 5, 5, G_TX_NOLOD, G_TX_NOLOD),
    gsSPVertex(&(tex_vtx[0]), 4, 0),
    gsSP1Triangle(0, 1, 2, 0),
    gsSP1Triangle(0, 2, 3, 0),
    gsSPTexture(0, 0, 0, 0, G_OFF), /* done; turn texture off */
    gsSPEndDisplayList(),
};



/*
 *  Mandrill image, CI 8 test
 */
static 
  Vtx mandrill_vtx[] = {
{  -16, -20, -20, 0,  (0 << 6),  (0 << 6), 255,   0,   0, 255 },
{  -16,  19, -20, 0,  (0 << 6), (40 << 6),   0, 255,   0, 255 },
{   15,  19, -20, 0, (32 << 6), (40 << 6),   0,   0, 255, 255 },
{   15, -20, -20, 0, (32 << 6),  (0 << 6), 255, 255, 255, 255 },
};

Gfx mandrill_dl[] = {

    gsDPPipeSync(),
    gsSPClearGeometryMode(G_CULL_BACK),
    gsDPSetCycleType(G_CYC_1CYCLE),
    gsDPSetTextureLOD(G_TL_TILE),
    gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2),
    gsDPSetTextureLUT(G_TT_RGBA16),
    gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
    gsDPPipeSync(), /* for image pointer */

    gsDPLoadTLUT_pal256(CI8mandrilltlut),
    gsDPPipeSync(), /* for image pointer */

    gsSPEndDisplayList()
};


Gfx mandrill_face_dl[] = {
    gsSPVertex(&mandrill_vtx[0], 4, 0),
    gsSP1Triangle(0, 1, 2, 0),
    gsSP1Triangle(0, 2, 3, 0),

    gsSPEndDisplayList()
};

/*
 *  Mandrill image, RGBA 32 test
 */
static 
  Vtx mandrill32_vtx[] = {
{  -16, -20, -20, 0,  (0 << 6),  (0 << 6), 255,   0,   0, 255 },
{  -16,  19, -20, 0,  (0 << 6), (31 << 6),   0, 255,   0, 255 },
{   15,  19, -20, 0, (31 << 6), (31 << 6),   0,   0, 255, 255 },
{   15, -20, -20, 0, (31 << 6),  (0 << 6), 255, 255, 255, 255 },
};

Gfx mandrill32_dl[] = {

    gsDPPipeSync(),
    gsSPClearGeometryMode(G_CULL_BACK),
    gsDPSetCycleType(G_CYC_1CYCLE),
    gsDPSetTextureLOD(G_TL_TILE),
    gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2),
    gsDPSetTextureLUT(G_TT_NONE),
    gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
    gsDPPipeSync(), /* for image pointer */

    gsSPEndDisplayList()
};

Gfx mandrill4_dl[] = {

    gsDPPipeSync(),
    gsSPClearGeometryMode(G_CULL_BACK),
    gsDPSetCycleType(G_CYC_1CYCLE),
    gsDPSetTextureLOD(G_TL_TILE),
    gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2),
    gsDPSetTextureLUT(G_TT_NONE),
	gsDPSetPrimColor(0, 0, 0x00, 0x1f, 0x00, 0xff),
	gsDPSetEnvColor(0xff, 0x00, 0xff, 0xff),
    gsDPSetCombineMode(_G_CC_BLENDPE, _G_CC_BLENDPE),
    gsDPPipeSync(), /* for image pointer */

    gsSPEndDisplayList()
};


Gfx mandrill32_face_dl[] = {
    gsSPVertex(&mandrill32_vtx[0], 4, 0),
    gsSP1Triangle(0, 1, 2, 0),
    gsSP1Triangle(0, 2, 3, 0),

    gsSPEndDisplayList()
};

/*
 *  Color Index test
 */
Gfx ci_load_4b[] = {
  gsDPLoadTLUT_pal16(0, palette0),
  gsDPLoadTLUT_pal16(1, palette1),
  gsDPLoadTLUT_pal16(2, palette2),
  gsDPLoadTLUT_pal16(3, palette3),
  gsDPLoadTLUT_pal16(4, palette4),
  gsDPLoadTLUT_pal16(5, palette5),
  gsDPLoadTLUT_pal16(6, palette6),
  gsDPLoadTLUT_pal16(7, palette7),
  gsDPLoadTLUT_pal16(8, palette8),
  gsDPLoadTLUT_pal16(9, palette9),
  gsDPLoadTLUT_pal16(10, palette10),
  gsDPLoadTLUT_pal16(11, palette11),
  gsDPLoadTLUT_pal16(12, palette12),
  gsDPLoadTLUT_pal16(13, palette13),
  gsDPLoadTLUT_pal16(14, palette14),
  gsDPLoadTLUT_pal16(15, palette15),
  gsDPLoadTextureBlock_4b(CI4ramp, G_IM_FMT_CI, 16, 1, 0,
	0, 0, 0, 0, G_TX_NOLOD, G_TX_NOLOD),
  gsSPEndDisplayList()
};

#define INVERT_TEX_PRIM		1, TEXEL0, PRIMITIVE, 0, 0, 0, 0, TEXEL0

#include "ci_test_vtx.h"

Gfx ci_face[] = {

  gsDPPipeSync(),
  gsSPMatrix(OS_K0_TO_PHYSICAL(&(dynamic.projection)),
	       G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPMatrix(OS_K0_TO_PHYSICAL(&(dynamic.viewing)),
	       G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
  gsDPSetCycleType(G_CYC_1CYCLE),
  gsDPSetTextureLOD(G_TL_TILE),
  gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2),
  gsDPSetTextureLUT(G_TT_RGBA16),
  gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
  gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB),

  gsDPNoOpTag(0x411411),
  gsSPVertex(&ci_test_vtx[0], 4, 0),
  gsSP1Triangle(0, 1, 2, 0),
  gsSP1Triangle(0, 2, 3, 0),
  gsDPNoOpTag(0x511511),

 gsSPEndDisplayList()
};


/*
 *  Color Index test, 256-bit
 */
Gfx ci_face_8b[] = {

  gsDPPipeSync(),
  gsSPMatrix(OS_K0_TO_PHYSICAL(&(dynamic.projection)),
	       G_MTX_PROJECTION|G_MTX_LOAD|G_MTX_NOPUSH),
  gsSPMatrix(OS_K0_TO_PHYSICAL(&(dynamic.viewing)),
	       G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH),
  gsDPSetCycleType(G_CYC_1CYCLE),
  gsDPSetTextureLOD(G_TL_TILE),
  gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2),
  gsDPSetTextureLUT(G_TT_IA16),
  gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB),

  gsDPLoadTLUT_pal256(palette256),
  gsDPLoadTextureBlock(CI8ramp, G_IM_FMT_CI, G_IM_SIZ_8b, 256, 1, 0,
	G_TX_MIRROR, G_TX_WRAP,
    0, 0, G_TX_NOLOD, G_TX_NOLOD),

  gsDPNoOpTag(0x411411),
  gsSPVertex(&ci_test_vtx[4], 4, 0),
  gsSP1Triangle(0, 1, 2, 0),
  gsSP1Triangle(0, 2, 3, 0),
  gsDPNoOpTag(0x511511),

 gsSPEndDisplayList()
};