THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 22/01/2010 at 06:19, xxxxxxxx wrote:
Hello Matthias,
thanks i found some interesting thisngs in the examples:
i have some problem to add a bitmap in material here my complete message for preview generation :
Bool TheaMaterial::Message(GeListNode* node, LONG type, void* data)
{
if (type == MSG_UPDATE)
updatecount++;
switch (type)
{
case MSG_EDIT:
{
//my material stuff
break;
}
case MATPREVIEW_GET_OBJECT_INFO:
// the preview needs our object information
{
MatPreviewObjectInfo* info = (MatPreviewObjectInfo* )data;
info->bHandlePreview = TRUE; // own preview handling
info->bNeedsOwnScene = TRUE; // we need our own entry in the preview scene cache
info->bNoStandardScene = TRUE; // create our own preview scene
info->lFlags = MATPREVIEW_FLAG_HIDE_SCENE_SETTINGS; // hide the scene settings entry
return TRUE;
}
break;
case MATPREVIEW_MODIFY_CACHE_SCENE:
{
MatPreviewModifyCacheScene* scene = (MatPreviewModifyCacheScene* )data;
BaseObject * back = BaseObject::Alloc(Obackground);
if (!back) return FALSE;
back->SetName("back");
BaseTag* mattag = back->MakeTag(Ttexture);
if (!mattag) return FALSE;
scene->pDoc->InsertObject(back, NULL, NULL);
return TRUE;
}
break;
case MATPREVIEW_PREPARE_SCENE:
{
MatPreviewPrepareScene* preparescene = (MatPreviewPrepareScene* )data;
BaseMaterial *matclone = BaseMaterial::Alloc(Mmaterial);
AutoAlloc<AliasTrans> trans;
if (!trans)
return FALSE;
if (!trans->Init(GetActiveDocument()))
return FALSE;
Filename mypreview;
mypreview.SetString("tempprev.jpg");
BaseBitmap * bitprev = BaseBitmap::Alloc();
LONG test = bitprev->Init(mypreview,-1,0);
if ( test != IMAGE_OK) GePrint ("error");
PluginShader *shd = NULL;
shd = PluginShader::Alloc(Xbitmap);
if(!shd) return FALSE;
BaseContainer *shddata = shd->GetDataInstance();
BaseContainer * matdata = matclone->GetDataInstance();
matdata->SetLink(MATERIAL_COLOR_SHADER, shd);
matclone->InsertShader(shd, NULL);
shddata->SetFilename(BITMAPSHADER_FILENAME, "mypreview");
shd->Message(MSG_UPDATE);
matclone->Message(MSG_UPDATE);
matclone->Update(TRUE, FALSE);
EventAdd();
BaseMaterial* matclone2 = (BaseMaterial* )(matclone->GetClone(0, trans));
preparescene->pDoc->InsertMaterial(matclone2);
if (preparescene->pLink) preparescene->pLink->SetLink(matclone2); // necessary
BaseObject* back = preparescene->pDoc->SearchObject("back");
if (back)
{
TextureTag* textag = (TextureTag* )back->GetTag(Ttexture);
if (textag)
textag->SetMaterial(matclone2);
}
preparescene->bScenePrepared = TRUE;
return TRUE;
}
break;
case MATPREVIEW_GET_POPUP_OPTIONS:
{
return TRUE;
}
break;
case MATPREVIEW_HANDLE_POPUP_MSG:
{
return TRUE;
}
break;
case MATPREVIEW_GENERATE_IMAGE:
{
MatPreviewGenerateImage* image = (MatPreviewGenerateImage* )data;
if (!image->bEditorPreview)
{
if (image->pDoc)
{
LONG w = image->pDest->GetBw();
LONG h = image->pDest->GetBh();
BaseContainer bcRender = image->pDoc->GetActiveRenderData()->GetData();
bcRender.SetReal(RDATA_XRES, w);
bcRender.SetReal(RDATA_YRES, h);
bcRender.SetLong(RDATA_ANTIALIASING, ANTI_GEOMETRY);
image->pDest->Clear(0, 0, 0);
image->lResult = RenderDocument(image->pDoc, bcRender, NULL, NULL, image->pDest, RENDERFLAG_EXTERNAL | RENDERFLAG_PREVIEWRENDER, image->pThread);
}
}
return TRUE;
}
break;
}
return MaterialData::Message(node, type, data);
}
i tried colors and various parameter of material work fine...
textuore shader don't work
any sugestion ?
Franz