THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 08/11/2010 at 08:31, xxxxxxxx wrote:
Here is the changed code I used for testing in simplematerial:
class SimpleMaterial : public MaterialData
{
INSTANCEOF(SimpleMaterial,MaterialData)
private:
Vector color;
Gradient* grad;
public:
virtual Bool Init (GeListNode *node);
virtual void CalcSurface (BaseMaterial *mat, VolumeData *vd);
virtual INITRENDERRESULT InitRender(BaseMaterial *mat, const InitRenderStruct &irs);
virtual void FreeRender(BaseMaterial *mat)
{
if(grad) grad->FreeRender();
}
virtual Bool GetDParameter(GeListNode *node, const DescID &id,GeData &t_data,DESCFLAGS_GET &flags);
virtual Bool SetDParameter(GeListNode *node, const DescID &id,const GeData &t_data,DESCFLAGS_SET &flags);
virtual Bool Message(GeListNode* node, LONG type, void* data);
virtual Bool CopyTo(NodeData *dest, GeListNode *snode, GeListNode *dnode, COPYFLAGS flags, AliasTrans *trn);
static NodeData *Alloc(void) { return gNew SimpleMaterial; }
LONG updatecount;
};
Bool SimpleMaterial::Init(GeListNode *node)
{
BaseContainer *data=((BaseMaterial* )node)->GetDataInstance();
data->SetVector(SIMPLEMATERIAL_COLOR,1.0);
updatecount = 0;
GeData previewData(CUSTOMDATATYPE_MATPREVIEW, DEFAULTVALUE);
MaterialPreviewData* preview = (MaterialPreviewData* )previewData.GetCustomDataType(CUSTOMDATATYPE_MATPREVIEW);
if (!preview)
return FALSE;
data->SetData(SIMPLEMATERIAL_MAT_PREVIEW, previewData);
AutoAlloc<Gradient> gradient;
if (!gradient) return FALSE;
GradientKnot k1,k2;
k1.col =Vector(1.0,1.0,1.0);
k1.pos =0.0;
k2.col =1.0;
k2.pos =1.0;
gradient->InsertKnot(k1);
gradient->InsertKnot(k2);
data->SetData(SIMPLEMATERIAL_COLORG,GeData(CUSTOMDATATYPE_GRADIENT,gradient));
return TRUE;
}
INITRENDERRESULT SimpleMaterial::InitRender(BaseMaterial *mat, const InitRenderStruct &irs)
{
BaseContainer *data=mat->GetDataInstance();
color = data->GetVector(SIMPLEMATERIAL_COLOR);
grad = (Gradient* )data->GetCustomDataType(SIMPLEMATERIAL_COLORG,CUSTOMDATATYPE_GRADIENT);
if (!grad || !grad->InitRender(irs)) return INITRENDERRESULT_OUTOFMEMORY;
return INITRENDERRESULT_OK;
}
.h
enum
{
ID_TESTGROUP = 3000,
SIMPLEMATERIAL_COLOR = 1000,
SIMPLEMATERIAL_MAT_PREVIEW = 1001,
SIMPLEMATERIAL_COLORG,
};
.res
GROUP ID_MATERIALPROPERTIES
{
DEFAULT 1;
COLOR SIMPLEMATERIAL_COLOR {}
}
GROUP ID_TESTGROUP
{
GRADIENT SIMPLEMATERIAL_COLORG {ALPHA;}
}
.str
SIMPLEMATERIAL_COLOR "Color";
SIMPLEMATERIAL_COLORG "Testgradient";
ID_TESTGROUP "Test";