Color problem with pfuSaveImage

New Message Reply Date view Thread view Subject view Author view

Steve McGee (smcgee++at++psl.nmsu.edu)
Wed, 04 Feb 1998 08:36:15 -0700


    Hi folks.

    A somtime performer with a problem here.

    I've got a simple little app from which I'm optionally
    using pfuSaveImage to capture frames.

    The resulting image has only a red component witness:

                    ftp://shamu.psl.nmsu.edu/pub/temp/test_0005.rgb

    Any ideas?

    Is there a mode I need to set?

    Particulars and pertinent code below:

    uname -a: IRIX64 banshee 6.2 03131016 IP19

versions | grep -i performer
I performer_dev 10/24/96 Performer2.0 Development Software
I performer_dev.books 10/24/96 IRIS InSight Books, Release 2.2
I performer_dev.books.Perf_PG 10/24/96 Performer2.0 Programming Guide
I performer_dev.man 10/24/96 Performer2.0 Documentation
I performer_dev.man.c 10/24/96 Performer2.0 C Man Pages
I performer_dev.man.c++ 10/24/96 Performer2.0 C++ Man Pages
I performer_dev.man.common 10/24/96 Performer2.0 Non-Language-Specific Man
Pages
I performer_dev.man.relnotes 10/24/96 Performer2.0 Release Notes
I performer_dev.src 10/24/96 Performer2.0 Sample and Loader Code
I performer_dev.src.loader 10/24/96 Performer2.0 Loader Code
I performer_dev.src.sample 10/24/96 Performer2.0 Sample Code
I performer_dev.sw 10/24/96 Performer2.0 Development Environment
I performer_dev.sw.common_debug_performer 10/24/96 Performer2.0
GL-independent Debug DSOs
I performer_dev.sw.hdr 10/24/96 Performer2.0 Headers
I performer_dev.sw.igl_debug_performer 10/24/96 Performer2.0 IrisGL Debug
DSOs
I performer_dev.sw.ogl_debug_performer 10/24/96 Performer2.0 OpenGL Debug
DSOs
I performer_dev.sw32 10/24/96 Performer2.0 N32 Development Environment
I performer_dev.sw32.common_debug_performer 10/24/96 Performer2.0
GL-independent Debug DSOs (n32)
I performer_dev.sw32.igl_debug_performer 10/24/96 Performer2.0 IrisGL Debug
DSOs (n32)
I performer_dev.sw32.ogl_debug_performer 10/24/96 Performer2.0 OpenGL Debug
DSOs (n32)
I performer_dev.sw64 10/24/96 Performer2.0 N64 Development Environment
I performer_dev.sw64.debug_performer 10/24/96 Performer2.0 Debug DSOs (n64)
I performer_eoe 10/24/96 Performer2.0.1 Execution Environment
I performer_eoe.man 10/24/96 Performer2.0.1 EOE Documentation
I performer_eoe.man.relnotes 10/24/96 Performer2.0.1 EOE Release Notes
I performer_eoe.sw 10/24/96 Performer2.0.1 Execution Software
I performer_eoe.sw.common_performer 10/24/96 Performer2.0.1 GL-independent
DSOs
I performer_eoe.sw.data 10/24/96 Performer2.0.1 Sample Data and Fonts
I performer_eoe.sw.demo 10/24/96 Performer2.0.1 Demos
I performer_eoe.sw.igl_performer 10/24/96 Performer2.0.1 IrisGL DSOs
I performer_eoe.sw.ogl_performer 10/24/96 Performer2.0.1 OpenGL DSOs
I performer_eoe.sw.performer1_2 10/24/96 Performer 1.2 Compatibility DSOs
I performer_eoe.sw32 10/24/96 Performer2.0.1 N32 Execution Software
I performer_eoe.sw32.common_performer 10/24/96 Performer2.0.1 GL-independent
DSOs (n32)
I performer_eoe.sw32.igl_performer 10/24/96 Performer2.0.1 IrisGL DSOs (n32)
I performer_eoe.sw32.ogl_performer 10/24/96 Performer2.0.1 OpenGL DSOs (n32)
I performer_eoe.sw64 10/24/96 Performer2.0.1 N64 Execution Software
I performer_eoe.sw64.performer 10/24/96 Performer2.0.1 DSOs (n64)

#include <stdlib.h>
#include <stdio.h>

#include <Performer/pf/pfChannel.h>
#include <Performer/pf/pfLightSource.h>
#include <Performer/pf/pfNode.h>
#include <Performer/pf/pfScene.h>
#include <Performer/pf.h>

#include <Performer/image.h>

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

#include "scenario.h"

void SaveFrame( char *FileRoot, int n, int WinX, int WinY );

