16class ScnMdl : 
public ScnMdlSimple {
 
   18    class CopiedMatAccess {
 
   20        CopiedMatAccess(ScnMdl* pScnMdl, 
size_t id);
 
   29        ResTev GetResTev(
bool markDirty);
 
 
   49    class CopiedVisAccess {
 
   51        CopiedVisAccess(ScnMdl* pScnMdl, ulong 
id);
 
   53        bool IsVisible() 
const;
 
   54        bool SetVisibilityEx(
bool visible);
 
 
   62#define OPT(KEY, VALUE) OPTID_##KEY = (0x30000 | (VALUE)) 
   65        OPT(VISBUFFER_REFRESH_NEEDED, 1),
 
   70        BUFFER_RESTEXOBJ = (1 << 0),
 
   71        BUFFER_RESTLUTOBJ = (1 << 1),
 
   72        BUFFER_RESTEXSRT = (1 << 2),
 
   73        BUFFER_RESCHAN = (1 << 3),
 
   74        BUFFER_RESGENMODE = (1 << 4),
 
   75        BUFFER_RESMATMISC = (1 << 5),
 
   76        BUFFER_RESANMVIS = (1 << 6),
 
   77        BUFFER_RESMATPIX = (1 << 7),
 
   78        BUFFER_RESTEVCOLOR = (1 << 8),
 
   79        BUFFER_RESMATINDMTXSCALE = (1 << 9),
 
   80        BUFFER_RESMATTEXCOORDGEN = (1 << 10),
 
   81        BUFFER_RESTEV = (1 << 11),
 
   82        BUFFER_RESVTXPOS = (1 << 12),
 
   83        BUFFER_RESVTXNRM = (1 << 13),
 
   84        BUFFER_RESVTXCLR = (1 << 14),
 
   86        ANM_VIS = BUFFER_RESANMVIS,
 
   87        ANM_TEXPAT = BUFFER_RESTEXOBJ | BUFFER_RESTLUTOBJ,
 
   88        ANM_TEXSRT = BUFFER_RESTEXSRT | BUFFER_RESMATINDMTXSCALE,
 
   89        ANM_MATCLR = BUFFER_RESCHAN | BUFFER_RESTEVCOLOR,
 
   90        ANM_SHP = BUFFER_RESVTXPOS | BUFFER_RESVTXNRM | BUFFER_RESVTXCLR
 
   94    static ScnMdl* Construct(
MEMAllocator* pAllocator, 
size_t* pSize, ResMdl mdl,
 
   95                             size_t bufferOption, 
int numView);
 
   98           ulong* pWorldMtxAttribArray, 
math::MTX34* pViewPosMtxArray,
 
  100           int numView, 
int numViewMtx, DrawResMdlReplacement* pReplacement,
 
  101           ulong* pMatBufferDirtyFlag);
 
  103    virtual void G3dProc(ulong task, ulong param, 
void* pInfo); 
 
  106    virtual bool SetScnObjOption(ulong option, ulong value);         
 
  107    virtual bool GetScnObjOption(ulong option, ulong* pValue) 
const; 
 
  109    virtual bool SetAnmObj(AnmObj* pObj, AnmObjType type);  
 
  110    virtual bool RemoveAnmObj(AnmObj* pObj);                
 
  111    virtual AnmObj* RemoveAnmObj(AnmObjType type);          
 
  112    virtual AnmObj* GetAnmObj(AnmObjType type);             
 
  113    virtual const AnmObj* GetAnmObj(AnmObjType type) 
const; 
 
  116    void CleanMatBuffer(ulong idx, ulong option);
 
  117    void CleanVisBuffer();
 
  119    AnmObjShp* GetAnmObjShp() {
 
  123    DrawResMdlReplacement& GetDrawResMdlReplacement() {
 
  128    void ScnMdl_G3DPROC_CALC_WORLD(ulong param, 
const math::MTX34* pParent);
 
  129    void ScnMdl_G3DPROC_CALC_MAT(ulong param, 
void* pInfo);
 
  130    void ScnMdl_G3DPROC_CALC_VTX(ulong param, 
void* pInfo);
 
  131    void ScnMdl_G3DPROC_DRAW_OPA(ulong param, 
void* pInfo);
 
  132    void ScnMdl_G3DPROC_DRAW_XLU(ulong param, 
void* pInfo);
 
  136        VISBUFFER_DIRTY = (1 << 0),
 
  137        VISBUFFER_NOT_REFRESH_NEEDED = (1 << 1),
 
  141    bool IsVisBufferDirty()
 const {
 
  142        return mFlagVisBuffer & VISBUFFER_DIRTY;
 
  144    bool IsVisBufferRefreshNeeded()
 const {
 
  145        return !(mFlagVisBuffer & VISBUFFER_NOT_REFRESH_NEEDED);
 
  147    void VisBufferDirty() {
 
  148        mFlagVisBuffer |= VISBUFFER_DIRTY;
 
  151    bool IsMatBufferDirty(ulong idx, ulong option)
 const {
 
  152        return option & mpMatBufferDirtyFlag[idx];
 
  154    void MatBufferDirty(ulong idx, ulong option) {
 
  155        mpMatBufferDirtyFlag[idx] |= option;
 
  159    AnmObjShp* mpAnmObjShp;             
 
  160    ulong mFlagVisBuffer;                 
 
  161    ulong* mpMatBufferDirtyFlag;          
 
  162    DrawResMdlReplacement mReplacement; 
 
  164    NW4R_G3D_RTTI_DECL_DERIVED(ScnMdl, ScnMdlSimple);