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