void main( int argc, char *argv[])
{
  char *ScenarioFileName, *ImageFileRoot;
  double ImageTimeIncrement = .05;

  int SaveImages = 0, ImageFileNum = 0;

  int screen;
  int maxScreenX, maxScreenY;
  Display *dsp;

  pfScene *scene;
  pfGeoState *gst;

  pfSphere bsphere;
  pfCoord view;
  int i, NTSC=0;

  double t = 0.0;
//---------------------------------------------------------------------
// Command args...

  if(argc < 3){
    printf( "Usage: SimpleScenario [I root inc][-N ] -S ScenarioFile.ext\n");
    printf( "where:\n");
    printf( " -I ImageFileRoot TimeIncrement\n");
    printf( " -N NTSC size\n");
    printf( " -S ScenarioFileName\n");
    exit(1);
  }

  for(i=1; i<argc; i++){
    switch( argv[i][0] )
      {
      case '-':
 switch( argv[i][1] )
   {
   case 'I':
     if( i < argc-2 ){
       i++;
       ImageFileRoot = argv[i];

       i++;
       ImageTimeIncrement = atof( argv[i] );

       SaveImages = 1;
     }
   case 'N':
     NTSC = 1;
     break;
   case 'S':
     if( i < argc-1 ){
       i++;
       ScenarioFileName = argv[i];
     }
     break;
   }
 break;
      default:
 break;
      }
  }
//---------------------------------------------------------------------
// Init...

  pfInit();
  pfMultiprocess( PFMP_DEFAULT );

  pfdInitConverter( ".wrl" );
  pfdInitConverter( ".iv" );
  pfdInitConverter( ".flt" );
  pfdInitConverter( ".sv" );
  pfdInitConverter( ".obj" );

  pfConfig();
  scene = new pfScene;

  gst = new pfGeoState;
  gst->setMode(PFSTATE_ENLIGHTING, PF_ON);
  scene->setGState(gst);

  pfNotifyLevel( PFNFY_FP_DEBUG );
//---------------------------------------------------------------------
// Configure and open GL window

  pfPipe *p = pfGetPipe(0);
  pfPipeWindow *pw = new pfPipeWindow(p);

  pw->setWinType(PFPWIN_TYPE_X);
  pw->setName("IRIS Performer");

  dsp = pfGetCurWSConnection(); /* get display for machine config queries */
  screen = DefaultScreen( dsp );
  maxScreenX = DisplayWidth(dsp, screen);
  maxScreenY = DisplayHeight(dsp, screen);

  if( NTSC )
    pw->setOriginSize(0,0, 640, 480 );
  else
    pw->setOriginSize(0,0, maxScreenX, maxScreenY );

  pw->open();
//---------------------------------------------------------------------
// Create and configure a pfChannel.

  pfChannel *chan = new pfChannel(p);
  chan->setScene(scene);
  chan->setFOV(45.0f, 0.0f);

  pfEarthSky *esky = new pfEarthSky();
  esky->setMode(PFES_BUFFER_CLEAR, PFES_FAST);
// esky->setColor(PFES_CLEAR, 0.2f, 0.2f, 0.8f, 1.0f);
  chan->setESky(esky);
//---------------------------------------------------------------------
// Create the Scenario...

  Scenario scenario = Scenario( ScenarioFileName, scene );
//---------------------------------------------------------------------
// determine extent of scene's geometry

  scene->getBound(&bsphere);
  chan->setNearFar(1.0f, 50.0f * bsphere.radius);
//-------------------------------------------------------------------------
// Update the scenario...

  // Splash stuff here...
  for(i=0; i<10; i++){
    pfSync();
    pfFrame();
  }

  if( SaveImages )
    scenario.NumSequences = 1;
  else
    pfInitClock( scenario.StartTime );

  for(i=0; i<scenario.NumSequences; i++){
    for(;;){

      if( SaveImages ){
 t = scenario.StartTime + (double)ImageFileNum * ImageTimeIncrement;
      }
      else{
 t = pfGetTime();
      }

      if( t > scenario.StopTime )
 break;

      scenario.Update( (double)t );

      view.hpr.set( scenario.EyeH, scenario.EyeP, scenario.EyeR );
      view.xyz.set( scenario.EyeX, scenario.EyeY, scenario.EyeZ );
      chan->setView(view.xyz, view.hpr);

      pfSync();
      pfFrame();

      if( SaveImages ){
 int WinX, WinY;
 pw->getSize( &WinX, &WinY );
 SaveFrame( ImageFileRoot, ImageFileNum++, WinX-1, WinY-1 );
      }
    }
  }
//-------------------------------------------------------------------------
  pfExit();
}

void SaveFrame( char *FileRoot, int n, int WinX, int WinY )
{
  char name[256];
  int i;
  sprintf( name, "%s%4.4d", FileRoot, n );
  printf("Creating file: %s\n", name );

  i = pfuSaveImage( name, 0,0, WinX,WinY, 0 );

  if( !i )
    printf("error writing: %s\n",name );
}

--
--------------------------------------------------------------
Steve McGee             smcgee++at++psl.nmsu.edu
--------------------------------------------------------------

======================================================================= List Archives, FAQ, FTP: http://www.sgi.com/Technology/Performer/ Submissions: info-performer++at++sgi.com Admin. requests: info-performer-request++at++sgi.com


New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2.0b2 on Mon Aug 10 1998 - 17:56:44 PDT

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