Path: blob/master/libmupen64plus/mupen64plus-video-glide64/src/Util.h
2 views
/*1* Glide64 - Glide video plugin for Nintendo 64 emulators.2* Copyright (c) 2002 Dave20013*4* This program is free software; you can redistribute it and/or modify5* it under the terms of the GNU General Public License as published by6* the Free Software Foundation; either version 2 of the License, or7* any later version.8*9* This program is distributed in the hope that it will be useful,10* but WITHOUT ANY WARRANTY; without even the implied warranty of11* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12* GNU General Public License for more details.13*14* You should have received a copy of the GNU General Public15* License along with this program; if not, write to the Free16* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,17* Boston, MA 02110-1301, USA18*/1920//****************************************************************21//22// Glide64 - Glide Plugin for Nintendo 64 emulators (tested mostly with Project64)23// Project started on December 29th, 200124//25// To modify Glide64:26// * Write your name and (optional)email, commented by your work, so I know who did it, and so that you can find which parts you modified when it comes time to send it to me.27// * Do NOT send me the whole project or file that you modified. Take out your modified code sections, and tell me where to put them. If people sent the whole thing, I would have many different versions, but no idea how to combine them all.28//29// Official Glide64 development channel: #Glide64 on EFnet30//31// Original author: Dave2001 ([email protected])32// Other authors: Gonetz, Gugaman33//34//****************************************************************3536#ifndef Util_H37#define Util_H3839#include "winlnxdefs.h"40#include "rdp.h"4142#define NOT_TMU0 0x0043#define NOT_TMU1 0x0144#define NOT_TMU2 0x024546void util_init ();47void clip_z ();48void clip_tri (WORD linew = 0);4950BOOL cull_tri (VERTEX **v);51void DrawTri (VERTEX **v, WORD linew = 0);52void do_triangle_stuff (WORD linew = 0);53void do_triangle_stuff_2 (WORD linew = 0);54void add_tri (VERTEX *v, int n, int type);55void apply_shade_mods (VERTEX *v);5657void update ();58void update_scissor ();5960void set_message_combiner ();6162void fix_tex_coord (VERTEX **v);6364// positional and texel coordinate clipping65#define CCLIP(ux,lx,ut,lt,uc,lc) \66if (ux > lx || lx < uc || ux > lc) { rdp.tri_n += 2; return; } \67if (ux < uc) { \68float p = (uc-ux)/(lx-ux); \69ut = p*(lt-ut)+ut; \70ux = uc; \71} \72if (lx > lc) { \73float p = (lc-ux)/(lx-ux); \74lt = p*(lt-ut)+ut; \75lx = lc; \76}7778#define CCLIP2(ux,lx,ut,lt,un,ln,uc,lc) \79if (ux > lx || lx < uc || ux > lc) { rdp.tri_n += 2; return; } \80if (ux < uc) { \81float p = (uc-ux)/(lx-ux); \82ut = p*(lt-ut)+ut; \83un = p*(ln-un)+un; \84ux = uc; \85} \86if (lx > lc) { \87float p = (lc-ux)/(lx-ux); \88lt = p*(lt-ut)+ut; \89ln = p*(ln-un)+un; \90lx = lc; \91}9293#endif // ifndef Util_H94959697