2006-07-18 23:21:48 +08:00
|
|
|
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
|
2003-01-22 00:45:36 +08:00
|
|
|
*
|
|
|
|
* This library is open source and may be redistributed and/or modified under
|
|
|
|
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
|
|
|
* (at your option) any later version. The full license is in LICENSE file
|
|
|
|
* included with this distribution, and on the openscenegraph.org website.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* OpenSceneGraph Public License for more details.
|
|
|
|
*/
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2001-12-22 06:48:19 +08:00
|
|
|
#ifndef OSG_DisplaySettings
|
|
|
|
#define OSG_DisplaySettings 1
|
2001-12-19 08:38:23 +08:00
|
|
|
|
|
|
|
#include <osg/Referenced>
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
namespace osg {
|
|
|
|
|
2003-02-19 05:58:40 +08:00
|
|
|
// forward declare
|
|
|
|
class ArgumentParser;
|
|
|
|
class ApplicationUsage;
|
|
|
|
|
2001-12-22 06:48:19 +08:00
|
|
|
/** DisplaySettings class for encapsulating what visuals are required and
|
2001-12-19 08:38:23 +08:00
|
|
|
* have been set up, and the status of stereo viewing.*/
|
2005-04-12 01:14:17 +08:00
|
|
|
class OSG_EXPORT DisplaySettings : public osg::Referenced
|
2001-12-19 08:38:23 +08:00
|
|
|
{
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
2004-08-31 22:08:12 +08:00
|
|
|
/** Maintain a DisplaySettings singleton for objects to query at runtime.*/
|
2002-02-28 08:11:31 +08:00
|
|
|
static DisplaySettings* instance();
|
|
|
|
|
|
|
|
|
2001-12-22 06:48:19 +08:00
|
|
|
DisplaySettings()
|
2001-12-19 08:38:23 +08:00
|
|
|
{
|
|
|
|
setDefaults();
|
|
|
|
readEnvironmentalVariables();
|
|
|
|
}
|
|
|
|
|
2003-03-14 18:49:06 +08:00
|
|
|
DisplaySettings(ArgumentParser& arguments)
|
2001-12-19 08:38:23 +08:00
|
|
|
{
|
|
|
|
setDefaults();
|
|
|
|
readEnvironmentalVariables();
|
2003-03-14 18:49:06 +08:00
|
|
|
readCommandLine(arguments);
|
2001-12-19 08:38:23 +08:00
|
|
|
}
|
|
|
|
|
2001-12-22 06:48:19 +08:00
|
|
|
DisplaySettings(const DisplaySettings& vs);
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2002-02-28 08:11:31 +08:00
|
|
|
|
2001-12-22 06:48:19 +08:00
|
|
|
DisplaySettings& operator = (const DisplaySettings& vs);
|
2002-02-28 08:11:31 +08:00
|
|
|
|
2004-05-05 17:16:12 +08:00
|
|
|
void setDisplaySettings(const DisplaySettings& vs);
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2001-12-22 06:48:19 +08:00
|
|
|
void merge(const DisplaySettings& vs);
|
2001-12-19 08:38:23 +08:00
|
|
|
|
|
|
|
void setDefaults();
|
|
|
|
|
2004-05-05 17:16:12 +08:00
|
|
|
/** read the environmental variables.*/
|
2001-12-19 08:38:23 +08:00
|
|
|
void readEnvironmentalVariables();
|
|
|
|
|
2003-02-19 00:36:42 +08:00
|
|
|
/** read the commandline arguments.*/
|
2003-03-14 18:49:06 +08:00
|
|
|
void readCommandLine(ArgumentParser& arguments);
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2003-10-01 23:56:52 +08:00
|
|
|
|
|
|
|
enum DisplayType
|
|
|
|
{
|
|
|
|
MONITOR,
|
|
|
|
POWERWALL,
|
|
|
|
REALITY_CENTER,
|
|
|
|
HEAD_MOUNTED_DISPLAY
|
|
|
|
};
|
|
|
|
|
|
|
|
void setDisplayType(DisplayType type) { _displayType = type; }
|
|
|
|
|
|
|
|
DisplayType getDisplayType() const { return _displayType; }
|
|
|
|
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2002-09-02 20:31:35 +08:00
|
|
|
void setStereo(bool on) { _stereo = on; }
|
|
|
|
bool getStereo() const { return _stereo; }
|
2001-12-19 08:38:23 +08:00
|
|
|
|
|
|
|
enum StereoMode
|
|
|
|
{
|
|
|
|
QUAD_BUFFER,
|
|
|
|
ANAGLYPHIC,
|
|
|
|
HORIZONTAL_SPLIT,
|
2002-11-12 18:22:38 +08:00
|
|
|
VERTICAL_SPLIT,
|
|
|
|
LEFT_EYE,
|
2005-10-25 23:43:04 +08:00
|
|
|
RIGHT_EYE,
|
|
|
|
HORIZONTAL_INTERLACE,
|
|
|
|
VERTICAL_INTERLACE
|
2001-12-19 08:38:23 +08:00
|
|
|
};
|
|
|
|
|
2002-09-02 20:31:35 +08:00
|
|
|
void setStereoMode(StereoMode mode) { _stereoMode = mode; }
|
|
|
|
StereoMode getStereoMode() const { return _stereoMode; }
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2002-09-02 20:31:35 +08:00
|
|
|
void setEyeSeparation(float eyeSeparation) { _eyeSeparation = eyeSeparation; }
|
|
|
|
float getEyeSeparation() const { return _eyeSeparation; }
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2002-04-15 06:21:59 +08:00
|
|
|
enum SplitStereoHorizontalEyeMapping
|
|
|
|
{
|
|
|
|
LEFT_EYE_LEFT_VIEWPORT,
|
|
|
|
LEFT_EYE_RIGHT_VIEWPORT
|
|
|
|
};
|
|
|
|
|
|
|
|
void setSplitStereoHorizontalEyeMapping(SplitStereoHorizontalEyeMapping m) { _splitStereoHorizontalEyeMapping = m; }
|
|
|
|
SplitStereoHorizontalEyeMapping getSplitStereoHorizontalEyeMapping() const { return _splitStereoHorizontalEyeMapping; }
|
|
|
|
|
2002-09-02 20:31:35 +08:00
|
|
|
void setSplitStereoHorizontalSeparation(int s) { _splitStereoHorizontalSeparation = s; }
|
|
|
|
int getSplitStereoHorizontalSeparation() const { return _splitStereoHorizontalSeparation; }
|
2002-04-15 06:21:59 +08:00
|
|
|
|
|
|
|
enum SplitStereoVerticalEyeMapping
|
|
|
|
{
|
|
|
|
LEFT_EYE_TOP_VIEWPORT,
|
2002-05-27 14:37:51 +08:00
|
|
|
LEFT_EYE_BOTTOM_VIEWPORT
|
2002-04-15 06:21:59 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
void setSplitStereoVerticalEyeMapping(SplitStereoVerticalEyeMapping m) { _splitStereoVerticalEyeMapping = m; }
|
|
|
|
SplitStereoVerticalEyeMapping getSplitStereoVerticalEyeMapping() const { return _splitStereoVerticalEyeMapping; }
|
|
|
|
|
2002-09-02 20:31:35 +08:00
|
|
|
void setSplitStereoVerticalSeparation(int s) { _splitStereoVerticalSeparation = s; }
|
|
|
|
int getSplitStereoVerticalSeparation() const { return _splitStereoVerticalSeparation; }
|
2002-04-15 06:21:59 +08:00
|
|
|
|
2007-07-11 23:51:17 +08:00
|
|
|
void setSplitStereoAutoAdjustAspectRatio(bool flag) { _splitStereoAutoAdjustAspectRatio=flag; }
|
|
|
|
bool getSplitStereoAutoAdjustAspectRatio() const { return _splitStereoAutoAdjustAspectRatio; }
|
2003-05-27 19:03:49 +08:00
|
|
|
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2003-11-05 00:38:10 +08:00
|
|
|
void setScreenWidth(float width) { _screenWidth = width; }
|
|
|
|
float getScreenWidth() const { return _screenWidth; }
|
|
|
|
|
2002-09-02 20:31:35 +08:00
|
|
|
void setScreenHeight(float height) { _screenHeight = height; }
|
|
|
|
float getScreenHeight() const { return _screenHeight; }
|
2001-12-22 06:48:19 +08:00
|
|
|
|
2003-11-05 00:38:10 +08:00
|
|
|
void setScreenDistance(float distance) { _screenDistance = distance; }
|
|
|
|
float getScreenDistance() const { return _screenDistance; }
|
|
|
|
|
|
|
|
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2002-09-02 20:31:35 +08:00
|
|
|
void setDoubleBuffer(bool flag) { _doubleBuffer = flag; }
|
|
|
|
bool getDoubleBuffer() const { return _doubleBuffer; }
|
2001-12-19 08:38:23 +08:00
|
|
|
|
|
|
|
|
2002-09-02 20:31:35 +08:00
|
|
|
void setRGB(bool flag) { _RGB = flag; }
|
|
|
|
bool getRGB() const { return _RGB; }
|
2001-12-19 08:38:23 +08:00
|
|
|
|
|
|
|
|
2002-09-02 20:31:35 +08:00
|
|
|
void setDepthBuffer(bool flag) { _depthBuffer = flag; }
|
|
|
|
bool getDepthBuffer() const { return _depthBuffer; }
|
2001-12-19 08:38:23 +08:00
|
|
|
|
|
|
|
|
2002-09-02 20:31:35 +08:00
|
|
|
void setMinimumNumAlphaBits(unsigned int bits) { _minimumNumberAlphaBits = bits; }
|
|
|
|
unsigned int getMinimumNumAlphaBits() const { return _minimumNumberAlphaBits; }
|
|
|
|
bool getAlphaBuffer() const { return _minimumNumberAlphaBits!=0; }
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2002-09-02 20:31:35 +08:00
|
|
|
void setMinimumNumStencilBits(unsigned int bits) { _minimumNumberStencilBits = bits; }
|
|
|
|
unsigned int getMinimumNumStencilBits() const { return _minimumNumberStencilBits; }
|
|
|
|
bool getStencilBuffer() const { return _minimumNumberStencilBits!=0; }
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2005-11-03 03:15:18 +08:00
|
|
|
void setMinimumNumAccumBits(unsigned int red, unsigned int green, unsigned int blue, unsigned int alpha);
|
|
|
|
unsigned int getMinimumNumAccumRedBits() const { return _minimumNumberAccumRedBits; }
|
|
|
|
unsigned int getMinimumNumAccumGreenBits() const { return _minimumNumberAccumGreenBits; }
|
|
|
|
unsigned int getMinimumNumAccumBlueBits() const { return _minimumNumberAccumBlueBits; }
|
|
|
|
unsigned int getMinimumNumAccumAlphaBits() const { return _minimumNumberAccumAlphaBits; }
|
|
|
|
bool getAccumBuffer() const { return (_minimumNumberAccumRedBits+_minimumNumberAccumGreenBits+_minimumNumberAccumBlueBits+_minimumNumberAccumAlphaBits)!=0; }
|
|
|
|
|
2002-02-28 08:11:31 +08:00
|
|
|
|
2006-07-26 23:29:26 +08:00
|
|
|
void setMaxNumberOfGraphicsContexts(unsigned int num);
|
|
|
|
unsigned int getMaxNumberOfGraphicsContexts() const;
|
2002-02-28 08:11:31 +08:00
|
|
|
|
2006-03-14 05:29:17 +08:00
|
|
|
void setNumMultiSamples(unsigned int samples) { _numMultiSamples = samples; }
|
|
|
|
unsigned int getNumMultiSamples() const { return _numMultiSamples; }
|
|
|
|
bool getMultiSamples() const { return _numMultiSamples!=0; }
|
2002-02-28 08:11:31 +08:00
|
|
|
|
2001-12-19 08:38:23 +08:00
|
|
|
protected:
|
|
|
|
|
2003-01-10 17:25:42 +08:00
|
|
|
virtual ~DisplaySettings();
|
|
|
|
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2003-10-01 23:56:52 +08:00
|
|
|
DisplayType _displayType;
|
2002-04-15 06:21:59 +08:00
|
|
|
bool _stereo;
|
|
|
|
StereoMode _stereoMode;
|
2002-08-29 11:22:27 +08:00
|
|
|
float _eyeSeparation;
|
2003-11-05 00:38:10 +08:00
|
|
|
float _screenWidth;
|
2002-04-15 06:21:59 +08:00
|
|
|
float _screenHeight;
|
2003-11-05 00:38:10 +08:00
|
|
|
float _screenDistance;
|
2002-04-15 06:21:59 +08:00
|
|
|
|
|
|
|
SplitStereoHorizontalEyeMapping _splitStereoHorizontalEyeMapping;
|
2002-08-29 11:22:27 +08:00
|
|
|
int _splitStereoHorizontalSeparation;
|
2002-04-15 06:21:59 +08:00
|
|
|
SplitStereoVerticalEyeMapping _splitStereoVerticalEyeMapping;
|
2002-08-29 11:22:27 +08:00
|
|
|
int _splitStereoVerticalSeparation;
|
2003-05-27 19:03:49 +08:00
|
|
|
bool _splitStereoAutoAdjustAspectRatio;
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2002-04-15 06:21:59 +08:00
|
|
|
bool _doubleBuffer;
|
|
|
|
bool _RGB;
|
|
|
|
bool _depthBuffer;
|
|
|
|
unsigned int _minimumNumberAlphaBits;
|
|
|
|
unsigned int _minimumNumberStencilBits;
|
2005-11-03 03:15:18 +08:00
|
|
|
unsigned int _minimumNumberAccumRedBits;
|
|
|
|
unsigned int _minimumNumberAccumGreenBits;
|
|
|
|
unsigned int _minimumNumberAccumBlueBits;
|
|
|
|
unsigned int _minimumNumberAccumAlphaBits;
|
2001-12-19 08:38:23 +08:00
|
|
|
|
2002-09-04 18:49:17 +08:00
|
|
|
unsigned int _maxNumOfGraphicsContexts;
|
2006-03-14 05:29:17 +08:00
|
|
|
|
|
|
|
unsigned int _numMultiSamples;
|
2001-12-19 08:38:23 +08:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
# endif
|