THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 31/03/2008 at 14:35, xxxxxxxx wrote:
Youhave to use a MultipassBitmap to access the Alpha of RenderDocument().
Here a working InitGLImage() function:
> \> Bool SimpleMaterial::InitGLImage(PluginMaterial \*mat, BaseDocument \*doc, BaseThread \*th, BaseBitmap \*bmp) \> { \> if(bmp) \> { \> LONG bw = bmp->GetBw(); \> LONG bh = bmp->GetBh(); \> \> MultipassBitmap \*tmp = MultipassBitmap::Alloc(bw,bh,MODE_RGB); \> if(!bmp) return FALSE; \> \> AutoAlloc<BaseDocument> rdoc; \> if(!rdoc) return FALSE; \> \> BaseObject \*plane = BaseObject::Alloc(Oplane); \> if(!plane) return FALSE; \> \> Material \*mat = Material::Alloc(); \> if(!mat) return FALSE; \> \> mat->SetChannelState(CHANNEL_ALPHA,TRUE); \> BaseChannel \*ch = mat->GetChannel(CHANNEL_ALPHA); \> \> BaseContainer cdata; \> cdata.SetLong(BASECHANNEL_SHADERID, 1001162); \> ch->SetData(cdata); \> \> rdoc->InsertMaterial(mat, NULL, FALSE); \> \> TextureTag \*ttag = TextureTag::Alloc(); \> if(!ttag) return FALSE; \> \> ttag->SetMaterial(mat); \> \> GeData d(TEXTURETAG_PROJECTION_UVW); \> ttag->SetParameter(DescLevel(TEXTURETAG_PROJECTION),d,NULL); \> \> plane->InsertTag(ttag, NULL); \> \> BaseContainer \*data = plane->GetDataInstance(); \> data->SetReal(PRIM_PLANE_WIDTH, 100.0); \> data->SetReal(PRIM_PLANE_HEIGHT, 100.0); \> data->SetLong(PRIM_PLANE_SUBW, 1); \> data->SetLong(PRIM_PLANE_SUBH, 1); \> \> rdoc->InsertObject(plane, NULL, NULL, FALSE); \> \> BaseObject \*camera = rdoc->GetRenderBaseDraw()->GetEditorCamera(); \> if(!camera) return FALSE; \> \> camera->SetPos(Vector(0.0,100.0,0.0)); \> camera->SetRot(Vector(0.0,-pi/2.0,0.0)); \> \> BaseContainer rdata = rdoc->GetActiveRenderData()->GetData(); \> rdata.SetLong(RDATA_XRES, bw); \> rdata.SetLong(RDATA_YRES, bh); \> rdata.SetBool(RDATA_ALPHACHANNEL, TRUE); \> rdata.SetLong(RDATA_ANTIALIASING, ANTI_BEST); \> \> if(RenderDocument(rdoc, rdata, NULL, NULL, tmp, RENDERFLAG_EXTERNAL, th) == RAY_OK) \> { \> LONG x,y; \> for(y=0; y<bh; y++) \> { \> for(x=0; x<bw; x++) \> { \> AlphaBitmap \*alpha = bmp->GetInternalChannel(); \> if(!alpha) alpha = bmp->AddChannel(TRUE,FALSE); \> \> UWORD value = 0; \> tmp->GetAlphaPixel(tmp->GetChannelNum(0),x,y,&value;); \> bmp->SetAlphaPixel(alpha,x,y,value); \> } \> } \> } \> \> MultipassBitmap::Free(tmp); \> } \> \> return TRUE; \> } \>
cheers,
Matthias