Usage of pfPWinWSDrawable with Pure IRIS GL windows

New Message Reply Date view Thread view Subject view Author view

Rejean Chartrand (rejeanc++at++cae.ca)
Thu, 21 Oct 1999 17:03:48 -0300


Hi,

I would like to know exactly how to use psPWinWSDrawable in order for
IRIS Performer 2.0 to be able to render the scene in the Pure IRIS GL
window that I am creating. Also, how can I (once the window is created)
reposition, resize, pop-up and push-down the window on demand (can I use
the old IRIS GL code to do that) ?

Thank you !

Rejean.

Code is the following :

/*
 * Copyright 1995, Silicon Graphics, Inc.
 * ALL RIGHTS RESERVED
 *
 * UNPUBLISHED -- Rights reserved under the copyright laws of the United

 * States. Use of a copyright notice is precautionary only and does
not
 * imply publication or disclosure.
 *
 * U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND:
 * Use, duplication or disclosure by the Government is subject to
restrictions
 * as set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the
Rights
 * in Technical Data and Computer Software clause at DFARS 252.227-7013
and/or
 * in similar or successor clauses in the FAR, or the DOD or NASA FAR
 * Supplement. Contractor/manufacturer is Silicon Graphics, Inc.,
 * 2011 N. Shoreline Blvd. Mountain View, CA 94039-7311.
 *
 * Permission to use, copy, modify, distribute, and sell this software
 * and its documentation for any purpose is hereby granted without
 * fee, provided that (i) the above copyright notices and this
 * permission notice appear in all copies of the software and related
 * documentation, and (ii) the name of Silicon Graphics may not be
 * used in any advertising or publicity relating to the software
 * without the specific, prior written permission of Silicon Graphics.
 *
 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
 *
 * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL,
 * INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY
 * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY
 * THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE
 * OR PERFORMANCE OF THIS SOFTWARE.
 *
 * simple.c: simple Performer program for programmer's guide
 *
 * $Revision: 1.47 $ $Date: 1995/11/22 14:36:13 $
 *
 */

#include <stdlib.h>
#include <Performer/pf.h>
#include <Performer/pfutil.h>
#include <Performer/pfdu.h>

/*
 * Usage() -- print usage advice and exit. This
 * procedure is executed in the application process.
 */
static void
Usage (void)
{
    pfNotify(PFNFY_FATAL, PFNFY_USAGE, "Usage: simple file.ext ...\n");
    exit(1);
}

int
main (int argc, char *argv[])
{
    float t = 0.0f;
    pfScene *scene;
    pfNode *root;
    pfPipe *p;
    pfPipeWindow *pw;
    pfChannel *chan;
    pfSphere bsphere;
    long gl_context_id;

    if (argc < 2)
 Usage();

    /* Initialize Performer */
    pfInit();

    /* Use default multiprocessing mode based on number of
     * processors.
     */
    pfMultiprocess( PFMP_DEFAULT );

    /* Load all loader DSO's before pfConfig() forks */
    pfdInitConverter(argv[1]);

    /* initiate multi-processing mode set in pfMultiprocess call
     * FORKs for Performer processes, CULL and DRAW, etc. happen here.
     */
    pfConfig();

    /* Append to Performer search path, PFPATH, files in
     * /usr/share/Performer/data */
    pfFilePath(".:/usr/share/Performer/data");

    /* Read a single file, of any known type. */
    if ((root = pfdLoadFile(argv[1])) == NULL)
    {
 pfExit();
 exit(-1);
    }

    /* Attach loaded file to a new pfScene. */
    scene = pfNewScene();
    pfAddChild(scene, root);
    /* Create a pfLightSource and attach it to scene. */
    pfAddChild(scene, pfNewLSource());

#if 0
    /* Configure and open GL window */
    p = pfGetPipe(0);
    pw = pfNewPWin(p);
    pfPWinType(pw, PFPWIN_TYPE_X);
    pfPWinName(pw, "IRIS Performer");
    pfPWinOriginSize(pw, 0, 0, 500, 500);
    /* Open and configure the GL window. */
    pfOpenPWin(pw);
#endif
    p = pfGetPipe(0);
    pw = pfNewPWin(p);

    foreground();
    prefposition( 7, 408, 695, 995 );
    gl_context_id = winopen("Test Window");
    winpop();
    winconstraints();

/*
    pfPWinGLCxt( pw ,(pfGLContext) gl_context_id );
*/
    pfPWinWSDrawable( pw, (pfWSConnection) gl_context_id, (pfWSDrawable)
gl_context_id ); ???????

    ortho2( 0, 400, 0, 300 );
    cpack( 0x00000000 );
    clear( );
    cpack( 0xffffffff );
    cmov2i( 60, 145 );
    charstr( "Initializing -- Please stand by" );
    swapbuffers( );

    /* Create and configure a pfChannel. */
    chan = pfNewChan(p);
    pfChanScene(chan, scene);
    pfChanFOV(chan, 45.0f, 0.0f);

    /* determine extent of scene's geometry */
    pfGetNodeBSphere (root, &bsphere);
    pfChanNearFar(chan, 1.0f, 10.0f * bsphere.radius);

    /* Simulate for twenty seconds. */
    while (t < 20.0f)
    {
 pfCoord view;
 float s, c;

 /* Go to sleep until next frame time. */
 pfSync();

 /* Initiate cull/draw for this frame. */
 pfFrame();

 /* Compute new view position. */
 t = pfGetTime();
 pfSinCos(45.0f*t, &s, &c);
 pfSetVec3(view.hpr, 45.0f*t, -10.0f, 0);
 pfSetVec3(view.xyz, 2.0f * bsphere.radius * s,
  -2.0f * bsphere.radius *c,
   0.5f * bsphere.radius);
 pfChanView(chan, view.xyz, view.hpr);
    }

    /* Terminate parallel processes and exit. */
    pfExit();
}


New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2.0b2 on Thu Oct 21 1999 - 13:01:50 PDT

This message has been cleansed for anti-spam protection. Replace '++at++' in any mail addresses with the '@' symbol.