#include <maya/MPxSubSceneOverride.h>
#include <map>
#include <set>
#include <vector>
class MVertexBuffer;
class MIndexBuffer;
class MShaderInstance;
class MIntersection;
class MRenderItem;
}
class apiMesh;
class apiMeshGeom;
struct ID3D11Buffer;
namespace apiMeshSubSceneOverrideHelpers {
class ShadedItemUserData;
}
{
public:
static MPxSubSceneOverride* Creator(
const MObject& obj)
{
return new apiMeshSubSceneOverride(obj);
}
virtual ~apiMeshSubSceneOverride();
void untrackLinkLostData(apiMeshSubSceneOverrideHelpers::ShadedItemUserData* data);
static MStatus registerComponentConverters();
static MStatus deregisterComponentConverters();
private:
apiMeshSubSceneOverride(
const MObject& obj);
void manageRenderItems(
bool updateGeometry);
void rebuildGeometryBuffers();
void rebuildActiveComponentIndexBuffers();
void deleteBuffers();
void deleteGeometryBuffers();
void deleteActiveComponentIndexBuffers();
static void shadedItemLinkLost(
MUserData* userData);
apiMesh* fMesh;
struct InstanceInfo
{
bool fIsSelected;
InstanceInfo() : fIsSelected(false) {}
InstanceInfo(
const MMatrix& matrix,
bool selected) : fTransform(matrix), fIsSelected(selected) {}
};
typedef std::map<unsigned int, InstanceInfo> InstanceInfoMap;
InstanceInfoMap fInstanceInfoCache;
static const MString sSelectedBoxName;
static const MString sTexturedName;
static const MString sVertexSelectionName;
static const MString sEdgeSelectionName;
static const MString sFaceSelectionName;
static const MString sActiveVertexName;
static const MString sActiveEdgeName;
static const MString sActiveFaceName;
unsigned int fBoxPositionBufferId;
unsigned int fBoxIndexBufferId;
ID3D11Buffer* fBoxPositionBufferDX;
ID3D11Buffer* fBoxIndexBufferDX;
float fThickLineWidth;
unsigned int fNumInstances;
bool fIsInstanceMode;
bool fAreUIDrawablesDirty;
bool fUseQueuedLineUpdate;
float fQueuedLineWidth;
bool fQueueUpdate;
std::set<int> fActiveVerticesSet;
std::set<int> fActiveEdgesSet;
std::set<int> fActiveFacesSet;
std::vector<apiMeshSubSceneOverrideHelpers::ShadedItemUserData*> fLinkLostCallbackData;
};