Stand Alone Rendering Engine

SARE

Class

inc/real/code2/r3sare.h

Description

BatcRen uses this class for renderin the project files. For more information, see inc/real/batchrenw/r3batchrenw.h class.

Examples

An example how to use the SARE class below. Note: sake of simplicity error handling is skipped.


    R3OBJ *sare, *progress;
    R3BOOL playanimation = FALSE; // or TRUE

    R3RegisterSAREClass(app);

    // create stand alone renderer
    sare = R3New(R3CLID_SARE,
                 R3SAREA_Width, 200,
                 R3SAREA_Height, 200,
                 R3SAREA_FrSpecName, "my rendering configuration",
                 R3SAREA_OutputName, "myimage",
                 R3SAREA_Hosts, "mysgi;mymac;myintel",
                 R3TAG_END);
    R3DoA(sare, R3RM_REF, NULL);

    // load project and initialize renderer
    R3DoA3(sare, R3SAREM_LOADPROJECT, (void *)~0,  (void *)TRUE, "myproject.r3d")) {
    R3DoA(sare, R3SAREM_INITRENDER, NULL);

    if(playanimation) // render frames 0 ... 20
        R3DoA2(sare, R3SAREM_PLAYRANGE, (void *)0, (void*)20);
    else // render the current frame
        R3DoA(sare, R3SAREM_RENDER, NULL)) {

    // we could now do something else while the 
    // renderer is rendering the image on another thread, threads or workstations
    // no better things to do so let's just wait the renderer and 
    // show simple progress status using printf()

    R3GetAttrs(sare, R3SAREA_Progress, &progress, R3TAG_END);
    while(!R3DoA(sare, R3SAREM_WAIT, (void*)TRUE)) {
        R3FLOAT rel;
        R3GetAttrs(progress, R3PROGREA_TotalRelative, &rel, R3TAG_END);
        printf("Rendering %d %%\r", (int)(100 * rel));
    }
    printf("done\n");

    R3DoA(sare, R3RM_UNREF, NULL);