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);