Main Page | Alphabetical List | Compound List | File List | Compound Members | File Members

span.c

Go to the documentation of this file.
00001 /****************************************************************************************/
00002 /*  Span.C                                                                              */
00003 /*                                                                                      */
00004 /*  Author: Mike Sandige                                                                */
00005 /*  Description:  Span abstracts and contains all the various ROP functions.            */
00006 /*                                                                                      */
00007 /*  The contents of this file are subject to the Genesis3D Public License               */
00008 /*  Version 1.01 (the "License"); you may not use this file except in                   */
00009 /*  compliance with the License. You may obtain a copy of the License at                */
00010 /*  http://www.genesis3d.com                                                            */
00011 /*                                                                                      */
00012 /*  Software distributed under the License is distributed on an "AS IS"                 */
00013 /*  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See                */
00014 /*  the License for the specific language governing rights and limitations              */
00015 /*  under the License.                                                                  */
00016 /*                                                                                      */
00017 /*  The Original Code is Genesis3D, released March 25, 1999.                            */
00018 /*Genesis3D Version 1.1 released November 15, 1999                            */
00019 /*  Copyright (C) 1999 WildTangent, Inc. All Rights Reserved           */
00020 /*                                                                                      */
00021 /****************************************************************************************/
00022 #include <assert.h>
00023 #include "span.h"
00024 #include "Triangle.h"
00025 
00026 
00027 int32 URight, VRight, RRight,GRight,BRight;     // Globals for optimal access and sharing 
00028                                                                                         // between the lighting sampler and the rop 
00029                                                                                         // span functions
00030 
00031 void GENESISCC Span_LightMapSample(void);
00032 
00033 
00034 typedef struct
00035 {
00036         geROP ROP;
00037 
00038         Span_DrawFunction Active;
00039         Span_DrawFunction Function[GE_SPAN_HARDWARE_VERSIONS][GE_SPAN_DESTINATION_FORMATS];
00040 } Span_FunctionTableEntry;
00041 
00042 
00043 void GENESISCC Span_C_TMAP_LMAP_Z1(void);
00044 
00045 #define SPANROP LSHADE
00046                 void GENESISCC Span_C_LSHADE_555(void) {
00047                                 #include "Span_Factory.h"
00048                                 }
00049                 #define SPANROP LSHADE + D565
00050                 void GENESISCC Span_C_LSHADE_565(void) {
00051                                 #include "Span_Factory.h"
00052                                 }
00053 
00054 #define SPANROP LSHADE + ZSET 
00055                 void GENESISCC Span_C_LSHADE_ZSET_555(void)     {
00056                                 #include "Span_Factory.h"
00057                                 }
00058                 #define SPANROP LSHADE + ZSET + D565
00059                 void GENESISCC Span_C_LSHADE_ZSET_565(void) {
00060                                 #include "Span_Factory.h"
00061                                 }
00062 
00063 #define SPANROP LSHADE + ZTEST 
00064                 void GENESISCC Span_C_LSHADE_ZTEST_555(void) {
00065                                 #include "Span_Factory.h"
00066                                 }
00067                 #define SPANROP LSHADE + ZTEST + D565
00068                 void GENESISCC Span_C_LSHADE_ZTEST_565(void) {
00069                                 #include "Span_Factory.h"
00070                                 }
00071 
00072 #define SPANROP LSHADE + ZTEST + ZSET
00073                 void GENESISCC Span_C_LSHADE_ZTEST_ZSET_555(void) {
00074                                 #include "Span_Factory.h"
00075                                 }
00076                 #define SPANROP LSHADE + ZTEST + ZSET + D565
00077                 void GENESISCC Span_C_LSHADE_ZTEST_ZSET_565(void) {
00078                                 #include "Span_Factory.h"
00079                                 }
00080 
00081 #define SPANROP LSHADE + AFLAT
00082                 void GENESISCC Span_C_LSHADE_AFLAT_555(void) {
00083                                 #include "Span_Factory.h"
00084                                 }
00085                 #define SPANROP LSHADE + AFLAT + D565
00086                 void GENESISCC Span_C_LSHADE_AFLAT_565(void) {
00087                                 #include "Span_Factory.h"
00088                                 }
00089 
00090 #define SPANROP LSHADE + AFLAT + ZSET
00091                 void GENESISCC Span_C_LSHADE_AFLAT_ZSET_555(void) {
00092                                 #include "Span_Factory.h"
00093                                 }
00094                 #define SPANROP LSHADE + AFLAT + ZSET + D565
00095                 void GENESISCC Span_C_LSHADE_AFLAT_ZSET_565(void) {
00096                                 #include "Span_Factory.h"
00097                                 }
00098 
00099 #define SPANROP LSHADE + AFLAT + ZTEST
00100                 void GENESISCC Span_C_LSHADE_AFLAT_ZTEST_555(void) {
00101                                 #include "Span_Factory.h"
00102                                 }
00103                 #define SPANROP LSHADE + AFLAT + ZTEST + D565
00104                 void GENESISCC Span_C_LSHADE_AFLAT_ZTEST_565(void) {
00105                                 #include "Span_Factory.h"
00106                                 }
00107 
00108 #define SPANROP LSHADE + AFLAT + ZTEST + ZSET
00109                 void GENESISCC Span_C_LSHADE_AFLAT_ZTEST_ZSET_555(void) {
00110                                 #include "Span_Factory.h"
00111                                 }
00112                 #define SPANROP LSHADE + AFLAT + ZTEST + ZSET + D565
00113                 void GENESISCC Span_C_LSHADE_AFLAT_ZTEST_ZSET_565(void) {
00114                                 #include "Span_Factory.h"
00115                                 }
00116 
00117 #define SPANROP TMAP + LSHADE 
00118                 void GENESISCC Span_C_TMAP_LSHADE_555(void) {
00119                                 #include "Span_Factory.h"
00120                                 }
00121                 #define SPANROP TMAP + LSHADE + D565
00122                 void GENESISCC Span_C_TMAP_LSHADE_565(void) {
00123                                 #include "Span_Factory.h"
00124                                 }
00125 
00126 #define SPANROP TMAP + LSHADE + ZSET
00127                 void GENESISCC Span_C_TMAP_LSHADE_ZSET_555(void) {
00128                                 #include "Span_Factory.h"
00129                                 }
00130                 #define SPANROP TMAP + LSHADE + ZSET + D565
00131                 void GENESISCC Span_C_TMAP_LSHADE_ZSET_565(void) {
00132                                 #include "Span_Factory.h"
00133                                 }
00134 
00135 #define SPANROP TMAP + LSHADE + ZTEST
00136                 void GENESISCC Span_C_TMAP_LSHADE_ZTEST_555(void) {
00137                                 #include "Span_Factory.h"
00138                                 }
00139                 #define SPANROP TMAP + LSHADE + ZTEST + D565
00140                 void GENESISCC Span_C_TMAP_LSHADE_ZTEST_565(void) {
00141                                 #include "Span_Factory.h"
00142                                 }
00143 
00144 #define SPANROP TMAP + LSHADE + ZTEST + ZSET
00145                 void GENESISCC Span_C_TMAP_LSHADE_ZTEST_ZSET_555(void) {
00146                                 #include "Span_Factory.h"
00147                                 }
00148                 #define SPANROP TMAP + LSHADE + ZTEST + ZSET + D565
00149                 void GENESISCC Span_C_TMAP_LSHADE_ZTEST_ZSET_565(void) {
00150                                 #include "Span_Factory.h"
00151                                 }
00152 
00153 #define SPANROP TMAP + LMAP + ZSET 
00154                 void GENESISCC Span_C_TMAP_LMAP_ZSET_555(void) {
00155                                 #include "Span_Factory.h"
00156                                 }
00157                 #define SPANROP TMAP + LMAP + ZSET + D565
00158                 void GENESISCC Span_C_TMAP_LMAP_ZSET_565(void) {
00159                                 #include "Span_Factory.h"
00160                                 }
00161 
00162 #define SPANROP TMAP + LMAP + ZTEST + ZSET 
00163                 void GENESISCC Span_C_TMAP_LMAP_ZTEST_ZSET_555(void) {
00164                                 #include "Span_Factory.h"
00165                                 }
00166                 #define SPANROP TMAP + LMAP + ZTEST + ZSET + D565
00167                 void GENESISCC Span_C_TMAP_LMAP_ZTEST_ZSET_565(void) {
00168                                 #include "Span_Factory.h"
00169                                 }
00170 
00171 #define SPANROP TMAP + LSHADE + AFLAT
00172                 void GENESISCC Span_C_TMAP_LSHADE_AFLAT_555(void) {
00173                                 #include "Span_Factory.h"
00174                                 }
00175                 #define SPANROP TMAP + LSHADE + AFLAT + D565
00176                 void GENESISCC Span_C_TMAP_LSHADE_AFLAT_565(void) {
00177                                 #include "Span_Factory.h"
00178                                 }
00179 
00180 #define SPANROP TMAP + LSHADE + AFLAT + ZSET
00181                 void GENESISCC Span_C_TMAP_LSHADE_AFLAT_ZSET_555(void) {
00182                                 #include "Span_Factory.h"
00183                                 }
00184                 #define SPANROP TMAP + LSHADE + AFLAT + ZSET + D565 
00185                 void GENESISCC Span_C_TMAP_LSHADE_AFLAT_ZSET_565(void) {
00186                                 #include "Span_Factory.h"
00187                                 }
00188 
00189 #define SPANROP TMAP + LSHADE + AFLAT + ZTEST
00190                 void GENESISCC Span_C_TMAP_LSHADE_AFLAT_ZTEST_555(void) {
00191                                 #include "Span_Factory.h"
00192                                 }
00193                 #define SPANROP TMAP + LSHADE + AFLAT + ZTEST + D565 
00194                 void GENESISCC Span_C_TMAP_LSHADE_AFLAT_ZTEST_565(void) {
00195                                 #include "Span_Factory.h"
00196                                 }
00197 
00198 #define SPANROP TMAP + LSHADE + AFLAT + ZTEST + ZSET
00199                 void GENESISCC Span_C_TMAP_LSHADE_AFLAT_ZTEST_ZSET_555(void) {
00200                                 #include "Span_Factory.h"
00201                                 }
00202                 #define SPANROP TMAP + LSHADE + AFLAT + ZTEST + ZSET + D565 
00203                 void GENESISCC Span_C_TMAP_LSHADE_AFLAT_ZTEST_ZSET_565(void) {
00204                                 #include "Span_Factory.h"
00205                                 }
00206 
00207 #define SPANROP TMAP + LSHADE + AMAP 
00208                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_555(void) {
00209                                 #include "Span_Factory.h"
00210                                 }
00211                 #define SPANROP TMAP + LSHADE + AMAP + D565
00212                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_565(void) {
00213                                 #include "Span_Factory.h"
00214                                 }
00215 
00216 #define SPANROP TMAP + LSHADE + AMAP + ZSET
00217                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_ZSET_555(void) {
00218                                 #include "Span_Factory.h"
00219                                 }
00220                 #define SPANROP TMAP + LSHADE + AMAP + ZSET + D565
00221                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_ZSET_565(void) {
00222                                 #include "Span_Factory.h"
00223                                 }
00224 
00225 #define SPANROP TMAP + LSHADE + AMAP + ZTEST
00226                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_ZTEST_555(void) {
00227                                 #include "Span_Factory.h"
00228                                 }
00229                 #define SPANROP TMAP + LSHADE + AMAP + ZTEST + D565
00230                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_ZTEST_565(void) {
00231                                 #include "Span_Factory.h"
00232                                 }
00233 
00234 #define SPANROP TMAP + LSHADE + AMAP + ZTEST + ZSET
00235                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_ZTEST_ZSET_555(void) {
00236                                 #include "Span_Factory.h"
00237                                 }
00238                 #define SPANROP TMAP + LSHADE + AMAP + ZTEST + ZSET + D565
00239                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_ZTEST_ZSET_565(void) {
00240                                 #include "Span_Factory.h"
00241                                 }
00242 
00243 #define SPANROP TMAP + LMAP + AMAP 
00244                 void GENESISCC Span_C_TMAP_LMAP_AMAP_555(void) {
00245                                 #include "Span_Factory.h"
00246                                 }
00247                 #define SPANROP TMAP + LMAP + AMAP + D565
00248                 void GENESISCC Span_C_TMAP_LMAP_AMAP_565(void) {
00249                                 #include "Span_Factory.h"
00250                                 }
00251 
00252 #define SPANROP TMAP + LMAP + AMAP + ZSET
00253                 void GENESISCC Span_C_TMAP_LMAP_AMAP_ZSET_555(void) {
00254                                 #include "Span_Factory.h"
00255                                 }
00256                 #define SPANROP TMAP + LMAP + AMAP + ZSET + D565
00257                 void GENESISCC Span_C_TMAP_LMAP_AMAP_ZSET_565(void) {
00258                                 #include "Span_Factory.h"
00259                                 }
00260 
00261 #define SPANROP TMAP + LMAP + AMAP + ZTEST
00262                 void GENESISCC Span_C_TMAP_LMAP_AMAP_ZTEST_555(void) {
00263                                 #include "Span_Factory.h"
00264                                 }
00265                 #define SPANROP TMAP + LMAP + AMAP + ZTEST + D565
00266                 void GENESISCC Span_C_TMAP_LMAP_AMAP_ZTEST_565(void) {
00267                                 #include "Span_Factory.h"
00268                                 }
00269 
00270 #define SPANROP TMAP + LMAP + AMAP + ZTEST + ZSET
00271                 void GENESISCC Span_C_TMAP_LMAP_AMAP_ZTEST_ZSET_555(void) {
00272                                 #include "Span_Factory.h"
00273                                 }
00274                 #define SPANROP TMAP + LMAP + AMAP + ZTEST + ZSET + D565
00275                 void GENESISCC Span_C_TMAP_LMAP_AMAP_ZTEST_ZSET_565(void) {
00276                                 #include "Span_Factory.h"
00277                                 }
00278 
00279 #define SPANROP TMAP + LMAP + AFLAT + ZTEST + ZSET
00280                 void GENESISCC Span_C_TMAP_LMAP_AFLAT_ZTEST_ZSET_555(void) {
00281                                 #include "Span_Factory.h"
00282                                 }
00283                 #define SPANROP TMAP + LMAP + AFLAT + ZTEST + ZSET + D565
00284                 void GENESISCC Span_C_TMAP_LMAP_AFLAT_ZTEST_ZSET_565(void) {
00285                                 #include "Span_Factory.h"
00286                                 }
00287 
00288 #define SPANROP TMAP + LSHADE + AMAP + AFLAT 
00289                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_AFLAT_555(void) {
00290                                 #include "Span_Factory.h"
00291                                 }
00292                 #define SPANROP TMAP + LSHADE + AMAP + AFLAT + D565
00293                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_AFLAT_565(void) {
00294                                 #include "Span_Factory.h"
00295                                 }
00296 
00297 #define SPANROP TMAP + LSHADE + AMAP + AFLAT + ZSET 
00298                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_AFLAT_ZSET_555(void) {
00299                                 #include "Span_Factory.h"
00300                                 }
00301                 #define SPANROP TMAP + LSHADE + AMAP + AFLAT + ZSET + D565
00302                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_AFLAT_ZSET_565(void) {
00303                                 #include "Span_Factory.h"
00304                                 }
00305 
00306 #define SPANROP TMAP + LSHADE + AMAP + AFLAT + ZTEST
00307                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_AFLAT_ZTEST_555(void) {
00308                                 #include "Span_Factory.h"
00309                                 }
00310                 #define SPANROP TMAP + LSHADE + AMAP + AFLAT + ZTEST + D565
00311                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_AFLAT_ZTEST_565(void) {
00312                                 #include "Span_Factory.h"
00313                                 }
00314 
00315 #define SPANROP TMAP + LSHADE + AMAP + AFLAT + ZTEST + ZSET
00316                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_AFLAT_ZTEST_ZSET_555(void) {
00317                                 #include "Span_Factory.h"
00318                                 }
00319                 #define SPANROP TMAP + LSHADE + AMAP + AFLAT + ZTEST + ZSET + D565
00320                 void GENESISCC Span_C_TMAP_LSHADE_AMAP_AFLAT_ZTEST_ZSET_565(void) {
00321                                 #include "Span_Factory.h"
00322                                 }
00323 
00324 
00325 Span_FunctionTableEntry Span_FunctionTable[GE_ROP_END] =
00326 {//ROP ID                                               
00327 {GE_ROP_LSHADE,                                         NULL,{{Span_C_LSHADE_555,Span_C_LSHADE_565},{NULL,NULL},{NULL,NULL}} },
00328 {GE_ROP_LSHADE_ZSET,                            NULL,{{Span_C_LSHADE_ZSET_555,Span_C_LSHADE_ZSET_565},{NULL,NULL},{NULL,NULL}} },
00329 {GE_ROP_LSHADE_ZTEST,                           NULL,{{Span_C_LSHADE_ZTEST_555,Span_C_LSHADE_ZTEST_565},{NULL,NULL},{NULL,NULL}} },     
00330 {GE_ROP_LSHADE_ZTESTSET,                        NULL,{{Span_C_LSHADE_ZTEST_ZSET_555,Span_C_LSHADE_ZTEST_ZSET_565},{NULL,NULL},{NULL,NULL}} },   
00331 {GE_ROP_LSHADE_AFLAT,                           NULL,{{Span_C_LSHADE_AFLAT_555,Span_C_LSHADE_AFLAT_565},{NULL,NULL},{NULL,NULL}} },
00332 {GE_ROP_LSHADE_AFLAT_ZSET,                      NULL,{{Span_C_LSHADE_AFLAT_ZSET_555,Span_C_LSHADE_AFLAT_ZSET_565},{NULL,NULL},{NULL,NULL}} },
00333 {GE_ROP_LSHADE_AFLAT_ZTEST,                     NULL,{{Span_C_LSHADE_AFLAT_ZTEST_555,Span_C_LSHADE_AFLAT_ZTEST_565},{NULL,NULL},{NULL,NULL}} },
00334 {GE_ROP_LSHADE_AFLAT_ZTESTSET,          NULL,{{Span_C_LSHADE_AFLAT_ZTEST_ZSET_555,Span_C_LSHADE_AFLAT_ZTEST_ZSET_565},{NULL,NULL},{NULL,NULL}} },
00335 {GE_ROP_TMAP_LSHADE,                            NULL,{{Span_C_TMAP_LSHADE_555,Span_C_TMAP_LSHADE_565},{NULL,NULL},{NULL,NULL}} },
00336 {GE_ROP_TMAP_LSHADE_ZSET,                       NULL,{{Span_C_TMAP_LSHADE_ZSET_555,Span_C_TMAP_LSHADE_ZSET_565},{NULL,NULL},{NULL,NULL}} },
00337 {GE_ROP_TMAP_LSHADE_ZTEST,              NULL,{{Span_C_TMAP_LSHADE_ZTEST_555,Span_C_TMAP_LSHADE_ZTEST_565},{NULL,NULL},{NULL,NULL}} },
00338 {GE_ROP_TMAP_LSHADE_ZTESTSET,           NULL,{{Span_C_TMAP_LSHADE_ZTEST_ZSET_555,Span_C_TMAP_LSHADE_ZTEST_ZSET_565},{NULL,NULL},{NULL,NULL}} },
00339 {GE_ROP_TMAP_LMAP_ZSET_SBUF,            NULL,{{Span_C_TMAP_LMAP_ZSET_555,Span_C_TMAP_LMAP_ZSET_565},{NULL,NULL},{NULL,NULL}} },
00340 {GE_ROP_TMAP_LSHADE_ZSET_SBUF,          NULL,{{Span_C_TMAP_LSHADE_ZSET_555,Span_C_TMAP_LSHADE_ZSET_565},{NULL,NULL},{NULL,NULL}} },
00341 {GE_ROP_TMAP_LMAP_ZTESTSET,                     NULL,{{Span_C_TMAP_LMAP_ZTEST_ZSET_555,Span_C_TMAP_LMAP_ZTEST_ZSET_565},{NULL,NULL},{NULL,NULL}} },
00342 {GE_ROP_TMAP_LSHADE_AFLAT,                      NULL,{{Span_C_TMAP_LSHADE_AFLAT_555,Span_C_TMAP_LSHADE_AFLAT_565},{NULL,NULL},{NULL,NULL}} },
00343 {GE_ROP_TMAP_LSHADE_AFLAT_ZSET,         NULL,{{Span_C_TMAP_LSHADE_AFLAT_ZSET_555,Span_C_TMAP_LSHADE_AFLAT_ZSET_565},{NULL,NULL},{NULL,NULL}} }, 
00344 {GE_ROP_TMAP_LSHADE_AFLAT_ZTEST,        NULL,{{Span_C_TMAP_LSHADE_AFLAT_ZTEST_555,Span_C_TMAP_LSHADE_AFLAT_ZTEST_565},{NULL,NULL},{NULL,NULL}} },       
00345 {GE_ROP_TMAP_LSHADE_AFLAT_ZTESTSET,     NULL,{{Span_C_TMAP_LSHADE_AFLAT_ZTEST_ZSET_555,Span_C_TMAP_LSHADE_AFLAT_ZTEST_ZSET_565},{NULL,NULL},{NULL,NULL}} },     
00346 {GE_ROP_TMAP_LSHADE_AMAP,                       NULL,{{Span_C_TMAP_LSHADE_AMAP_555,Span_C_TMAP_LSHADE_AMAP_565},{NULL,NULL},{NULL,NULL}} },     
00347 {GE_ROP_TMAP_LSHADE_AMAP_ZSET,          NULL,{{Span_C_TMAP_LSHADE_AMAP_ZSET_555,Span_C_TMAP_LSHADE_AMAP_ZSET_565},{NULL,NULL},{NULL,NULL}} },   
00348 {GE_ROP_TMAP_LSHADE_AMAP_ZTEST,         NULL,{{Span_C_TMAP_LSHADE_AMAP_ZTEST_555,Span_C_TMAP_LSHADE_AMAP_ZTEST_565},{NULL,NULL},{NULL,NULL}} }, 
00349 {GE_ROP_TMAP_LSHADE_AMAP_ZTESTSET,      NULL,{{Span_C_TMAP_LSHADE_AMAP_ZTEST_ZSET_555,Span_C_TMAP_LSHADE_AMAP_ZTEST_ZSET_565},{NULL,NULL},{NULL,NULL}} },       
00350 {GE_ROP_TMAP_LMAP_AMAP,                         NULL,{{Span_C_TMAP_LMAP_AMAP_555,Span_C_TMAP_LMAP_AMAP_565},{NULL,NULL},{NULL,NULL}} }, 
00351 {GE_ROP_TMAP_LMAP_AMAP_ZSET,            NULL,{{Span_C_TMAP_LMAP_AMAP_ZSET_555,Span_C_TMAP_LMAP_AMAP_ZSET_565},{NULL,NULL},{NULL,NULL}} },       
00352 {GE_ROP_TMAP_LMAP_AMAP_ZTEST,           NULL,{{Span_C_TMAP_LMAP_AMAP_ZTEST_555,Span_C_TMAP_LMAP_AMAP_ZTEST_565},{NULL,NULL},{NULL,NULL}} },     
00353 {GE_ROP_TMAP_LMAP_AMAP_ZTESTSET,        NULL,{{Span_C_TMAP_LMAP_AMAP_ZTEST_ZSET_555,Span_C_TMAP_LMAP_AMAP_ZTEST_ZSET_565},{NULL,NULL},{NULL,NULL}} },   
00354 {GE_ROP_TMAP_LMAP_AFLAT_ZTESTSET,       NULL,{{Span_C_TMAP_LMAP_AFLAT_ZTEST_ZSET_555,Span_C_TMAP_LMAP_AFLAT_ZTEST_ZSET_565},{NULL,NULL},{NULL,NULL}} }, 
00355 {GE_ROP_TMAP_LSHADE_AMAP_AFLAT,                 NULL,{{Span_C_TMAP_LSHADE_AMAP_AFLAT_555,Span_C_TMAP_LSHADE_AMAP_AFLAT_565},{NULL,NULL},{NULL,NULL}} }, 
00356 {GE_ROP_TMAP_LSHADE_AMAP_AFLAT_ZSET,    NULL,{{Span_C_TMAP_LSHADE_AMAP_AFLAT_ZSET_555,Span_C_TMAP_LSHADE_AMAP_AFLAT_ZSET_565},{NULL,NULL},{NULL,NULL}} },       
00357 {GE_ROP_TMAP_LSHADE_AMAP_AFLAT_ZTEST,   NULL,{{Span_C_TMAP_LSHADE_AMAP_AFLAT_ZTEST_555,Span_C_TMAP_LSHADE_AMAP_AFLAT_ZTEST_565},{NULL,NULL},{NULL,NULL}} },     
00358 {GE_ROP_TMAP_LSHADE_AMAP_AFLAT_ZTESTSET,NULL,{{Span_C_TMAP_LSHADE_AMAP_AFLAT_ZTEST_ZSET_555,Span_C_TMAP_LSHADE_AMAP_AFLAT_ZTEST_ZSET_565},{NULL,NULL},{NULL,NULL}} },   
00359 };
00360 
00361 
00362 geBoolean GENESISCC Span_SetOutputMode( geSpan_DestinationFormat DestFormat, geSpan_CPU CPU)
00363 {
00364         int i;
00365 
00366         assert( DestFormat >= 0 );
00367         assert( DestFormat < GE_SPAN_DESTINATION_FORMATS );
00368         assert( CPU >= 0 );
00369         assert( CPU < GE_SPAN_HARDWARE_VERSIONS );
00370 
00371         for (i=0; i< GE_ROP_END; i++)
00372                 {
00373                         assert( Span_FunctionTable[i].ROP == i );
00374                         Span_FunctionTable[i].Active = Span_FunctionTable[i].Function[GE_SPAN_HARDWARE_INTEL][DestFormat];
00375                         if (Span_FunctionTable[i].Function[CPU][DestFormat]!=NULL)
00376                                 Span_FunctionTable[i].Active = Span_FunctionTable[i].Function[CPU][DestFormat];
00377                 }
00378         return GE_TRUE;
00379 }
00380 
00381 Span_DrawFunction GENESISCC Span_GetDrawFunction(geROP ROP)
00382 {
00383         assert( ROP >= 0 );
00384         assert( ROP < GE_ROP_END );
00385         assert( Span_FunctionTable[ROP].ROP == ROP );
00386         assert( Span_FunctionTable[ROP].Active != NULL );
00387 
00388         return Span_FunctionTable[ROP].Active;
00389 }
00390 
00391                                                                         // Palette format is X B G R
00392                                                                         // 16 bit 555 format is xRGB
00393                                                 #ifdef NOISE_FILTER
00394                                                                                 *(DestBits++) = (DESTPIXEL) (   (((((Color&0xFF)*R)+Triangle.RandomTable[Triangle.RandomTableIndex++])>>16)&0x7C00) 
00395                                                                                                          |      ((((((Color&0xFF00)>>8)*G)+Triangle.RandomTable[Triangle.RandomTableIndex++])>>21)&0x3E0)
00396                                                                                                          |      (((((Color&0xFF0000)>>16)*B)+Triangle.RandomTable[Triangle.RandomTableIndex++])>>26) );
00397                                                 #endif
00398                                                 
00399 
00400 void GENESISCC Span_LightMapSample(void)
00401 {       // use bilinear filter to sample the lightmap 
00402         int32 LMU,LMV;
00403         unsigned char *LM0,*LM1;
00404         unsigned char *LM2,*LM3;
00405         int C01,C23;
00406         int UFract01,VFract01;
00407         
00408         LMU = ((URight - Triangle.LightMapShiftU)>>8) * Triangle.LightMapScaleU;
00409         //LMU = (URight>>8)*Triangle.LightMapScaleU - Triangle.LightMapShiftU;
00410         // Clamp LMU to stay bounded to lightmap (no tiling)
00411         if (LMU<0) LMU=0;
00412         if (LMU>Triangle.LightMapMaxU)  LMU = Triangle.LightMapMaxU;
00413 
00414         LMV = ((VRight - Triangle.LightMapShiftV)>>8) * Triangle.LightMapScaleV;
00415         //LMV = (VRight>>8)*Triangle.LightMapScaleV - Triangle.LightMapShiftV;
00416 
00417         // Clamp LMV to stay bounded to lightmap (no tiling)
00418         if (LMV<0) LMV=0;
00419         if (LMV>Triangle.LightMapMaxV) LMV = Triangle.LightMapMaxV;
00420         
00421         // address base corner into lightmap by LMU,LMV
00422         LM0 = Triangle.LightMapBits + (3*(LMU>>16) + TOPDOWN_OR_BOTTOMUP((LMV>>16) * Triangle.LightMapStride));
00423         #pragma message ("is there a clamping problem here somewhere?  see a hi-res lightmap only rendering...")
00424 
00425         #if 1
00426                 // address other corners, clamping
00427                 if ((LMV>>16) < (Triangle.LightMapHeight-1)) 
00428                         LM2 = LM0 + TOPDOWN_OR_BOTTOMUP(Triangle.LightMapStride);
00429                 else
00430                         LM2 = LM0;
00431                 if ((LMU>>16) < (Triangle.LightMapWidth-1))
00432                         {
00433                                 LM1 = LM0 + 3;
00434                                 LM3 = LM2 + 3;
00435                         }
00436                 else
00437                         {
00438                                 LM1 = LM0;
00439                                 LM3 = LM2;
00440                         }
00441                 UFract01 = (LMU&0xFFFF);
00442                 VFract01 = (LMV&0xFFFF);
00443                 C01 =    (*LM0) + ((( *LM1 - *LM0 ) * UFract01)>>16);           
00444                 C23 =    (*LM2) + ((( *LM3 - *LM2 ) * UFract01)>>16);           
00445                 RRight =(   C01     + (((  C23 -  C01 ) * VFract01)>>16))<<RGB_FXP_SHIFTER;
00446 
00447                 LM0++; LM1++;
00448                 C01 =    (*LM0) + ((( *LM1 - *LM0 ) * UFract01)>>16);           
00449                 
00450                 LM2++; LM3++;
00451                 C23 =    (*LM2) + ((( *LM3 - *LM2 ) * UFract01)>>16);           
00452                 GRight =(   C01     + (((  C23 -  C01 ) * VFract01)>>16))<<RGB_FXP_SHIFTER;                     
00453 
00454                 LM0++; LM1++; 
00455                 C01 =    (*LM0) + ((( *LM1 - *LM0 ) * UFract01)>>16);           
00456 
00457                 LM2++; LM3++;
00458                 C23 =    (*LM2) + ((( *LM3 - *LM2 ) * UFract01)>>16);           
00459                 BRight =(   C01 + (((  C23 -  C01 ) * VFract01)>>16))<<RGB_FXP_SHIFTER;                 
00460         #else
00461                 RRight = *LM0<<RGB_FXP_SHIFTER; LM0++;
00462                 GRight = *LM0<<RGB_FXP_SHIFTER; LM0++;
00463                 BRight = *LM0<<RGB_FXP_SHIFTER; 
00464                 #pragma message ("lightmap filtering disabled")
00465         #endif
00466 
00467         //R=RRight;G=GRight;B=BRight;
00468         //dR = dG= dB = 0;
00469 }
00470         
00471 

Generated on Tue Sep 30 12:36:24 2003 for GTestAndEngine by doxygen 1.3.2