Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
1108 lines
30 KiB
C++
1108 lines
30 KiB
C++
// ErfElemInfoView.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "MFC Gos.h"
|
|
#include "ErfElemInfoView.h"
|
|
#include "MFC GosDoc.h"
|
|
#include "MFC GosView.h"
|
|
|
|
|
|
#include <GameOS\GameOS.hpp>
|
|
#include <ElementRenderer\ElementRenderer.hpp>
|
|
#include <ElementRenderer\Element.hpp>
|
|
#include <ElementRenderer\StateChange.hpp>
|
|
#include <ElementRenderer\ShapeLODElement.hpp>
|
|
#include <ElementRenderer\TreeElement.hpp>
|
|
|
|
#include <MLR\MLR.hpp>
|
|
#include <MLR\MLR_I_C_PMesh.hpp>
|
|
#include <MLR\MLR_I_DT_PMesh.hpp>
|
|
#include <MLR\MLR_I_C_DT_PMesh.hpp>
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CErfElemInfoView
|
|
|
|
IMPLEMENT_DYNCREATE(CErfElemInfoView, CView)
|
|
|
|
CErfElemInfoView::CErfElemInfoView()
|
|
{
|
|
InfoCtrl=NULL;
|
|
|
|
}
|
|
|
|
CErfElemInfoView::~CErfElemInfoView()
|
|
{
|
|
if(InfoCtrl)
|
|
{
|
|
delete InfoCtrl;
|
|
}
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CErfElemInfoView, CView)
|
|
//{{AFX_MSG_MAP(CErfElemInfoView)
|
|
ON_WM_SIZE()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CErfElemInfoView drawing
|
|
|
|
void CErfElemInfoView::OnDraw(CDC* pDC)
|
|
{
|
|
CDocument* pDoc = GetDocument();
|
|
// TODO: add draw code here
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CErfElemInfoView diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CErfElemInfoView::AssertValid() const
|
|
{
|
|
CView::AssertValid();
|
|
}
|
|
|
|
void CErfElemInfoView::Dump(CDumpContext& dc) const
|
|
{
|
|
CView::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CErfElemInfoView message handlers
|
|
|
|
BOOL CErfElemInfoView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
|
|
{
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
|
|
}
|
|
|
|
void CErfElemInfoView::OnInitialUpdate()
|
|
{
|
|
CView::OnInitialUpdate();
|
|
if(!InfoCtrl)
|
|
{
|
|
CRect rct;
|
|
GetClientRect(&rct);
|
|
InfoCtrl=new CErfListBox;
|
|
InfoCtrl->Create(LBS_NOTIFY|WS_CHILD|WS_VISIBLE|WS_VSCROLL,rct,this,NULL);
|
|
InfoCtrl->ShowWindow(SW_SHOW);
|
|
InfoCtrl->MyView=this;
|
|
}
|
|
else
|
|
{
|
|
InfoCtrl->ResetContent();
|
|
}
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
|
|
}
|
|
|
|
void CErfElemInfoView::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
CView::OnSize(nType, cx, cy);
|
|
|
|
if(InfoCtrl)
|
|
{
|
|
InfoCtrl->SetWindowPos(NULL,0,0,cx,cy,SWP_NOZORDER|SWP_NOMOVE|SWP_SHOWWINDOW);
|
|
}
|
|
// TODO: Add your message handler code here
|
|
|
|
}
|
|
|
|
|
|
void CErfElemInfoView::UpdateInfo(ElementRenderer::Element *elmt)
|
|
{
|
|
CString tstr;
|
|
|
|
InfoCtrl->AddString("Element");
|
|
|
|
tstr.Format("LocalToParent Translation = %.2f %.2f %.2f",
|
|
elmt->GetLocalToParent().operator()(3,0),
|
|
elmt->GetLocalToParent().operator()(3,1),
|
|
elmt->GetLocalToParent().operator()(3,2)
|
|
);
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("LocalToWorld Translation = %.2f %.2f %.2f",
|
|
elmt->GetLocalToWorld().operator()(3,0),
|
|
elmt->GetLocalToWorld().operator()(3,1),
|
|
elmt->GetLocalToWorld().operator()(3,2)
|
|
);
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("IsLocalToParentIdentity = %s",
|
|
elmt->IsLocalToParentIdentity() ? "True" : "False");
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("AreBoundsLocked = %s",
|
|
elmt->AreBoundsLocked() ? "True" : "False");
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("IsMatrixDirty = %s",
|
|
elmt->IsMatrixDirty() ? "True" : "False");
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("AreBoundsWrong = %s",
|
|
elmt->AreBoundsWrong() ? "True" : "False");
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("IsSyncDeferred = %s",
|
|
elmt->IsSyncDeferred() ? "True" : "False");
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("IsBoundedByOBB = %s",
|
|
elmt->IsBoundedByOBB() ? "True" : "False");
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("CullMode = %s",
|
|
elmt->GetCullMode() == ElementRenderer::Element::RootMode ? "RootMode" :
|
|
elmt->GetCullMode() == ElementRenderer::Element::VolumeCullMode ? "VolumeCullMode" :
|
|
elmt->GetCullMode() == ElementRenderer::Element::NeverCullMode ? "NeverCullMode" : "AlwaysCullMode");
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("IsAlignX = %s",
|
|
elmt->IsAlignX() ? "True" : "False");
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("IsAlignY = %s",
|
|
elmt->IsAlignY() ? "True" : "False");
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
if (elmt->GetCullMode() == ElementRenderer::Element::VolumeCullMode)
|
|
{
|
|
tstr.Format("Local CullSphereCenter = %.2f %.2f %.2f",
|
|
elmt->m_localOBB.localToParent(3,0),
|
|
elmt->m_localOBB.localToParent(3,1),
|
|
elmt->m_localOBB.localToParent(3,2)
|
|
);
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("Local CullSphereRadius = %.2f",
|
|
elmt->m_localOBB.sphereRadius
|
|
);
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
if (elmt->IsBoundedByOBB())
|
|
{
|
|
tstr.Format("Local Axis Extents = %.2f %.2f %.2f",
|
|
elmt->m_localOBB.axisExtents.x,
|
|
elmt->m_localOBB.axisExtents.y,
|
|
elmt->m_localOBB.axisExtents.z
|
|
);
|
|
InfoCtrl->AddString(tstr);
|
|
}
|
|
|
|
tstr.Format("World CullSphereCenter = %.2f %.2f %.2f",
|
|
elmt->GetWorldOBB().localToParent(3,0),
|
|
elmt->GetWorldOBB().localToParent(3,1),
|
|
elmt->GetWorldOBB().localToParent(3,2)
|
|
);
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("World CullSphereRadius = %.2f",
|
|
elmt->GetWorldOBB().sphereRadius
|
|
);
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
if (elmt->IsBoundedByOBB())
|
|
{
|
|
tstr.Format("World Axis Extents = %.2f %.2f %.2f",
|
|
elmt->GetWorldOBB().axisExtents.x,
|
|
elmt->GetWorldOBB().axisExtents.y,
|
|
elmt->GetWorldOBB().axisExtents.z
|
|
);
|
|
InfoCtrl->AddString(tstr);
|
|
}
|
|
}
|
|
|
|
if (elmt->IsDerivedFrom(ElementRenderer::ShapeLODElementClassID))
|
|
{
|
|
ElementRenderer::ShapeLODElement *shape = Cast_Pointer(ElementRenderer::ShapeLODElement *,elmt);
|
|
int size = shape->GetSize();
|
|
for (int x=0;x<size;x++)
|
|
{
|
|
const ElementRenderer::LODElement::Entry *entry;
|
|
MidLevelRenderer::MLRShape *mlrshape;
|
|
shape->GetLOD(x,&mlrshape,&entry);
|
|
tstr.Format("LOD %d Range = %.2f %.2f",x,sqrt(entry->m_nearSquared),sqrt(entry->m_farSquared));
|
|
int itm;
|
|
itm=InfoCtrl->AddString(tstr);
|
|
CEditMessage *em=new CEditMessage;
|
|
em->EType=CEditMessage::EM_LOD;
|
|
em->Data=elmt;
|
|
em->Index=x;
|
|
InfoCtrl->SetItemDataPtr(itm,em);
|
|
}
|
|
|
|
}
|
|
if (elmt->IsDerivedFrom(ElementRenderer::TreeElementClassID))
|
|
{
|
|
ElementRenderer::TreeElement *shape = Cast_Pointer(ElementRenderer::TreeElement *,elmt);
|
|
int size = shape->GetSize();
|
|
for (int x=0;x<size;x++)
|
|
{
|
|
const ElementRenderer::TreeElement::Entry *entry;
|
|
MidLevelRenderer::MLRShape *mlrshape;
|
|
shape->GetLOD(x,&mlrshape,&entry);
|
|
tstr.Format("LOD %d Range = %.2f %.2f %.2f %.2f",
|
|
x,
|
|
sqrt(entry->m_nearSquared),sqrt(entry->m_fadeInSquared),
|
|
sqrt(entry->m_fadeOutSquared),sqrt(entry->m_farSquared));
|
|
int itm;
|
|
itm=InfoCtrl->AddString(tstr);
|
|
CEditMessage *em=new CEditMessage;
|
|
em->EType=CEditMessage::EM_LOD;
|
|
em->Data=elmt;
|
|
em->Index=x;
|
|
InfoCtrl->SetItemDataPtr(itm,em);
|
|
}
|
|
|
|
tstr.Format("Start Aligning At = LOD %d", shape->m_startAligningAt);
|
|
int itm;
|
|
itm=InfoCtrl->AddString(tstr);
|
|
CEditMessage *em1=new CEditMessage;
|
|
em1->EType=CEditMessage::EM_BILLBOARD;
|
|
em1->Data=elmt;
|
|
em1->Index=x;
|
|
InfoCtrl->SetItemDataPtr(itm,em1);
|
|
|
|
tstr.Format("Alignment Type = %s%s",
|
|
shape->m_alignType&ElementRenderer::Element::AlignXFlag?"X":"",
|
|
shape->m_alignType&ElementRenderer::Element::AlignYFlag?"Y":"");
|
|
itm=InfoCtrl->AddString(tstr);
|
|
CEditMessage *em2=new CEditMessage;
|
|
em2->EType=CEditMessage::EM_BILLBOARD;
|
|
em2->Data=elmt;
|
|
em2->Index=x;
|
|
InfoCtrl->SetItemDataPtr(itm,em2);
|
|
}
|
|
|
|
ElementRenderer::StateChange *stateChange;
|
|
if((stateChange = elmt->GetStateChange()) != NULL)
|
|
{
|
|
UpdateInfo(&(stateChange->GetMLRState()));
|
|
}
|
|
|
|
/*
|
|
switch(elmt->GetClassID())
|
|
{
|
|
case ElementRenderer::FXElementClassID:
|
|
{
|
|
}
|
|
break;
|
|
|
|
case ElementRenderer::GroupElementClassID:
|
|
{
|
|
ElementRenderer::GroupElement *group = Cast_Pointer(ElementRenderer::GroupElement *, elmt);
|
|
|
|
Stuff::ChainIteratorOf<ElementRenderer::Element*> *children = group->MakeIterator();
|
|
Register_Object(children);
|
|
|
|
ElementRenderer::Element *child = NULL;
|
|
while ((child = children->ReadAndNext()) != NULL)
|
|
{
|
|
AddErfBranch(tmpitm, child);
|
|
}
|
|
Unregister_Object(children);
|
|
delete children;
|
|
}
|
|
break;
|
|
|
|
case ElementRenderer::ListElementClassID:
|
|
{
|
|
ElementRenderer::ListElement *group = Cast_Pointer(ElementRenderer::ListElement *, elmt);
|
|
|
|
for(int i=0;i<group->GetActiveCount();i++)
|
|
{
|
|
AddErfBranch(tmpitm,group->GetIndexedElement(i));
|
|
}
|
|
}
|
|
break;
|
|
|
|
case ElementRenderer::LODElementClassID:
|
|
{
|
|
ElementRenderer::ListElement *group = Cast_Pointer(ElementRenderer::ListElement *, elmt);
|
|
|
|
for(int i=0;i<group->GetActiveCount();i++)
|
|
{
|
|
AddErfBranch(tmpitm,group->GetIndexedElement(i));
|
|
}
|
|
}
|
|
break;
|
|
|
|
case ElementRenderer::PointCloudElementClassID:
|
|
{
|
|
}
|
|
break;
|
|
|
|
case ElementRenderer::ScalableShapeElementClassID:
|
|
{
|
|
ElementRenderer::ShapeElement *group = Cast_Pointer(ElementRenderer::ShapeElement *, elmt);
|
|
MidLevelRenderer::MLRShape *shape=group->GetMLRShape();
|
|
|
|
for(int i=0;i<shape->GetNum();i++)
|
|
{
|
|
AddErfBranch(tmpitm,shape->Find(i));
|
|
}
|
|
}
|
|
break;
|
|
|
|
case ElementRenderer::ScreenQuadsElementClassID:
|
|
{
|
|
}
|
|
break;
|
|
|
|
case ElementRenderer::ShapeElementClassID:
|
|
{
|
|
ElementRenderer::ShapeElement *group = Cast_Pointer(ElementRenderer::ShapeElement *, elmt);
|
|
MidLevelRenderer::MLRShape *shape=group->GetMLRShape();
|
|
|
|
for(int i=0;i<shape->GetNum();i++)
|
|
{
|
|
AddErfBranch(tmpitm,shape->Find(i));
|
|
}
|
|
|
|
}
|
|
break;
|
|
|
|
case ElementRenderer::SwitchElementClassID:
|
|
{
|
|
ElementRenderer::ListElement *group = Cast_Pointer(ElementRenderer::ListElement *, elmt);
|
|
|
|
for(int i=0;i<group->GetActiveCount();i++)
|
|
{
|
|
AddErfBranch(tmpitm,group->GetIndexedElement(i));
|
|
}
|
|
}
|
|
break;
|
|
|
|
case ElementRenderer::TriangleCloudElementClassID:
|
|
{
|
|
}
|
|
break;
|
|
}
|
|
*/
|
|
}
|
|
|
|
void CErfElemInfoView::UpdateInfo(MidLevelRenderer::MLRPrimitiveBase *prim)
|
|
{
|
|
InfoCtrl->AddString("MLR");
|
|
|
|
int i;
|
|
CString tstr;
|
|
|
|
int point_count, index_count, color_count;
|
|
const BYTE *index_array;
|
|
const ColorType *color_array;
|
|
|
|
tstr.Format("Layers = %d", prim->GetNumPasses());
|
|
InfoCtrl->AddString(tstr);
|
|
point_count = prim->GetNumVertices();
|
|
tstr.Format("Vertices = %d", point_count);
|
|
InfoCtrl->AddString(tstr);
|
|
const MidLevelRenderer::Vector2DScalar *array;
|
|
int tex_coord_count;
|
|
prim->GetTexCoordData(&array, &tex_coord_count);
|
|
tstr.Format("Tex. coords = %d", tex_coord_count);
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
switch(prim->GetClassID())
|
|
{
|
|
case MidLevelRenderer::MLR_I_PMeshClassID:
|
|
{
|
|
MidLevelRenderer::MLR_I_PMesh *mesh = Cast_Pointer(MidLevelRenderer::MLR_I_PMesh*, prim);
|
|
|
|
tstr.Format("Polygons = %d", mesh->GetNumPrimitives());
|
|
InfoCtrl->AddString(tstr);
|
|
mesh->GetIndexData(&index_array, &index_count);
|
|
tstr.Format("Indices = %d", index_count);
|
|
InfoCtrl->AddString(tstr);
|
|
tstr.Format("Vertex/Index ratio = %f", (float)index_count/(float)point_count);
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
}
|
|
break;
|
|
|
|
case MidLevelRenderer::MLR_I_C_PMeshClassID:
|
|
case MidLevelRenderer::MLR_I_L_PMeshClassID:
|
|
{
|
|
MidLevelRenderer::MLR_I_C_PMesh *mesh = Cast_Pointer(MidLevelRenderer::MLR_I_C_PMesh*, prim);
|
|
|
|
tstr.Format("Polygons = %d", mesh->GetNumPrimitives());
|
|
InfoCtrl->AddString(tstr);
|
|
mesh->GetIndexData(&index_array, &index_count);
|
|
tstr.Format("Indices = %d", index_count);
|
|
InfoCtrl->AddString(tstr);
|
|
tstr.Format("Vertex/Index ratio = %f", (float)index_count/(float)point_count);
|
|
InfoCtrl->AddString(tstr);
|
|
mesh->GetColorData(&color_array, &color_count);
|
|
tstr.Format("Colored Vertices = %d", color_count);
|
|
InfoCtrl->AddString(tstr);
|
|
}
|
|
break;
|
|
|
|
case MidLevelRenderer::MLR_I_DT_PMeshClassID:
|
|
{
|
|
MidLevelRenderer::MLR_I_DT_PMesh *mesh = Cast_Pointer(MidLevelRenderer::MLR_I_DT_PMesh*, prim);
|
|
|
|
tstr.Format("Polygons = %d", mesh->GetNumPrimitives());
|
|
InfoCtrl->AddString(tstr);
|
|
mesh->GetIndexData(&index_array, &index_count);
|
|
tstr.Format("Indices = %d", index_count);
|
|
InfoCtrl->AddString(tstr);
|
|
tstr.Format("Vertex/Index ratio = %f", (float)index_count/(float)point_count);
|
|
InfoCtrl->AddString(tstr);
|
|
}
|
|
break;
|
|
|
|
case MidLevelRenderer::MLR_I_C_DT_PMeshClassID:
|
|
case MidLevelRenderer::MLR_I_L_DT_PMeshClassID:
|
|
{
|
|
MidLevelRenderer::MLR_I_C_DT_PMesh *mesh = Cast_Pointer(MidLevelRenderer::MLR_I_C_DT_PMesh*, prim);
|
|
|
|
tstr.Format("Polygons = %d", mesh->GetNumPrimitives());
|
|
InfoCtrl->AddString(tstr);
|
|
mesh->GetIndexData(&index_array, &index_count);
|
|
tstr.Format("Indices = %d", index_count);
|
|
InfoCtrl->AddString(tstr);
|
|
tstr.Format("Vertex/Index ratio = %f", (float)index_count/(float)point_count);
|
|
InfoCtrl->AddString(tstr);
|
|
mesh->GetColorData(&color_array, &color_count);
|
|
tstr.Format("Colored Vertices = %d", color_count);
|
|
InfoCtrl->AddString(tstr);
|
|
}
|
|
break;
|
|
}
|
|
|
|
InfoCtrl->AddString("");
|
|
MidLevelRenderer::MLRState ref_state;
|
|
MidLevelRenderer::MLRStateBase state;
|
|
for(i=0;i<prim->GetNumPasses();i++)
|
|
{
|
|
tstr.Format("ReferenceState #%d:", i);
|
|
InfoCtrl->AddString(tstr);
|
|
ref_state = prim->GetReferenceState(i);
|
|
UpdateInfo(&ref_state);
|
|
InfoCtrl->AddString("");
|
|
|
|
tstr.Format("Current State #%d:", i);
|
|
InfoCtrl->AddString(tstr);
|
|
state = prim->GetCurrentState(i);
|
|
UpdateInfo(&state);
|
|
InfoCtrl->AddString("");
|
|
}
|
|
|
|
}
|
|
|
|
void CErfElemInfoView::UpdateInfo(const MidLevelRenderer::MLRState *state)
|
|
{
|
|
CString tstr,tstr2;
|
|
MidLevelRenderer::MLRTexture *tex = NULL;
|
|
if (MidLevelRenderer::MLRTexturePool::Instance &&
|
|
(state->GetTextureHandle() < MidLevelRenderer::Limits::Max_Number_Textures * (1<<MidLevelRenderer::MLRTexturePool::Instance->GetInstanceDepth()))
|
|
)
|
|
{
|
|
if(state->GetTextureHandle())
|
|
{
|
|
if((tex = (*MidLevelRenderer::MLRTexturePool::Instance)[state]) != NULL)
|
|
{
|
|
tstr.Format("%c%c Texture=%s",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::TextureMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::TextureMask) ? 'P' : '0',
|
|
tex->GetTextureName());
|
|
InfoCtrl->AddString(tstr);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
tstr.Format("%c%c Texture=None",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::TextureMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::TextureMask) ? 'P' : '0');
|
|
InfoCtrl->AddString(tstr);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
InfoCtrl->AddString("?? Texture=Error");
|
|
}
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::AlphaMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::AlphaMask) ? 'P' : '0');
|
|
switch(state->GetAlphaMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::OneZeroMode:
|
|
tstr.Format("AlphaMode=OneZero");
|
|
break;
|
|
case MidLevelRenderer::MLRState::OneOneMode:
|
|
tstr.Format("AlphaMode=OneOne");
|
|
break;
|
|
case MidLevelRenderer::MLRState::AlphaOneMode:
|
|
tstr.Format("AlphaMode=AlphaOne");
|
|
break;
|
|
case MidLevelRenderer::MLRState::OneAlphaMode:
|
|
tstr.Format("AlphaMode=OneAlpha");
|
|
break;
|
|
case MidLevelRenderer::MLRState::AlphaInvAlphaMode:
|
|
tstr.Format("AlphaMode=AlphaInvAlpha");
|
|
break;
|
|
case MidLevelRenderer::MLRState::OneInvAlphaMode:
|
|
tstr.Format("AlphaMode=OneInvAlpha");
|
|
break;
|
|
case MidLevelRenderer::MLRState::KeyedAlphaMode:
|
|
tstr.Format("AlphaMode=KeyedAlphaMode");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::DitherMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::DitherMask) ? 'P' : '0');
|
|
switch(state->GetDitherMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::DitherOffMode:
|
|
tstr.Format("Dithering=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::DitherOnMode:
|
|
tstr.Format("Dithering=On");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::FilterMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::FilterMask) ? 'P' : '0');
|
|
switch(state->GetFilterMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::NoFilterMode:
|
|
tstr.Format("FilterMode=None");
|
|
break;
|
|
case MidLevelRenderer::MLRState::BiLinearFilterMode:
|
|
tstr.Format("FilterMode=BiLinear");
|
|
break;
|
|
case MidLevelRenderer::MLRState::TriLinearFilterMode:
|
|
tstr.Format("FilterMode=TriLinear");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::FlatColoringMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::FlatColoringMask) ? 'P' : '0');
|
|
switch(state->GetFlatColoringMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::FlatColoringOffMode:
|
|
tstr.Format("FlatColoringing=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::FlatColoringOnMode:
|
|
tstr.Format("FlatColoringing=On");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::FogMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::FogMask) ? 'P' : '0');
|
|
switch(state->GetFogMode())
|
|
{
|
|
case 0:
|
|
tstr.Format("Fog=Disabled");
|
|
break;
|
|
case 1:
|
|
tstr.Format("Fog=General");
|
|
break;
|
|
case 2:
|
|
tstr.Format("Fog=Light");
|
|
break;
|
|
case 3:
|
|
tstr.Format("Fog=Custom");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::SpecularMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::SpecularMask) ? 'P' : '0');
|
|
switch(state->GetSpecularMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::SpecularOffMode:
|
|
tstr.Format("Specular=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::SpecularOnMode:
|
|
tstr.Format("Specular=On");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::TextureCorrectionMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::TextureCorrectionMask) ? 'P' : '0');
|
|
switch(state->GetTextureCorrectionMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::TextureCorrectionOffMode:
|
|
tstr.Format("TextureCorrection=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::TextureCorrectionOnMode:
|
|
tstr.Format("TextureCorrection=On");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::TextureWrapMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::TextureWrapMask) ? 'P' : '0');
|
|
switch(state->GetTextureWrapMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::TextureClamp:
|
|
tstr.Format("TextureWrap=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::TextureWrap:
|
|
tstr.Format("TextureWrap=On");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::WireFrameMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::WireFrameMask) ? 'P' : '0');
|
|
switch(state->GetWireFrameMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::WireFrameOffMode:
|
|
tstr.Format("WireFrame=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::WireFrameOnlyMode:
|
|
tstr.Format("WireFrame=Only");
|
|
break;
|
|
case MidLevelRenderer::MLRState::WireFrameAddMode:
|
|
tstr.Format("WireFrame=Add");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::ZBufferWriteMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::ZBufferWriteMask) ? 'P' : '0');
|
|
switch(state->GetZBufferWriteMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::ZBufferWriteOffMode:
|
|
tstr.Format("ZBufferWrite=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::ZBufferWriteOnMode:
|
|
tstr.Format("ZBufferWrite=On");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetRenderDeltaMask() & MidLevelRenderer::MLRState::ZBufferCompareMask) ? 'D' : '0',
|
|
(state->GetRenderPermissionMask() & MidLevelRenderer::MLRState::ZBufferCompareMask) ? 'P' : '0');
|
|
switch(state->GetZBufferCompareMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::ZBufferCompareOffMode:
|
|
tstr.Format("ZBufferCompare=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::ZBufferCompareOnMode:
|
|
tstr.Format("ZBufferCompare=On");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetProcessDeltaMask() & MidLevelRenderer::MLRState::BackFaceMask) ? 'D' : '0',
|
|
(state->GetProcessPermissionMask() & MidLevelRenderer::MLRState::BackFaceMask) ? 'P' : '0');
|
|
|
|
switch(state->GetBackFaceMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::BackFaceOffMode:
|
|
tstr.Format("BackFace=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::BackFaceOnMode:
|
|
tstr.Format("BackFace=On");
|
|
break;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr2.Format("%c%c ",
|
|
(state->GetProcessDeltaMask() & MidLevelRenderer::MLRState::LightingMask) ? 'D' : '0',
|
|
(state->GetProcessPermissionMask() & MidLevelRenderer::MLRState::LightingMask) ? 'P' : '0');
|
|
|
|
tstr.Format("Lighting=");
|
|
if(state->GetLightingMode())
|
|
{
|
|
if (state->GetLightingMode() & MidLevelRenderer::MLRState::TerrainLightingMode)
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("LightMap+");
|
|
tstr += tstr3;
|
|
}
|
|
if (state->GetLightingMode() & MidLevelRenderer::MLRState::LightMapLightingMode)
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("LightMap+");
|
|
tstr += tstr3;
|
|
}
|
|
if (state->GetLightingMode() & MidLevelRenderer::MLRState::VertexLightingMode)
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("Vertex+");
|
|
tstr += tstr3;
|
|
}
|
|
if (state->GetLightingMode() & MidLevelRenderer::MLRState::LookupLightingMode)
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("Lookup+");
|
|
tstr += tstr3;
|
|
}
|
|
if (state->GetLightingMode() & MidLevelRenderer::MLRState::FaceLightingMode)
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("Face+");
|
|
tstr += tstr3;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("Off");
|
|
tstr += tstr3;
|
|
}
|
|
tstr = tstr2+tstr;
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("%c%c Priority=%d",
|
|
(state->GetProcessDeltaMask() & MidLevelRenderer::MLRState::PriorityMask) ? 'D' : '0',
|
|
(state->GetProcessPermissionMask() & MidLevelRenderer::MLRState::PriorityMask) ? 'P' : '0',
|
|
state->GetPriority());
|
|
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
}
|
|
|
|
void CErfElemInfoView::UpdateInfo(const MidLevelRenderer::MLRStateBase *state)
|
|
{
|
|
CString tstr;
|
|
MidLevelRenderer::MLRTexture *tex = NULL;
|
|
if (MidLevelRenderer::MLRTexturePool::Instance &&
|
|
(state->GetTextureHandle() < MidLevelRenderer::Limits::Max_Number_Textures * (1<<MidLevelRenderer::MLRTexturePool::Instance->GetInstanceDepth()))
|
|
)
|
|
{
|
|
if(state->GetTextureHandle())
|
|
{
|
|
if((tex = (*MidLevelRenderer::MLRTexturePool::Instance)[state]) != NULL)
|
|
{
|
|
tstr.Format("Texture=%s", tex->GetTextureName());
|
|
InfoCtrl->AddString(tstr);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
tstr.Format("Texture=None");
|
|
InfoCtrl->AddString(tstr);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
InfoCtrl->AddString("Texture=Error");
|
|
}
|
|
|
|
switch(state->GetAlphaMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::OneZeroMode:
|
|
tstr.Format("AlphaMode=OneZero");
|
|
break;
|
|
case MidLevelRenderer::MLRState::OneOneMode:
|
|
tstr.Format("AlphaMode=OneOne");
|
|
break;
|
|
case MidLevelRenderer::MLRState::AlphaOneMode:
|
|
tstr.Format("AlphaMode=AlphaOne");
|
|
break;
|
|
case MidLevelRenderer::MLRState::OneAlphaMode:
|
|
tstr.Format("AlphaMode=OneAlpha");
|
|
break;
|
|
case MidLevelRenderer::MLRState::AlphaInvAlphaMode:
|
|
tstr.Format("AlphaMode=AlphaInvAlpha");
|
|
break;
|
|
case MidLevelRenderer::MLRState::OneInvAlphaMode:
|
|
tstr.Format("AlphaMode=OneInvAlpha");
|
|
break;
|
|
case MidLevelRenderer::MLRState::KeyedAlphaMode:
|
|
tstr.Format("AlphaMode=KeyedAlphaMode");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
switch(state->GetDitherMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::DitherOffMode:
|
|
tstr.Format("Dithering=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::DitherOnMode:
|
|
tstr.Format("Dithering=On");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
|
|
switch(state->GetFilterMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::NoFilterMode:
|
|
tstr.Format("FilterMode=None");
|
|
break;
|
|
case MidLevelRenderer::MLRState::BiLinearFilterMode:
|
|
tstr.Format("FilterMode=BiLinear");
|
|
break;
|
|
case MidLevelRenderer::MLRState::TriLinearFilterMode:
|
|
tstr.Format("FilterMode=TriLinear");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
switch(state->GetFlatColoringMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::FlatColoringOffMode:
|
|
tstr.Format("FlatColoringing=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::FlatColoringOnMode:
|
|
tstr.Format("FlatColoringing=On");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
switch(state->GetFogMode())
|
|
{
|
|
case 0:
|
|
tstr.Format("Fog=Disabled");
|
|
break;
|
|
case 1:
|
|
tstr.Format("Fog=General");
|
|
break;
|
|
case 2:
|
|
tstr.Format("Fog=Light");
|
|
break;
|
|
case 3:
|
|
tstr.Format("Fog=Custom");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
switch(state->GetSpecularMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::SpecularOffMode:
|
|
tstr.Format("Specular=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::SpecularOnMode:
|
|
tstr.Format("Specular=On");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
switch(state->GetTextureCorrectionMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::TextureCorrectionOffMode:
|
|
tstr.Format("TextureCorrection=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::TextureCorrectionOnMode:
|
|
tstr.Format("TextureCorrection=On");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
switch(state->GetTextureWrapMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::TextureClamp:
|
|
tstr.Format("TextureWrap=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::TextureWrap:
|
|
tstr.Format("TextureWrap=On");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
switch(state->GetWireFrameMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::WireFrameOffMode:
|
|
tstr.Format("WireFrame=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::WireFrameOnlyMode:
|
|
tstr.Format("WireFrame=Only");
|
|
break;
|
|
case MidLevelRenderer::MLRState::WireFrameAddMode:
|
|
tstr.Format("WireFrame=Add");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
switch(state->GetZBufferWriteMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::ZBufferWriteOffMode:
|
|
tstr.Format("ZBufferWrite=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::ZBufferWriteOnMode:
|
|
tstr.Format("ZBufferWrite=On");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
switch(state->GetZBufferCompareMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::ZBufferCompareOffMode:
|
|
tstr.Format("ZBufferCompare=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::ZBufferCompareOnMode:
|
|
tstr.Format("ZBufferCompare=On");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
switch(state->GetBackFaceMode())
|
|
{
|
|
case MidLevelRenderer::MLRState::BackFaceOffMode:
|
|
tstr.Format("BackFace=Off");
|
|
break;
|
|
case MidLevelRenderer::MLRState::BackFaceOnMode:
|
|
tstr.Format("BackFace=On");
|
|
break;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("Lighting=");
|
|
if(state->GetLightingMode())
|
|
{
|
|
if (state->GetLightingMode() & MidLevelRenderer::MLRState::TerrainLightingMode)
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("LightMap+");
|
|
tstr += tstr3;
|
|
}
|
|
if (state->GetLightingMode() & MidLevelRenderer::MLRState::LightMapLightingMode)
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("LightMap+");
|
|
tstr += tstr3;
|
|
}
|
|
if (state->GetLightingMode() & MidLevelRenderer::MLRState::VertexLightingMode)
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("Vertex+");
|
|
tstr += tstr3;
|
|
}
|
|
if (state->GetLightingMode() & MidLevelRenderer::MLRState::LookupLightingMode)
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("Lookup+");
|
|
tstr += tstr3;
|
|
}
|
|
if (state->GetLightingMode() & MidLevelRenderer::MLRState::FaceLightingMode)
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("Face+");
|
|
tstr += tstr3;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CString tstr3;
|
|
tstr3.Format("Off");
|
|
tstr += tstr3;
|
|
}
|
|
InfoCtrl->AddString(tstr);
|
|
|
|
tstr.Format("Priority=%d", state->GetPriority());
|
|
InfoCtrl->AddString(tstr);
|
|
}
|
|
|
|
void CErfElemInfoView::UpdateInfo(ElementRenderer::StateChange *stateChange)
|
|
{
|
|
const MidLevelRenderer::MLRState& mlrState = stateChange->GetMLRState();
|
|
|
|
UpdateInfo(&mlrState);
|
|
}
|
|
|
|
void CErfElemInfoView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
|
|
{
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
if(!InfoCtrl) return;
|
|
|
|
RefreshData(lHint?true:false);
|
|
}
|
|
|
|
BOOL CErfElemInfoView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
|
|
{
|
|
return CView::OnNotify(wParam, lParam, pResult);
|
|
}
|
|
|
|
BOOL CErfElemInfoView::OnCommand(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
return CView::OnCommand(wParam, lParam);
|
|
}
|
|
|
|
void CErfElemInfoView::RefreshData(bool leaveempty)
|
|
{
|
|
CDocument* pDoc = GetDocument();
|
|
CMFCGosDoc *GDoc=(CMFCGosDoc *)pDoc;
|
|
|
|
for(int isl=0;isl<InfoCtrl->GetCount();isl++) delete InfoCtrl->GetItemDataPtr(isl);
|
|
InfoCtrl->ResetContent();
|
|
|
|
if(leaveempty) return;
|
|
|
|
if(GDoc->cele)
|
|
{
|
|
UpdateInfo(GDoc->cele);
|
|
}
|
|
else
|
|
if(GDoc->cmlr)
|
|
{
|
|
UpdateInfo(GDoc->cmlr);
|
|
}
|
|
else
|
|
{
|
|
InfoCtrl->AddString("No Data");
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void CErfElemInfoView::SetLodValue(int level,float min,float max)
|
|
{
|
|
CMFCGosView::Instance->erftree->SetLodValue(level,min,max);
|
|
}
|
|
|
|
void CErfElemInfoView::SetLodValue(int level,float min,float fadeIn,float fadeOut,float max)
|
|
{
|
|
CMFCGosView::Instance->erftree->SetLodValue(level,min,fadeIn,fadeOut,max);
|
|
}
|
|
|
|
void CErfElemInfoView::SetAlign(int startAt,int alignType)
|
|
{
|
|
CMFCGosView::Instance->erftree->SetAlign(startAt,alignType);
|
|
}
|