How to bake shader into basebitmap?



  • Hi all,

    I'm trying to use BaseShader::BakeShaderIntoBaseBitmap() to get a 2D representation of the shader. However, I couldn't get the correct result.

    BaseDocument* bd = GetActiveDocument();
    InitRenderStruct irs{ bd };
    BaseBitmap* bit = BaseBitmap::Alloc();
    BaseShader* shader = mat->GetChannel(CHANNEL_DIFFUSION)->GetShader();
    shader->BakeShaderIntoBaseBitmap(*bit, *bd, irs.thread, false, irs.document_colorprofile, irs.linear_workflow, true, 0, 1000, 0, 1000)
    ShowBitmap(bit);
    

    I have read 'BaseShader Manual', but I'm not sure where to get a parentThread, so I used irs.thread...

    Any ideas or examples?



  • hi,

    What do you mean by "get the correct result" ?

    in the BaseShader manual, the thread is just the current thread :

    BaseThread* const parentThread = GeGetCurrentThread();
    if (parentThread == nullptr)
    	return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);
    

    You should just have to passe the thread provided to you by a function argument where you are executing your code, retrieve the CurrentThread or use nullptr.

    Your bitmap must be initialise :

    AutoAlloc<BaseBitmap> bitmap;
    if (bitmap == nullptr)
    	return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    
    const maxon::Int32 sizeX = 256;
    const maxon::Int32 sizeY = 256;
    const maxon::Int32 bitDepth = 32;
    
    const IMAGERESULT imageResult = bitmap->Init(sizeX, sizeY, bitDepth, INITBITMAPFLAGS::NONE);
    if (imageResult != IMAGERESULT::OK)
    	return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    
    

    By the way, the bitmap argument pointer passed to BakeShaderIntoBaseBitmap should be passe without the * before it.

    hope that help, let us know if you have more questions

    Cheers,
    Manuel



  • Thanks a lot!


Log in to reply