adding layers to the render buffer

  • On 20/08/2015 at 13:06, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   15+ 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    this question may be related to an old thread,

    where Joey said:
    "the bitmap passed as "image->pDest" to RenderDocument() becomes the internal render bitmap of type MultipassBitmap.  When you call "vps->render->GetBuffer(VPBUFFER_RGBA, NOTOK)", you get the renderer's MultipassBitmap pointer.  As stated in the documentation, a VPBuffer is represents the same class internally as a MultipassBitmap, so a VPBuffer can be cast to the latter, and vice versa.  Therefore, you should be able to fill the bitmap to view the results in the material preview window."

    so what I try to do is adding a new layer to the VPBuffer* when rendering, it may be illegal the way I do, so may be some advice..
    a code snippet:

            	VPBuffer* m_rgba;
            	MultipassBitmap* m_test_;  
    		m_rgba = vps->render->GetBuffer(VPBUFFER_RGBA, NOTOK);
    		MultipassBitmap *rgba = (MultipassBitmap* )m_rgba;
    		m_test_ = rgba->AddLayer(rgba, COLORMODE_ARGBf);
    	for (int yy = y; yy < y + h; ++yy)
    		m_rgba->SetLine(x, (y2 - y1) - yy, w, &pData[(yy - y) * w * 4], 32, true);
    		VPBuffer* m_test = (VPBuffer* )m_test_;
    		m_test->SetLine(x, (y2 - y1) - yy, w, &pData[(yy - y) * w * 4], 32, true);

    this crashes, didn't check where it crashes "at creation of m_test_ or at writing, whatever it fails", so what should I do?

  • On 21/08/2015 at 02:03, xxxxxxxx wrote:


    you can create custom render buffers using AllocateBuffers() using Render::AllocateBuffer(). You find an example on how to create standard buffers in the Colorize example.

    You can also create a custom post effect buffer using Render::AllocateBufferFX(). Then you can access this buffer later with Render::GetBuffer(). Please note that you must enable "Multi-Pass" and add the "Post Effects" pass to enable custom post effect buffers.

    Best wishes,

  • On 21/08/2015 at 07:21, xxxxxxxx wrote:

    Hi Sebastian,
    thanks a lot for the help, it works to some extent, but there are problems "which I don't know why they happen., I searched and found most examples of AllocateBufferFX() did the same as I did"

    I activated mutlipass, post effects.
    1- weird image...
    2- layers don't appear

    inside AllocateBuffers()

    	Int32 needbitdepth = 32;	//8, also 16 and 32 are possible
    	m_test = render->AllocateBufferFX(VPBUFFER_POSTEFFECT, String("atestbuffer"), needbitdepth, TRUE);

    inside (vps->vp==VIDEOPOSTCALL_INNER && vps->open)

            m_test_ = vps->render->GetBuffer(VPBUFFER_POSTEFFECT, m_test);  

    filling buffers

    	for (int yy = y; yy < y + h; ++yy)
    		m_rgba->SetLine(x, (y2 - y1) - yy, w, &pData[(yy - y) * w * 4], 32, TRUE);
    		m_test_->SetLine(x, yy, w, &pData[(yy - y) * w * 4], 32, TRUE);//did it upside down to check


Log in to reply