quake3 源码分析(四)

quake3 源码分析(四)

--Render

 

 

void CL_InitRef( void )

{

       refimport _t     ri;

       refexport_t     *ret;

           ri.Cmd_AddCommand = Cmd_AddCommand;

      

ret = GetRefAPI( REF_API_VERSION, &ri );

re = *ret;

 

}

refexport_t *GetRefAPI ( int apiVersion, refimport_t *rimp )

{    

static refexport_t    re;

       ri = *rimp;

 

       re.Shutdown = RE_Shutdown;

 

       re.BeginRegistration = RE_BeginRegistration;

       re.RegisterModel = RE_RegisterModel;

       ……

       return &re;

}

 

qhandle_t RE_RegisterModel( const char *name )

{

       //查找当前的model name,找到,如果mod->type == MOD_BAD返回0,否则返回第几个model

       //调用R_AllocModel分配新的空间,并加入全局变量tr(trGlobals_t tr;);

mod = R_AllocModel

       Q_strncpyz( mod->name, name, sizeof( mod->name ) );//model name

       // make sure the render thread is stopped

       R_SyncRenderThread();

 

       //加载文件

sprintf( namebuf, "_%d.md3", lod );

       strcat( filename, namebuf );

       ri.FS_ReadFile( filename, (void **)&buf );

       //根据文件头决定加载MD4 or MD3

       ident = LittleLong(*(unsigned *)buf);

       if ( ident == MD4_IDENT ) {

              loaded = R_LoadMD4( mod, buf, name );

       } else {

              if ( ident != MD3_IDENT ) {

                     ri.Printf (PRINT_WARNING,"RE_RegisterModel: unknown fileid for %s/n", name);

                     goto fail;

              }

              loaded = R_LoadMD3( mod, lod, buf, name );

       }

ri.FS_FreeFile (buf);

……

}

static qboolean R_LoadMD3 (model_t *mod, int lod, void *buffer, const char *mod_name )

{

       //判断MD3的版本号

       pinmodel = (md3Header_t  *)buffer;

       version = LittleLong (pinmodel->version);

 

       size = LittleLong(pinmodel->ofsEnd);

       mod->dataSize += size;

       mod->md3[lod] = ri.Hunk_Alloc( size, h_low );

       //将文件中的数据COPYmd3

       Com_Memcpy (mod->md3 [lod], buffer, LittleLong(pinmodel->ofsEnd) );

      

       //对所有的数据进行大小字节的转换,如果有需要的话

       //调用R_FindShader函数register the shaders

       R_FindShader( shader->name, LIGHTMAP_NONE, qtrue );

      

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值