Preview Render



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 21/08/2008 at 17:43, xxxxxxxx wrote:

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

    ---------
    I'm trying to generate a quick preview render - basically a screen capture of the current editor view. What I have done thus far is to change my render settings to render as editor, then generate a render. This works fine, except for when large particle systems are in the project. Cinema pre-rolls and calculates all the particles before generating the render, which can take several minutes to half an hour, depending on which frame the user is parked on. I have tried setting my render flag to RENDERFLAG_PREVIEWRENDER, but that only generates a completely white image. Not sure why... I had my thread parameter set to NULL, but even when setting it to my own thread, I still get a white frame. I have also tried variations with RENDERFLAG_NODOCUMENTCLONE added as well with the same results. Unless I'm using RENDERFLAG_EXTERNAL I get a white frame.

    Here is some of my code...

    //To set up thread...

    class RenderThread : public Thread
    {
       public:
            virtual void Main(void);
            virtual const CHAR *GetThreadName(void) {return "My Thread";}
    }

    void RenderThread::Main(void)
    {
    }

    //Generate the render. All render settings have already been set...

    AutoAlloc<BaseBitmap> bmp;
    bmp->Init(renderData->GetLong(RDATA_XRES), renderData->GetLong(RDATA_YRES));
    C4DAtom* docCloneAtom = doc->GetClone(COPY_DOCUMENT, NULL);
    BaseDocument* docClone = (BaseDocument* )docCloneAtom;
    StopAllThreads();

    RenderThread myThread;
    myThread.Start(FALSE);
    RenderDocument(docClone, docClone->GetActiveRenderData()->GetData(), NULL, NULL, bmp, RENDERFLAG_NODOCUMENTCLONE || RENDERFLAG_PREVIEWRENDER, myThread);

    Any advice on setting up a thread correctly for rendering or disabling the render preroll would be greatly appreciated.

    Thanks!
    Adam



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 22/08/2008 at 05:53, xxxxxxxx wrote:

    Currently I can't help you about disabling the preroll but here is some simple code how to use an own thread for rendering.

    > \> class RenderThread : public Thread \> { \>      private: \>           BaseDocument \*m_doc; \>           BaseBitmap \*m_bmp; \>           BaseContainer m_rc; \> \>      public: \>           RenderThread(BaseDocument \*doc, BaseBitmap \*bmp, BaseContainer rc) { m_doc = doc; m_bmp = bmp; m_rc = rc; } \>           virtual ~RenderThread() { m_doc = NULL; m_bmp = NULL; End(); Wait(FALSE); } \> \>           virtual void Main(void); \>           virtual const CHAR \*GetThreadName(void) { return "RenderThread"; } \> }; \> \> static void ProgressFunction(Real p, void \*data) \> { \>      GePrint(RealToString(p)); \> } \> \> void RenderThread::Main(void) \> { \>      GePrint("render thread"); \>      if(RenderDocument(m_doc, m_rc, ProgressFunction, NULL, m_bmp, RENDERFLAG_EXTERNAL|RENDERFLAG_NODOCUMENTCLONE|RENDERFLAG_PREVIEWRENDER, this->Get()) != RAY_OK) \>           GePrint("not ok"); \> } \> \> class MenuTest : public CommandData \> { \>      public: \>           virtual Bool Execute(BaseDocument \*doc); \> }; \> \> Bool MenuTest::Execute(BaseDocument \*doc) \> { \>      AutoAlloc<BaseBitmap> bmp; \>      if(!bmp) return FALSE; \> \>      BaseDocument \*cdoc = (BaseDocument\* )doc->GetClone(COPY_DOCUMENT, NULL); \> \>      BaseContainer rc = cdoc->GetActiveRenderData()->GetData(); \>      bmp->Init(rc.GetLong(RDATA_XRES), rc.GetLong(RDATA_YRES), 24); \> \>      rc.SetLong(RDATA_RENDERASEDITOR, 3); \> \>      RenderThread rt(cdoc, bmp, rc); \>      rt.Start(FALSE); \> \>      ShowBitmap(bmp); \> \>      BaseDocument::Free(cdoc); \> \>      return TRUE; \> } \>

    Btw. from your code

    > \> RenderDocument(docClone, docClone->GetActiveRenderData()->GetData(), NULL, NULL, bmp, RENDERFLAG_NODOCUMENTCLONE || RENDERFLAG_PREVIEWRENDER, myThread) \>

    RENDERFLAG_NODOCUMENTCLONE and RENDERFLAG_PREVIEWRENDER are flag bits so if you want to combine them you have to write

    RENDERFLAG_NODOCUMENTCLONE|RENDERFLAG_PREVIEWRENDER
    and not
    RENDERFLAG_NODOCUMENTCLONE || RENDERFLAG_PREVIEWRENDER

    cheers,
    Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 22/08/2008 at 16:58, xxxxxxxx wrote:

    Sorry,Matthias. I was retyping from my code. That was a typo.

    I'll try out the threading and see how that works.

    Thanks!
    Adam



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 22/08/2008 at 17:50, xxxxxxxx wrote:

    I tried it out. Still getting the same problem as before.

    Am I misunderstanding the RENDERFLAG_PREVIEWRENDER flag? Shouldn't that create a preview like the kind seen in "Make Preview" renders?

    And any explanation about why I get a white frame when RENDERFLAG_EXTERNAL is missing? The SDK leads me to believe it is not a necessary flag, but that doesn't seem to be the case.

    Thanks!
    Adam



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 04/09/2008 at 08:21, xxxxxxxx wrote:

    Just got an answer from the developers. Unfortunatly it is currently not possible to make a snapshot without a preroll of the previous frames.

    cheers,
    Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 04/09/2008 at 09:47, xxxxxxxx wrote:

    Thanks for checking on that, Matthias.

    -Adam


Log in to reply