Skip to content

Commit

Permalink
Oculus Rift|Renderer: Separately configurable Oculus Rift multisampling
Browse files Browse the repository at this point in the history
Added “rend-vr-rift-samples” to control the number of samples used
for the unwarped Oculus Rift framebuffer. The default is 2.
  • Loading branch information
skyjake committed Jan 7, 2014
1 parent a336ba8 commit d856172
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 6 deletions.
2 changes: 2 additions & 0 deletions doomsday/client/include/render/vr.h
Expand Up @@ -100,6 +100,8 @@ extern float eyeShift;
extern float hudDistance; // Distance from player character to screen, in map units (not used in Rift mode, because it's used by frustum shift)
extern float weaponDistance; // (UNUSED) Distance from player character to weapon sprite, in map units

extern int riftFramebufferSamples; // Multisampling used in unwarped Rift framebuffer

/// @param eye: -1 means left eye, +1 means right eye
/// @return viewpoint eye shift in map units
float getEyeShift(float eye);
Expand Down
8 changes: 5 additions & 3 deletions doomsday/client/src/render/vr.cpp
Expand Up @@ -91,9 +91,10 @@ byte VR::swapEyes = 0;

// Global variables
bool VR::applyFrustumShift = true;
float VR::eyeShift = 0;
float VR::hudDistance = 20.0f;
float VR::weaponDistance = 10.0f;
float VR::eyeShift = 0;
float VR::hudDistance = 20.0f;
int VR::riftFramebufferSamples = 2;
float VR::weaponDistance = 10.0f;

/// @param eye: -1 means left eye, +1 means right eye
/// @return viewpoint eye shift in map units
Expand Down Expand Up @@ -174,6 +175,7 @@ void VR::consoleRegister()
C_VAR_FLOAT ("rend-vr-player-height", & VR::playerHeight, 0, 1.0f, 2.4f);
C_VAR_FLOAT2("rend-vr-rift-fovx", & vrRiftFovX, 0, 5.0f, 270.0f, vrRiftFovXChanged);
C_VAR_FLOAT2("rend-vr-rift-latency", & vrLatency, 0, 0.0f, 0.100f, vrLatencyChanged);
C_VAR_INT ("rend-vr-rift-samples", & VR::riftFramebufferSamples, 0, 1, 4);
C_VAR_BYTE ("rend-vr-swap-eyes", & VR::swapEyes, 0, 0, 1);

C_CMD("loadriftparams", NULL, LoadRiftParams);
Expand Down
8 changes: 7 additions & 1 deletion doomsday/client/src/ui/dialogs/vrsettingsdialog.cpp
Expand Up @@ -35,6 +35,7 @@ DENG_GUI_PIMPL(VRSettingsDialog)
CVarSliderWidget *dominantEye;
CVarSliderWidget *humanHeight;
CVarSliderWidget *ipd;
CVarSliderWidget *riftSamples;
CVarSliderWidget *riftPredictionLatency;
ButtonWidget *riftSetup;
ButtonWidget *desktopSetup;
Expand Down Expand Up @@ -63,6 +64,7 @@ DENG_GUI_PIMPL(VRSettingsDialog)
area.add(swapEyes = new CVarToggleWidget("rend-vr-swap-eyes", tr("Swap Eyes")));
area.add(dominantEye = new CVarSliderWidget("rend-vr-dominant-eye"));
area.add(humanHeight = new CVarSliderWidget("rend-vr-player-height"));
area.add(riftSamples = new CVarSliderWidget("rend-vr-rift-samples"));

area.add(ipd = new CVarSliderWidget("rend-vr-ipd"));
ipd->setDisplayFactor(1000);
Expand Down Expand Up @@ -103,6 +105,8 @@ VRSettingsDialog::VRSettingsDialog(String const &name)
LabelWidget *heightLabel = LabelWidget::newWithText(tr("Height (m):"), &area());
LabelWidget *ipdLabel = LabelWidget::newWithText(tr("IPD (mm):"), &area());
LabelWidget *dominantLabel = LabelWidget::newWithText(tr("Dominant Eye:"), &area());
LabelWidget *sampleLabel = LabelWidget::newWithText(tr("Oculus Rift\nMultisampling:"), &area());
sampleLabel->setTextLineAlignment(ui::AlignRight);

// Layout.
GridLayout layout(area().contentRule().left(), area().contentRule().top());
Expand All @@ -113,7 +117,8 @@ VRSettingsDialog::VRSettingsDialog(String const &name)
<< *heightLabel << *d->humanHeight
<< *ipdLabel << *d->ipd
<< *dominantLabel << *d->dominantEye
<< Const(0) << *d->swapEyes;
<< Const(0) << *d->swapEyes
<< *sampleLabel << *d->riftSamples;

if(VR::hasHeadOrientation())
{
Expand Down Expand Up @@ -149,6 +154,7 @@ void VRSettingsDialog::resetToDefaults()
Con_SetFloat ("rend-vr-player-height", 1.75f);
Con_SetFloat ("rend-vr-ipd", 0.064f);
Con_SetFloat ("rend-vr-rift-latency", 0.030f);
Con_SetInteger("rend-vr-rift-samples", 2);

d->fetch();
}
Expand Down
4 changes: 2 additions & 2 deletions doomsday/client/src/ui/vrwindowtransform.cpp
Expand Up @@ -133,9 +133,9 @@ DENG2_PIMPL(VRWindowTransform)
unwarpedFB.resize(textureSize);

// Use a little bit of multisampling to smooth out the magnified jagged edges.
// Note: Independent of the vid-fsaa setting because this is necessary even when
// Note: Independent of the vid-fsaa setting because this is beneficial even when
// vid-fsaa is disabled.
unwarpedFB.setSampleCount(2);
unwarpedFB.setSampleCount(VR::riftFramebufferSamples);
unwarpedFB.colorTexture().setFilter(gl::Linear, gl::Linear, gl::MipNone);

// Set render target to offscreen temporarily.
Expand Down

0 comments on commit d856172

Please sign in to comment.