Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
Hi,
I'm working on r20, and I found I can't use BaseShader::BakeShaderIntoBaseBitmap() because it is a new feature in r21. Trying find a way around, I want to extract the bitmap of the layer shader. However, my code does not work.
BaseBitmap* diffuseBitmap ; GeData gd; BaseShader* shader = bm->GetChannel(CHANNEL_DIFFUSION)->GetShader(); if (shader->GetType() == Xlayer) { LayerShader* layerShader = static_cast<LayerShader*>(shader); LayerShaderLayer* layerShaderLayer = layerShader->GetFirstLayer(); while (layerShaderLayer != NULL) { if (layerShaderLayer->GetType() == LayerType::TypeShader) { Bool res = layerShaderLayer->GetParameter(LAYER_S_PARAM_SHADER_LINK, gd); // diffuseBitmap = layerShaderLayer->GetPreview(); // this does not work, too! BaseLink *bl = gd.GetBaseLink(); // program stop here, and I can't see why BaseShader *thisShader = static_cast<BaseShader*>(bl->GetLinkAtom(bd)); thisShader->InitRender(irs); diffuseBitmap = thisShader->GetBitmap(); thisShader->FreeRender(); break; } layerShaderLayer = layerShaderLayer->GetNext(); } } else { // ... } ShowBitmap(diffuseBitmap); // can't see anything here when using 'layerShaderLayer->GetPreview()' diffuseBitmap->Save(fn, FILTER_JPG, nullptr, SAVEBIT::NONE); // fail when using 'GetPreview()'
Could anyone kindly explain where I am doing wrong? Thanks a lot!
what is wrong with BaseShader::Sample? BakeShaderIntoBaseBitmap is probably only a convenience wrapper around that method. For your program "stoping" (this is a quite broad description), have you ensured, that your BaseLink is actually populated and does not just return the null pointer?
BaseShader::Sample
BakeShaderIntoBaseBitmap
BaseLink
Cheers, zipit
Thank you for your reply, the BaseShader::Sample() helps me solve this problem. (Except that when the layer shader use transform layer, scale transformation is not automatically handled.) Anyway, thanks a lot!
Hi @hazzzel thanks for reaching out us.
With regard to your question, please consider that you might have to attach a VolumeData to the InitRenderStruct.
For this scope please have a look at:
Render::GetInitialVolumeData()
VolumeData::Alloc()
Best, R.