1// --------------------------------------------------------------------------- 2// Project: NintendoWare 3// File: CalcVertexLighting.vsh 4// 5// Copyright (C)2009-2010 Nintendo Co., Ltd. All rights reserved. 6// 7// These coded instructions, statements, and computer programs contain 8// proprietary information of Nintendo of America Inc. and/or Nintendo 9// Company Ltd., and are protected by Federal copyright law. They may 10// not be disclosed to third parties or copied or duplicated in any form, 11// in whole or in part, without the prior written consent of Nintendo. 12// 13// $Revision:$ 14// --------------------------------------------------------------------------- 15 16#include "ShaderConfig.h" 17#include "VertexShader.h" 18 19//----------------------------------------------------------------------------- 20// @brief ���_���C�e�B���O���v�Z�� TEMP_COLO �Ɍ��ʂ������܂��B 21//----------------------------------------------------------------------------- 22l_calc_vertex_lighting: 23 mov TEMP1, nw_material_ambient._XYZW 24 mov TEMP2, nw_material_diffuse._XYZW 25 mov TEMP3, CONST_0 26 loop nw_vertex_light_count // ���[�v���ł�TEMP1,2,3�͎g�p�s�� 27 mova a0.x, TEMP3 28 mov TEMP4.x, VERTEX_LIGHT_UNIFORM(VERTEX_LIGHT_POSITION + a0.x)._W 29 mov TEMP4.y, VERTEX_LIGHT_UNIFORM(VERTEX_LIGHT_DISTANCE_ATTENUATION + a0.x)._W 30 cmp EQ, EQ, TEMP4.xy, CONST_0_1_1_1 31 ifc 1, 0, COND_MODE_STA0 // �f�B���N�V���i�����C�g�̏ꍇ 32 dp3 TEMP6.x, TEMP_NORM, VERTEX_LIGHT_UNIFORM(VERTEX_LIGHT_POSITION + a0.x)._XYZW 33 mov TEMP6.y, CONST_1 34 else // �|�C���g���C�g�E�X�|�b�g���C�g 35 // ���C�g�x�N�g�������߂� 36 sub TEMP4, VERTEX_LIGHT_UNIFORM(VERTEX_LIGHT_POSITION + a0.x)._XYZW, TEMP_POSI 37 mov TEMP6.y, CONST_1 38 ifc 0, 1, COND_MODE_STA1 // �����������s���ꍇ 39 mov TEMP5.x, CONST_1 40 dp3 TEMP5.z, TEMP4, TEMP4 41 mul TEMP5.y, TEMP5.z, TEMP5.z 42 dp3 TEMP6.y, TEMP5, VERTEX_LIGHT_UNIFORM(VERTEX_LIGHT_DISTANCE_ATTENUATION + a0.x)._XYZW 43 rcp TEMP6.y, TEMP6.y 44 endif 45 mov TEMP5, VERTEX_LIGHT_UNIFORM(VERTEX_LIGHT_SPOT_DIRECTION + a0.x)._XYZW 46 cmp EQ, EQ, TEMP5.ww, CONST_1 47 // ���C�g�x�N�g���K�� 48 dp3 TEMP4.w, TEMP4, TEMP4 49 rsq TEMP4.w, TEMP4.w 50 mul TEMP4, TEMP4, TEMP4.w 51 ifc 1, 0, COND_MODE_STA0 // �p�x�������s���ꍇ 52 dp3 TEMP5.x, -TEMP4, VERTEX_LIGHT_UNIFORM(VERTEX_LIGHT_SPOT_DIRECTION + a0.x)._XYZW 53 slt TEMP5.y, TEMP5.x, VERTEX_LIGHT_UNIFORM(VERTEX_LIGHT_SPOT_FACTOR + a0.x)._Y 54 cmp EQ, EQ, TEMP5.xy, CONST_1 55 ifc 0, 1, COND_MODE_STA1 56 mov TEMP5.x, CONST_0 57 else 58 log TEMP5.y, TEMP5.x 59 mul TEMP5.y, TEMP5.y, VERTEX_LIGHT_UNIFORM(VERTEX_LIGHT_SPOT_FACTOR + a0.x)._X 60 exp TEMP5.x, TEMP5.y 61 endif 62 mul TEMP6.y, TEMP6.y, TEMP5.x 63 endif 64 dp3 TEMP6.x, TEMP_NORM, TEMP4 65 endif 66 // TEMP6.x�ɂ͖@���ƃ��C�g�x�N�g���̓��ρATEMP6.y�ɂ͌����W���������Ă��� 67 cmp EQ, GT, TEMP6.xy, CONST_0 68 ifc 0, 1, COND_MODE_STA1 // �����W�����O�ȉ��̏ꍇ�̓��C�g�̉e�����Ȃ� 69 max TEMP6.x, TEMP6.x, CONST_0 70 mad TEMP_COLO.xyz, TEMP1.xyz, VERTEX_LIGHT_UNIFORM(VERTEX_LIGHT_AMBIENT + a0.x)._XYZ, TEMP_COLO.xyz 71 mul TEMP4, TEMP2, VERTEX_LIGHT_UNIFORM(VERTEX_LIGHT_DIFFUSE + a0.x)._XYZW 72 mul TEMP5.xyz, TEMP6.xxx, TEMP4.xyz 73 mul TEMP5.xyz, TEMP6.yyy, TEMP5.xyz 74 add TEMP_COLO.xyz, TEMP_COLO.xyz, TEMP5.xyz 75 add TEMP_COLO.w, TEMP_COLO.w, TEMP4.w 76 endif 77 sub TEMP3, TEMP3, CONST_6 78 endloop 79 mov TEMP_STUS.x, CONST_1 80 ret 81