mirror of
https://github.com/overte-org/overte.git
synced 2025-07-10 21:38:40 +02:00
Merge pull request #2888 from Barnold1953/master
Windows audio and mesh crash
This commit is contained in:
commit
b4759e02f4
6 changed files with 134 additions and 28 deletions
|
@ -560,10 +560,9 @@ void Application::paintGL() {
|
||||||
_myCamera.setUpShift(0.0f);
|
_myCamera.setUpShift(0.0f);
|
||||||
_myCamera.setDistance(0.0f);
|
_myCamera.setDistance(0.0f);
|
||||||
_myCamera.setTightness(0.0f); // Camera is directly connected to head without smoothing
|
_myCamera.setTightness(0.0f); // Camera is directly connected to head without smoothing
|
||||||
_myCamera.setTargetPosition(_myAvatar->getHead()->calculateAverageEyePosition());
|
}
|
||||||
_myCamera.setTargetRotation(_myAvatar->getHead()->getCameraOrientation());
|
|
||||||
|
if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) {
|
||||||
} else if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) {
|
|
||||||
_myCamera.setTightness(0.0f); // In first person, camera follows (untweaked) head exactly without delay
|
_myCamera.setTightness(0.0f); // In first person, camera follows (untweaked) head exactly without delay
|
||||||
_myCamera.setTargetPosition(_myAvatar->getHead()->calculateAverageEyePosition());
|
_myCamera.setTargetPosition(_myAvatar->getHead()->calculateAverageEyePosition());
|
||||||
_myCamera.setTargetRotation(_myAvatar->getHead()->getCameraOrientation());
|
_myCamera.setTargetRotation(_myAvatar->getHead()->getCameraOrientation());
|
||||||
|
|
|
@ -201,21 +201,26 @@ QAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) {
|
||||||
IMMDeviceEnumerator* pMMDeviceEnumerator = NULL;
|
IMMDeviceEnumerator* pMMDeviceEnumerator = NULL;
|
||||||
CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pMMDeviceEnumerator);
|
CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pMMDeviceEnumerator);
|
||||||
IMMDevice* pEndpoint;
|
IMMDevice* pEndpoint;
|
||||||
pMMDeviceEnumerator->GetDefaultAudioEndpoint(mode == QAudio::AudioOutput ? eRender : eCapture, eMultimedia, &pEndpoint);
|
hr = pMMDeviceEnumerator->GetDefaultAudioEndpoint(mode == QAudio::AudioOutput ? eRender : eCapture, eMultimedia, &pEndpoint);
|
||||||
IPropertyStore* pPropertyStore;
|
if (hr == E_NOTFOUND){
|
||||||
pEndpoint->OpenPropertyStore(STGM_READ, &pPropertyStore);
|
printf("Audio Error: device not found\n");
|
||||||
pEndpoint->Release();
|
deviceName = QString("NONE");
|
||||||
pEndpoint = NULL;
|
} else {
|
||||||
PROPVARIANT pv;
|
IPropertyStore* pPropertyStore;
|
||||||
PropVariantInit(&pv);
|
pEndpoint->OpenPropertyStore(STGM_READ, &pPropertyStore);
|
||||||
hr = pPropertyStore->GetValue(PKEY_Device_FriendlyName, &pv);
|
pEndpoint->Release();
|
||||||
pPropertyStore->Release();
|
pEndpoint = NULL;
|
||||||
pPropertyStore = NULL;
|
PROPVARIANT pv;
|
||||||
//QAudio devices seems to only take the 31 first characters of the Friendly Device Name.
|
PropVariantInit(&pv);
|
||||||
const DWORD QT_WIN_MAX_AUDIO_DEVICENAME_LEN = 31;
|
hr = pPropertyStore->GetValue(PKEY_Device_FriendlyName, &pv);
|
||||||
deviceName = QString::fromWCharArray((wchar_t*)pv.pwszVal).left(QT_WIN_MAX_AUDIO_DEVICENAME_LEN);
|
pPropertyStore->Release();
|
||||||
qDebug() << (mode == QAudio::AudioOutput ? "output" : "input") << " device:" << deviceName;
|
pPropertyStore = NULL;
|
||||||
PropVariantClear(&pv);
|
//QAudio devices seems to only take the 31 first characters of the Friendly Device Name.
|
||||||
|
const DWORD QT_WIN_MAX_AUDIO_DEVICENAME_LEN = 31;
|
||||||
|
deviceName = QString::fromWCharArray((wchar_t*)pv.pwszVal).left(QT_WIN_MAX_AUDIO_DEVICENAME_LEN);
|
||||||
|
qDebug() << (mode == QAudio::AudioOutput ? "output" : "input") << " device:" << deviceName;
|
||||||
|
PropVariantClear(&pv);
|
||||||
|
}
|
||||||
pMMDeviceEnumerator->Release();
|
pMMDeviceEnumerator->Release();
|
||||||
pMMDeviceEnumerator = NULL;
|
pMMDeviceEnumerator = NULL;
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
|
|
|
@ -264,11 +264,16 @@ void MyAvatar::updateFromTrackers(float deltaTime) {
|
||||||
// their head only 30 degrees or so, this may correspond to a 90 degree field of view.
|
// their head only 30 degrees or so, this may correspond to a 90 degree field of view.
|
||||||
// Note that roll is magnified by a constant because it is not related to field of view.
|
// Note that roll is magnified by a constant because it is not related to field of view.
|
||||||
|
|
||||||
float magnifyFieldOfView = Menu::getInstance()->getFieldOfView() / Menu::getInstance()->getRealWorldFieldOfView();
|
|
||||||
|
|
||||||
Head* head = getHead();
|
Head* head = getHead();
|
||||||
head->setDeltaPitch(estimatedRotation.x * magnifyFieldOfView);
|
if (OculusManager::isConnected()){
|
||||||
head->setDeltaYaw(estimatedRotation.y * magnifyFieldOfView);
|
head->setDeltaPitch(estimatedRotation.x);
|
||||||
|
head->setDeltaYaw(estimatedRotation.y);
|
||||||
|
} else {
|
||||||
|
float magnifyFieldOfView = Menu::getInstance()->getFieldOfView() / Menu::getInstance()->getRealWorldFieldOfView();
|
||||||
|
head->setDeltaPitch(estimatedRotation.x * magnifyFieldOfView);
|
||||||
|
head->setDeltaYaw(estimatedRotation.y * magnifyFieldOfView);
|
||||||
|
}
|
||||||
head->setDeltaRoll(estimatedRotation.z);
|
head->setDeltaRoll(estimatedRotation.z);
|
||||||
|
|
||||||
// the priovr can give us exact lean
|
// the priovr can give us exact lean
|
||||||
|
|
|
@ -123,7 +123,9 @@ void PreferencesDialog::loadPreferences() {
|
||||||
ui.faceshiftEyeDeflectionSider->maximum());
|
ui.faceshiftEyeDeflectionSider->maximum());
|
||||||
|
|
||||||
ui.audioJitterSpin->setValue(menuInstance->getAudioJitterBufferSamples());
|
ui.audioJitterSpin->setValue(menuInstance->getAudioJitterBufferSamples());
|
||||||
|
|
||||||
|
ui.realWorldFieldOfViewSpin->setValue(menuInstance->getRealWorldFieldOfView());
|
||||||
|
|
||||||
ui.fieldOfViewSpin->setValue(menuInstance->getFieldOfView());
|
ui.fieldOfViewSpin->setValue(menuInstance->getFieldOfView());
|
||||||
|
|
||||||
ui.leanScaleSpin->setValue(myAvatar->getLeanScale());
|
ui.leanScaleSpin->setValue(myAvatar->getLeanScale());
|
||||||
|
@ -177,6 +179,8 @@ void PreferencesDialog::savePreferences() {
|
||||||
Application::getInstance()->resizeGL(Application::getInstance()->getGLWidget()->width(),
|
Application::getInstance()->resizeGL(Application::getInstance()->getGLWidget()->width(),
|
||||||
Application::getInstance()->getGLWidget()->height());
|
Application::getInstance()->getGLWidget()->height());
|
||||||
|
|
||||||
|
Menu::getInstance()->setRealWorldFieldOfView(ui.realWorldFieldOfViewSpin->value());
|
||||||
|
|
||||||
Menu::getInstance()->setFieldOfView(ui.fieldOfViewSpin->value());
|
Menu::getInstance()->setFieldOfView(ui.fieldOfViewSpin->value());
|
||||||
|
|
||||||
Menu::getInstance()->setFaceshiftEyeDeflection(ui.faceshiftEyeDeflectionSider->value() /
|
Menu::getInstance()->setFaceshiftEyeDeflection(ui.faceshiftEyeDeflectionSider->value() /
|
||||||
|
|
|
@ -154,9 +154,9 @@ color: #0e7077</string>
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>-271</y>
|
||||||
<width>615</width>
|
<width>598</width>
|
||||||
<height>936</height>
|
<height>1018</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
@ -723,6 +723,94 @@ color: #0e7077</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_11">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_9">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Arial</family>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Real world vertical field of view (angular size of monitor)</string>
|
||||||
|
</property>
|
||||||
|
<property name="indent">
|
||||||
|
<number>15</number>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>fieldOfViewSpin</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_11">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Arial</family>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="realWorldFieldOfViewSpin">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>95</width>
|
||||||
|
<height>36</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>95</width>
|
||||||
|
<height>36</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Arial</family>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>180</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
|
|
|
@ -1635,11 +1635,16 @@ FBXGeometry extractFBXGeometry(const FBXNode& node, const QVariantHash& mapping)
|
||||||
setTangents(extracted.mesh, part.quadIndices.at(i + 2), part.quadIndices.at(i + 3));
|
setTangents(extracted.mesh, part.quadIndices.at(i + 2), part.quadIndices.at(i + 3));
|
||||||
setTangents(extracted.mesh, part.quadIndices.at(i + 3), part.quadIndices.at(i));
|
setTangents(extracted.mesh, part.quadIndices.at(i + 3), part.quadIndices.at(i));
|
||||||
}
|
}
|
||||||
for (int i = 0; i < part.triangleIndices.size(); i += 3) {
|
// <= size - 3 in order to prevent overflowing triangleIndices when (i % 3) != 0
|
||||||
|
// This is most likely evidence of a further problem in extractMesh()
|
||||||
|
for (int i = 0; i <= part.triangleIndices.size() - 3; i += 3) {
|
||||||
setTangents(extracted.mesh, part.triangleIndices.at(i), part.triangleIndices.at(i + 1));
|
setTangents(extracted.mesh, part.triangleIndices.at(i), part.triangleIndices.at(i + 1));
|
||||||
setTangents(extracted.mesh, part.triangleIndices.at(i + 1), part.triangleIndices.at(i + 2));
|
setTangents(extracted.mesh, part.triangleIndices.at(i + 1), part.triangleIndices.at(i + 2));
|
||||||
setTangents(extracted.mesh, part.triangleIndices.at(i + 2), part.triangleIndices.at(i));
|
setTangents(extracted.mesh, part.triangleIndices.at(i + 2), part.triangleIndices.at(i));
|
||||||
}
|
}
|
||||||
|
if ((part.triangleIndices.size() % 3) != 0){
|
||||||
|
qDebug() << "Error in extractFBXGeometry part.triangleIndices.size() is not divisible by three ";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue