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_PREVIEWRENDERcheers,
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