562 lines
22 KiB
C++
562 lines
22 KiB
C++
/*************************************************************************/
|
|
/* File : VRContext.h */
|
|
/* Author : Leïla AIT KACI */
|
|
/* */
|
|
/* Base Class for Virtools VRPack Managers */
|
|
/* Virtools SDK */
|
|
/* Copyright (c) Virtools 2004, All Rights Reserved. */
|
|
/*************************************************************************/
|
|
#ifndef VRContext_H
|
|
|
|
#define VRContext_H "$Id:$"
|
|
|
|
#include "windows.h"
|
|
|
|
#include "VRBaseManager.h"
|
|
|
|
#if defined(FLEXLM)
|
|
#include "VFlexLMUtils.h"
|
|
#endif
|
|
|
|
#include <list>
|
|
#include <vector>
|
|
#include <string>
|
|
|
|
// Forward declaration
|
|
|
|
class CKPluginManager;
|
|
class FileLogger;
|
|
class NVGPUAffinity;
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
{filename:VRContext}
|
|
Summary: Main VR Interface Context
|
|
Remarks:
|
|
+ The VRContext object gives access to all VR informations for Virtools VR Pack
|
|
applications.
|
|
+ Use VRCreateContext to create a new VR context and VRCloseContext to close it.
|
|
+ Use VRGetContext to get the VRContext attached to a give CKContext.
|
|
+ For now, the VRContext is not available in Virtools Dev Mode, it is only
|
|
available in the VRPlayer mode.
|
|
|
|
See also: CKContext, VRCreateContext, VRCloseContext, VRGetContext.
|
|
*************************************************************************/
|
|
class VRContext
|
|
{
|
|
public :
|
|
/***************************************************************
|
|
Summary: Get the VRDisplayManager
|
|
Return Value:
|
|
+ A pointer to the VRDisplayManager
|
|
****************************************************************/
|
|
IVRDisplayManager* GetVRDisplayManager( void );
|
|
|
|
/***************************************************************
|
|
Summary: check the licenses
|
|
Return Value:
|
|
+ true: all licenses requested by the license configuration
|
|
are present
|
|
+ false: at least one license is missing
|
|
****************************************************************/
|
|
bool CheckLicenses( void );
|
|
|
|
/***************************************************************
|
|
Summary: Open the config file.
|
|
Return Value:
|
|
+ VR_OK: success
|
|
+ VRERR_INVALIDCFGFILE: couldn't open the file
|
|
****************************************************************/
|
|
VRERROR InitParse( void );
|
|
VRERROR InitParse( XString& fileName );
|
|
|
|
/***************************************************************
|
|
Summary: Close the config file.
|
|
****************************************************************/
|
|
void CloseParse();
|
|
|
|
/***************************************************************
|
|
Summary: Get the main configuration file name.
|
|
Return Value:
|
|
+ Absolute path to the VRPack.cfg configuration file of the
|
|
application or "" if not found.
|
|
|
|
See also: SetCfgFilename
|
|
****************************************************************/
|
|
XString& GetCfgFilename();
|
|
|
|
/***************************************************************
|
|
Summary: Set the main configuration file name.
|
|
Input Argument:
|
|
+ Absolute path to the VRPack.cfg configuration file of the
|
|
application
|
|
|
|
See also: GetCfgFilename
|
|
****************************************************************/
|
|
void SetCfgFilename( XString& );
|
|
|
|
/***************************************************************
|
|
Summary: Get a token value.
|
|
Input Arguments:
|
|
+ iToken: Token unique name
|
|
+ iDefault: Default value to return when the token was not found
|
|
Output Arguments:
|
|
+ oValue: Token's read value
|
|
Return Value:
|
|
+ VR_OK if successfully found
|
|
+ VRERR_INVALIDCFGFILE when the configuration file is invalid
|
|
+ VRERR_TOKENNOTFOUND when the token was not found
|
|
Remarks:
|
|
+ This method is case insensitive regarding the iToken value.
|
|
+ When an error occurs, the returned oValue is set to iDefault.
|
|
+ The token values is displayed on the output window (Event Log
|
|
or Console Window).
|
|
|
|
See also: GetHiddenToken
|
|
****************************************************************/
|
|
CKERROR GetToken(const XString& iToken, int *oValue, int iDefault=0);
|
|
|
|
CKERROR GetToken(const XString& iToken, float *oValue, float iDefault=0.0f);
|
|
|
|
CKERROR GetToken(const XString& iToken, XString *oValue, XString iDefault="-");
|
|
|
|
/***************************************************************
|
|
Summary: Get a token value without displaying it
|
|
Input Arguments:
|
|
+ iToken: Token unique name
|
|
+ iDefault: Default value to return when the token was not found.
|
|
Output Arguments:
|
|
+ oValue: Token's readed value
|
|
Return Value:
|
|
+ VR_OK if succesfully found
|
|
+ VRERR_INVALIDCFGFILE when the configuration file is invalid
|
|
+ VRERR_TOKENNOTFOUND when the token was not found
|
|
Remarks:
|
|
+ This method is case insensitive regarding the iToken value.
|
|
+ When an error occurs, the returned oValue is set to iDefault.
|
|
+ The token values is not displayed on the output window
|
|
(Event Log or Console Window).
|
|
|
|
See also: GetToken
|
|
****************************************************************/
|
|
CKERROR GetHiddenToken(const XString& iToken, int *oValue, int iDefault=0);
|
|
|
|
CKERROR GetHiddenToken(const XString& iToken, float *oValue, float iDefault=0.0f);
|
|
|
|
CKERROR GetHiddenToken(const XString& iToken, XString *oValue, XString iDefault="-");
|
|
|
|
/***************************************************************
|
|
Summary: Get a token value represented by an array of 3 ints
|
|
Input Arguments:
|
|
+ iToken: Token unique name
|
|
+ iDefault: Default value to return when the token was not found
|
|
Output Arguments:
|
|
+ oValue: Token's read value
|
|
Return Value:
|
|
+ VR_OK if successfully found
|
|
+ VRERR_INVALIDCFGFILE when the configuration file is invalid
|
|
+ VRERR_TOKENNOTFOUND when the token was not found
|
|
Remarks:
|
|
+ This method is case insensitive regarding the iToken value.
|
|
+ When an error occurs, the returned oValue is set to iDefault.
|
|
+ The token values is displayed on the output window (Event Log
|
|
or Console Window).
|
|
|
|
****************************************************************/
|
|
CKERROR GetInt3(const XString& iToken, int* oValue, const int* iDefault);
|
|
|
|
/***************************************************************
|
|
Summary: Get a token value represented by an array of 3 ints
|
|
Input Arguments:
|
|
+ iToken: Token unique name
|
|
Output Arguments:
|
|
+ oValue: Token's read value
|
|
Return Value:
|
|
+ VR_OK if successfully found
|
|
+ VRERR_INVALIDCFGFILE when the configuration file is invalid
|
|
+ VRERR_TOKENNOTFOUND when the token was not found
|
|
Remarks:
|
|
+ This method is case insensitive regarding the iToken value.
|
|
+ When an error occurs, the returned oValue is *not* modified.
|
|
+ The token values is displayed on the output window (Event Log
|
|
or Console Window).
|
|
|
|
****************************************************************/
|
|
CKERROR GetInt3(const XString& iToken, int* oValue);
|
|
|
|
|
|
/***************************************************************
|
|
Summary: Get a token value represented by an array of 3 floats
|
|
Input Arguments:
|
|
+ iToken: Token unique name
|
|
+ iDefault: Default value to return when the token was not found
|
|
Output Arguments:
|
|
+ oValue: Token's read value
|
|
Return Value:
|
|
+ VR_OK if successfully found
|
|
+ VRERR_INVALIDCFGFILE when the configuration file is invalid
|
|
+ VRERR_TOKENNOTFOUND when the token was not found
|
|
Remarks:
|
|
+ This method is case insensitive regarding the iToken value.
|
|
+ When an error occurs, the returned oValue is set to iDefault.
|
|
+ The token values is displayed on the output window (Event Log
|
|
or Console Window).
|
|
|
|
****************************************************************/
|
|
CKERROR GetFloat3(const XString& iToken, float* oValue, const float* iDefault);
|
|
|
|
/***************************************************************
|
|
Summary: Get a token value represented by an array of 3 floats
|
|
Input Arguments:
|
|
+ iToken: Token unique name
|
|
Output Arguments:
|
|
+ oValue: Token's read value
|
|
Return Value:
|
|
+ VR_OK if successfully found
|
|
+ VRERR_INVALIDCFGFILE when the configuration file is invalid
|
|
+ VRERR_TOKENNOTFOUND when the token was not found
|
|
Remarks:
|
|
+ This method is case insensitive regarding the iToken value.
|
|
+ When an error occurs, the returned oValue is *not* modified.
|
|
+ The token values is displayed on the output window (Event Log
|
|
or Console Window).
|
|
|
|
****************************************************************/
|
|
CKERROR GetFloat3(const XString& iToken, float* oValue);
|
|
|
|
|
|
/***************************************************************
|
|
Summary: Get a token value represented by an array of 4 floats
|
|
Input Arguments:
|
|
+ iToken: Token unique name
|
|
+ iDefault: Default value to return when the token was not found
|
|
Output Arguments:
|
|
+ oValue: Token's read value
|
|
Return Value:
|
|
+ VR_OK if successfully found
|
|
+ VRERR_INVALIDCFGFILE when the configuration file is invalid
|
|
+ VRERR_TOKENNOTFOUND when the token was not found
|
|
Remarks:
|
|
+ This method is case insensitive regarding the iToken value.
|
|
+ When an error occurs, the returned oValue is set to iDefault.
|
|
+ The token values is displayed on the output window (Event Log
|
|
or Console Window).
|
|
|
|
****************************************************************/
|
|
CKERROR GetFloat4(const XString& iToken, float* oValue, const float* iDefault);
|
|
|
|
/***************************************************************
|
|
Summary: Get a token value represented by an array of 4 floats
|
|
Input Arguments:
|
|
+ iToken: Token unique name
|
|
Output Arguments:
|
|
+ oValue: Token's read value
|
|
Return Value:
|
|
+ VR_OK if successfully found
|
|
+ VRERR_INVALIDCFGFILE when the configuration file is invalid
|
|
+ VRERR_TOKENNOTFOUND when the token was not found
|
|
Remarks:
|
|
+ This method is case insensitive regarding the iToken value.
|
|
+ When an error occurs, the returned oValue is *not* modified.
|
|
+ The token values is displayed on the output window (Event Log
|
|
or Console Window).
|
|
|
|
****************************************************************/
|
|
CKERROR GetFloat4(const XString& iToken, float* oValue);
|
|
|
|
|
|
/***************************************************************
|
|
Summary: Get a token value represented by XString
|
|
Input Arguments:
|
|
+ iToken: Token unique name
|
|
+ iDefault: Default value to return when the token was not found
|
|
Output Arguments:
|
|
+ oValue: Token's read value
|
|
Return Value:
|
|
+ VR_OK if successfully found
|
|
+ VRERR_INVALIDCFGFILE when the configuration file is invalid
|
|
+ VRERR_TOKENNOTFOUND when the token was not found
|
|
Remarks:
|
|
+ This method is case insensitive regarding the iToken value.
|
|
+ When an error occurs, the returned oValue is set to iDefault.
|
|
+ The token values is displayed on the output window (Event Log
|
|
or Console Window).
|
|
|
|
****************************************************************/
|
|
CKERROR GetString(const XString& iToken, char* oValue, const char* iDefault);
|
|
|
|
/***************************************************************
|
|
Summary: Get a token value represented by a XString
|
|
Input Arguments:
|
|
+ iToken: Token unique name
|
|
Output Arguments:
|
|
+ oValue: Token's read value
|
|
Return Value:
|
|
+ VR_OK if successfully found
|
|
+ VRERR_INVALIDCFGFILE when the configuration file is invalid
|
|
+ VRERR_TOKENNOTFOUND when the token was not found
|
|
Remarks:
|
|
+ This method is case insensitive regarding the iToken value.
|
|
+ When an error occurs, the returned oValue is *not* modified.
|
|
+ The token values is displayed on the output window (Event Log
|
|
or Console Window).
|
|
|
|
****************************************************************/
|
|
CKERROR GetString(const XString& iToken, char* oValue);
|
|
|
|
/***************************************************************
|
|
Summary: Get a subtoken value from the given string.
|
|
Input Arguments:
|
|
+ iInput: String to search
|
|
+ iToken: Subtoken unique name
|
|
+ iDefault: Subtoken's default value
|
|
Output Arguments:
|
|
+ oValue: Subtoken's readed value
|
|
Return Value:
|
|
+ VR_OK if succesfully found
|
|
+ VRERR_TOKENNOTFOUND when the token was not found
|
|
+ VRERR_TOKENFORMATERROR when the token is wrongly formatted
|
|
+ VRERR_TOKENWRONGTYPE when the token was found but is not of integer type
|
|
Remarks:
|
|
+ This method is case insensitive regarding the iToken value.
|
|
+ A subtoken must be formated as (SubTokenName=SubTokenValue) when the
|
|
value doesn't contain any space character or as (SubTokenName="SubToken Value")
|
|
when the value contains or not a space character.
|
|
+ You will usually use this method to parse the user token on the 'View'
|
|
definition given by VRView::UserTokens.
|
|
+ When an error occurs, the returned oValue is set to iDefault.
|
|
|
|
See also: VRView::UserTokens
|
|
****************************************************************/
|
|
CKERROR GetSubToken(const XString& iInput, const XString& iToken, int *oValue, int iDefault=0);
|
|
|
|
CKERROR GetSubToken(const XString& iInput, const XString& iToken, float *oValue, float iDefault=0.0f);
|
|
|
|
CKERROR GetSubToken(const XString& iInput, const XString& iToken, XString *oValue, XString iDefault="-");
|
|
|
|
/***************************************************************
|
|
Summary: Get the current LogLevel as it is define in the
|
|
application's configuration file (token 'LogLevel').
|
|
Return Value:
|
|
+ LogLevel value
|
|
|
|
****************************************************************/
|
|
int GetLogLevel() const;
|
|
|
|
/***************************************************************
|
|
Summary: Get the current BaseDirectory as it is defined in the
|
|
application's configuration files (token 'BaseDirectory').
|
|
Return Value:
|
|
+ BaseDirectory value
|
|
Remarks:
|
|
+ The BaseDirectory is always an absolute path
|
|
|
|
****************************************************************/
|
|
XString GetBaseDirectory();
|
|
|
|
/***************************************************************
|
|
Summary: Get the current BaseMediaDirectory as it is defined in the
|
|
application's configuration files (token 'BaseMediaDirectory').
|
|
Return Value:
|
|
+ BaseMediaDirectory value if it is set, BaseDirectory otherwise
|
|
Remarks:
|
|
+ The BaseMediaDirectory is always an absolute path
|
|
|
|
****************************************************************/
|
|
XString GetBaseMediaDirectory();
|
|
|
|
/***************************************************************
|
|
Summary: Get the current list of hosts as it is define in the
|
|
application's configuration file (token 'Hosts').
|
|
Return Value:
|
|
+ Hosts list
|
|
Remarks:
|
|
+ Hosts are separated by a space in the host list string.
|
|
|
|
****************************************************************/
|
|
XString GetHostList();
|
|
|
|
/***************************************************************
|
|
Summary: Get the ID of the current host (i.e. its index in the
|
|
host list) as it is define in the application's configuration file.
|
|
Return Value:
|
|
+ The ID of the current host.
|
|
Remarks:
|
|
+ When the current host appears 2 times in the host list,
|
|
its ID depends on the current PipeID value:
|
|
- If it is 0, the ID is the first appearance of the host in the list,
|
|
- If it is 1, the ID is the second appearance of the host in the list,
|
|
- ...
|
|
|
|
****************************************************************/
|
|
int GetHostID();
|
|
|
|
/***************************************************************
|
|
Summary: Get the number of hosts that appears in the host list
|
|
as it is define in the application's configuration file.
|
|
Return Value:
|
|
+ Number of host on the cluster
|
|
|
|
****************************************************************/
|
|
int GetHostCount();
|
|
|
|
/***************************************************************
|
|
Summary: Get the current VR execution mode (Virtools Dev, VRPlayer...)
|
|
Return Value:
|
|
+ Current execution mode
|
|
|
|
See also: SetExecutionMode
|
|
****************************************************************/
|
|
VR_EXECUTION_MODE GetExecutionMode();
|
|
|
|
/***************************************************************
|
|
Summary: Display a message on the output window (Event Log or Console Window)
|
|
Input Arguments:
|
|
+ iLevel: The message will be displayed only if iLevel is bigger than the
|
|
current LogLevel.
|
|
+ iFormat...: Same format as the printf function. Please review you C++ documentation
|
|
for more information.
|
|
|
|
See also: GetLogLevel
|
|
****************************************************************/
|
|
void OutputToLog(int iLevel, const char* iFormat,...) const;
|
|
|
|
/***************************************************************
|
|
Summary: Get the number of views on the current host
|
|
Return Value:
|
|
+ View count on the current host
|
|
Remarks:
|
|
+ The views are defined by the View_x_x tokens of the
|
|
configuration files.
|
|
+ The list order is given by the declaration order of the
|
|
configuration files.
|
|
|
|
See also: VRContext::GetView, VRContext::GetViewData
|
|
****************************************************************/
|
|
int GetViewCount();
|
|
|
|
/***************************************************************
|
|
Summary: Get a view of the current host
|
|
Input Arguments:
|
|
+ iIndex: Index of the view (View ID)
|
|
Return Value:
|
|
+ NULL if the view was not found, a pointer on the view
|
|
information otherwise.
|
|
Remarks:
|
|
+ The views are defined by the View_x_x tokens of the
|
|
configuration files.
|
|
+ The list order is given by the declaration order of the
|
|
configuration files.
|
|
|
|
See also: VRContext::GetViewCount
|
|
****************************************************************/
|
|
VRView* GetView(int iIndex);
|
|
|
|
/***************************************************************
|
|
Summary: Get the user data attached to a view
|
|
Input Arguments:
|
|
+ iView : View where to get the data from
|
|
Return Value:
|
|
+ The view data or NULL if none was set
|
|
|
|
See also: VRContext::GetViewCount, VRContext::GetView, VRContext::SetViewData
|
|
****************************************************************/
|
|
void* GetViewData(VRView* iView);
|
|
|
|
/***************************************************************
|
|
Summary: Attach a user data to a view
|
|
Input Arguments:
|
|
+ iView: View where to get the data from
|
|
+ iData: data to set
|
|
Return Value:
|
|
+ The previous data if one was set
|
|
|
|
See also: VRContext::GetViewCount, VRContext::GetView, VRContext::GetViewData
|
|
****************************************************************/
|
|
void* SetViewData(VRView* iView, void* data);
|
|
|
|
/***************************************************************
|
|
Summary: Activate the VRPlayer warping mode on the given view.
|
|
Input Arguments:
|
|
+ iView: View to warp
|
|
+ iInfo: Warping info
|
|
Return Value:
|
|
+ VR_OK if successfully
|
|
+ VRERR_WARPTOOLARGE when the warping size is too large and a warping texture
|
|
could not be created for it.
|
|
Remarks:
|
|
+ When activating texture warping, this method create a new warping texture
|
|
and set it in iInfo::WarpTexture. This texture is created as a private and
|
|
not for deleted object. All the objects you create for your warping mechanism
|
|
should be created with these flags as well:
|
|
CKObject::ModifyObjectFlags(CK_OBJECT_NOTTOBEDELETED|CK_OBJECT_PRIVATE, 0);
|
|
+ The VRManager::OnViewWarp callback will be called for each warped view.
|
|
You should implement the final warped rendering in this callback.
|
|
+ You will usually call this method from VRBaseManager::OnViewCreate.
|
|
|
|
See also: VRContext::GetViewCount, VRContext::GetView,
|
|
VRContext::DeActivateWarp, VRContext::GetWarpTexture,
|
|
VRBaseManager::OnViewWarp, VRBaseManager::OnViewCreate
|
|
****************************************************************/
|
|
CKERROR ActivateWarp(VRView* iView, WarpInfo* iInfo);
|
|
|
|
/***************************************************************
|
|
Summary: Deactivate the VRPlayer warping mode on the given view.
|
|
Input Arguments:
|
|
+ iView: View to unwarp
|
|
Remarks:
|
|
+ If a warping texture was used, it is destroyed. So, make sure
|
|
to remove any reference to this texture when unwarping a view.
|
|
+ You will usually call this method from VRBaseManager::OnViewDelete.
|
|
|
|
See also: VRContext::GetViewCount, VRContext::GetView, VRContext::ActivateWarp,
|
|
VRContext::GetWarpTexture, VRBaseManager::OnViewDelete
|
|
****************************************************************/
|
|
void DeActivateWarp(VRView* iView);
|
|
|
|
/***************************************************************
|
|
Summary: Get the warping texture used for the given view.
|
|
Input Arguments:
|
|
+ iView: Warped view
|
|
Return Value:
|
|
+ NULL if the view is not warped or not using a warping texture,
|
|
the warping texture otherwise
|
|
|
|
See also: VRContext::GetViewCount, VRContext::GetView,
|
|
VRContext::ActivateWarp, VRView
|
|
****************************************************************/
|
|
CKTexture* GetWarpTexture(VRView* iView);
|
|
|
|
/***************************************************************
|
|
Summary: The VRPlayer will ask to do the render or not this frame (VRSDK purpose).
|
|
****************************************************************/
|
|
CKBOOL DoPrimaryRender()const;
|
|
|
|
/***************************************************************
|
|
Summary: Tells the VRPlayer to do the render or not this frame (VRSDK purpose).
|
|
****************************************************************/
|
|
void EnablePrimaryRender(CKBOOL enable);
|
|
|
|
/***************************************************************
|
|
Summary: Tells the VRPlayer to exit at the end of this frame.
|
|
****************************************************************/
|
|
void FlagExit();
|
|
|
|
/***************************************************************
|
|
Summary: Register a new VR Manager.
|
|
Input Argument:
|
|
+ iManager: the manager to register
|
|
Return Value:
|
|
+ CKERR_ALREADYPRESENT: if manager is already registered
|
|
+ VR_OK: if manager was successfully registered
|
|
****************************************************************/
|
|
CKERROR RegisterNewManager(VRBaseManager* iManager);
|
|
void _AddResourceToken(XString& iResources);
|
|
|
|
/* CK_PRIVATE_VERSION_VIRTOOLS */
|
|
};
|
|
|
|
#endif
|