//------------------------------------------------------------
// $Id: frameBuffer.h,v 1.2 2000/06/14 13:29:37 yamauchi Exp $
//------------------------------------------------------------
//	mpi2 frame buffer (in host computer)
//	1996/8/7
//	(C) 1996-1998 Copyright YAMAUCHI Hitoshi 山内 斉
//------------------------------------------------------------
#ifndef _frameBuffer_h
#define _frameBuffer_h 1

// #include <stdio.h>
// #include "mpi2.h"

#include "YorN.h"
#include "Vector3.h"
#include "Intensity.h"

enum RGB_Bufname_e {
    RED_buf,
    GREEN_buf,
    BLUE_buf,			// enum の最後に, がつけられないとは
    RGB_NUM			// C の文法の非対称な点に思う
    // A_buf,
};

class frameBufferClass {
private:
    frameBufferClass(const frameBufferClass& rhs);
    const frameBufferClass& operator=(const frameBufferClass& rhs);

protected:
    double **mppBuffer[RGB_NUM]; // double であるか int が良いか? 
    int      mXScreenSize;	 // screen size x
    int      mYScreenSize;	 // 		 y
    YorN     mIsImmidiateOut;	 // 情報を受信したらすぐに出力するか

protected:
    void savePBMRaw(FILE *pfp);
    void saveGFBRaw(FILE *pfp);

public:
    frameBufferClass(void);
    void init(int screenX, int screenY);
    // 受信データをすぐに stdout に出力するかのフラグ操作
    void setImmidiateOut(void)		
    {
	this->mIsImmidiateOut = YES;	
    }
    void unsetImmidiateOut(void)	
    {
	this->mIsImmidiateOut = NO;	
    }
    YorN getImmidiateOut(void) const 	
    {
	return(this->mIsImmidiateOut);
    }
    void saveData(const char *pSaveName);

    void setIntensity(const IntensityClass &intensity_val);
};

#endif				// #ifndef _host_h
