|
|
|
@ -575,6 +575,89 @@ static std::string replaceApplicationDirToken(const std::string &dir)
|
|
|
|
|
return dir;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void listStereoDisplayDevices(std::vector<NL3D::CStereoDeviceInfo> &devices)
|
|
|
|
|
{
|
|
|
|
|
bool cache = VRDeviceCache.empty();
|
|
|
|
|
nldebug("VR [C]: List devices");
|
|
|
|
|
if (cache)
|
|
|
|
|
{
|
|
|
|
|
VRDeviceCache.push_back(std::pair<std::string, std::string>("Auto", "0"));
|
|
|
|
|
}
|
|
|
|
|
IStereoDisplay::listDevices(devices);
|
|
|
|
|
for (std::vector<NL3D::CStereoDeviceInfo>::iterator it(devices.begin()), end(devices.end()); it != end; ++it)
|
|
|
|
|
{
|
|
|
|
|
std::stringstream name;
|
|
|
|
|
name << IStereoDisplay::getLibraryName(it->Library) << " - " << it->Manufacturer << " - " << it->ProductName;
|
|
|
|
|
std::stringstream fullname;
|
|
|
|
|
fullname << std::string("[") << name << "] [" << it->Serial << "]";
|
|
|
|
|
nlinfo("VR [C]: Stereo Display: %s", name.str().c_str());
|
|
|
|
|
if (cache)
|
|
|
|
|
{
|
|
|
|
|
VRDeviceCache.push_back(std::pair<std::string, std::string>(name.str(), it->Serial)); // VR_CONFIG
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cacheStereoDisplayDevices() // VR_CONFIG
|
|
|
|
|
{
|
|
|
|
|
if (VRDeviceCache.empty())
|
|
|
|
|
{
|
|
|
|
|
std::vector<NL3D::CStereoDeviceInfo> devices;
|
|
|
|
|
listStereoDisplayDevices(devices);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void initStereoDisplayDevice()
|
|
|
|
|
{
|
|
|
|
|
if (ClientCfg.VREnable)
|
|
|
|
|
{
|
|
|
|
|
// VR_CONFIG
|
|
|
|
|
nldebug("VR [C]: Enabled");
|
|
|
|
|
std::vector<NL3D::CStereoDeviceInfo> devices;
|
|
|
|
|
listStereoDisplayDevices(devices);
|
|
|
|
|
CStereoDeviceInfo *deviceInfo = NULL;
|
|
|
|
|
if (ClientCfg.VRDisplayDevice == std::string("Auto")
|
|
|
|
|
&& devices.begin() != devices.end())
|
|
|
|
|
{
|
|
|
|
|
deviceInfo = &devices[0];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for (std::vector<NL3D::CStereoDeviceInfo>::iterator it(devices.begin()), end(devices.end()); it != end; ++it)
|
|
|
|
|
{
|
|
|
|
|
std::stringstream name;
|
|
|
|
|
name << IStereoDisplay::getLibraryName(it->Library) << " - " << it->Manufacturer << " - " << it->ProductName;
|
|
|
|
|
if (name.str() == ClientCfg.VRDisplayDevice)
|
|
|
|
|
deviceInfo = &(*it);
|
|
|
|
|
if (ClientCfg.VRDisplayDeviceId == it->Serial)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (deviceInfo)
|
|
|
|
|
{
|
|
|
|
|
nlinfo("VR [C]: Create VR stereo display device");
|
|
|
|
|
StereoDisplay = IStereoDisplay::createDevice(*deviceInfo);
|
|
|
|
|
if (StereoDisplay)
|
|
|
|
|
{
|
|
|
|
|
if (deviceInfo->Class == CStereoDeviceInfo::StereoHMD)
|
|
|
|
|
{
|
|
|
|
|
nlinfo("VR [C]: Stereo display device is a HMD");
|
|
|
|
|
StereoHMD = static_cast<IStereoHMD *>(StereoDisplay);
|
|
|
|
|
}
|
|
|
|
|
if (Driver) // VR_DRIVER
|
|
|
|
|
{
|
|
|
|
|
StereoDisplay->setDriver(Driver);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
nldebug("VR [C]: NOT Enabled");
|
|
|
|
|
}
|
|
|
|
|
IStereoDisplay::releaseUnusedLibraries();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void addSearchPaths(IProgressCallback &progress)
|
|
|
|
|
{
|
|
|
|
|
// Add search path of UI addon. Allow only a subset of files.
|
|
|
|
@ -797,55 +880,7 @@ void prelogInit()
|
|
|
|
|
// Initialize the VR devices (even more important than the most important part of the client)
|
|
|
|
|
nmsg = "Initializing VR devices...";
|
|
|
|
|
ProgressBar.newMessage ( ClientCfg.buildLoadingString(nmsg) );
|
|
|
|
|
if (ClientCfg.VREnable)
|
|
|
|
|
{
|
|
|
|
|
nldebug("VR [C]: Enabled");
|
|
|
|
|
std::vector<NL3D::CStereoDeviceInfo> devices;
|
|
|
|
|
IStereoDisplay::listDevices(devices);
|
|
|
|
|
for (std::vector<NL3D::CStereoDeviceInfo>::iterator it(devices.begin()), end(devices.end()); it != end; ++it)
|
|
|
|
|
{
|
|
|
|
|
std::stringstream name;
|
|
|
|
|
name << std::string("[") << it->Serial << "] [" << IStereoDisplay::getLibraryName(it->Library) << " - " << it->Manufacturer << " - " << it->ProductName << "]";
|
|
|
|
|
nlinfo("VR [C]: Stereo Display: %s", name.str().c_str());
|
|
|
|
|
}
|
|
|
|
|
CStereoDeviceInfo *deviceInfo = NULL;
|
|
|
|
|
if (ClientCfg.VRDisplayDevice == std::string("Auto")
|
|
|
|
|
&& devices.begin() != devices.end())
|
|
|
|
|
{
|
|
|
|
|
deviceInfo = &devices[0];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for (std::vector<NL3D::CStereoDeviceInfo>::iterator it(devices.begin()), end(devices.end()); it != end; ++it)
|
|
|
|
|
{
|
|
|
|
|
std::stringstream name;
|
|
|
|
|
name << IStereoDisplay::getLibraryName(it->Library) << " - " << it->Manufacturer << " - " << it->ProductName;
|
|
|
|
|
if (name.str() == ClientCfg.VRDisplayDevice)
|
|
|
|
|
deviceInfo = &(*it);
|
|
|
|
|
if (ClientCfg.VRDisplayDeviceId == it->Serial)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (deviceInfo)
|
|
|
|
|
{
|
|
|
|
|
nlinfo("VR [C]: Create VR stereo display device");
|
|
|
|
|
StereoDisplay = IStereoDisplay::createDevice(*deviceInfo);
|
|
|
|
|
if (StereoDisplay)
|
|
|
|
|
{
|
|
|
|
|
if (deviceInfo->Class == CStereoDeviceInfo::StereoHMD)
|
|
|
|
|
{
|
|
|
|
|
nlinfo("VR [C]: Stereo display device is a HMD");
|
|
|
|
|
StereoHMD = static_cast<IStereoHMD *>(StereoDisplay);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
nldebug("VR [C]: NOT Enabled");
|
|
|
|
|
}
|
|
|
|
|
IStereoDisplay::releaseUnusedLibraries();
|
|
|
|
|
|
|
|
|
|
initStereoDisplayDevice(); // VR_CONFIG
|
|
|
|
|
|
|
|
|
|
// Create the driver (most important part of the client).
|
|
|
|
|
nmsg = "Creating 3d driver...";
|
|
|
|
@ -916,7 +951,7 @@ void prelogInit()
|
|
|
|
|
else
|
|
|
|
|
Driver->setSwapVBLInterval(0);
|
|
|
|
|
|
|
|
|
|
if (StereoDisplay)
|
|
|
|
|
if (StereoDisplay) // VR_CONFIG // VR_DRIVER
|
|
|
|
|
{
|
|
|
|
|
// override mode TODO
|
|
|
|
|
}
|
|
|
|
@ -1163,10 +1198,10 @@ void prelogInit()
|
|
|
|
|
// init bloom effect
|
|
|
|
|
CBloomEffect::getInstance().init(driver != UDriver::Direct3d);
|
|
|
|
|
|
|
|
|
|
if (StereoDisplay)
|
|
|
|
|
if (StereoDisplay) // VR_CONFIG
|
|
|
|
|
{
|
|
|
|
|
// Init stereo display resources
|
|
|
|
|
StereoDisplay->setDriver(Driver);
|
|
|
|
|
StereoDisplay->setDriver(Driver); // VR_DRIVER
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
nlinfo ("PROFILE: %d seconds for prelogInit", (uint32)(ryzomGetLocalTime ()-initStart)/1000);
|
|
|
|
|