mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 21:51:36 +02:00
Merge branch 'plugins2' into plugins
Conflicts: interface/src/Application.cpp interface/src/plugins/Plugin.h interface/src/plugins/render/OculusBaseRenderPlugin.cpp interface/src/plugins/render/OculusBaseRenderPlugin.h interface/src/plugins/render/RenderPlugin.h interface/src/plugins/render/Tv3dRenderPlugin.cpp interface/src/plugins/render/Tv3dRenderPlugin.h interface/src/ui/ApplicationOverlay.cpp interface/src/ui/ApplicationOverlay.h
This commit is contained in:
commit
2fa92af4ab
9 changed files with 214 additions and 111 deletions
|
@ -795,19 +795,20 @@ void Application::paintGL() {
|
||||||
primaryFbo->release();
|
primaryFbo->release();
|
||||||
|
|
||||||
QOpenGLFramebufferObject * finalFbo = DependencyManager::get<GlowEffect>()->render();
|
QOpenGLFramebufferObject * finalFbo = DependencyManager::get<GlowEffect>()->render();
|
||||||
// This might not be needed *right now*. We want to ensure that the FBO rendering
|
|
||||||
// has completed before we start trying to read from it in another context. However
|
|
||||||
// once we have multi-threaded rendering, this will almost certainly be critical,
|
|
||||||
// but may be better handled with a fence object
|
|
||||||
glFinish();
|
|
||||||
|
|
||||||
#if 0
|
finalFbo->bind();
|
||||||
{
|
{
|
||||||
PerformanceTimer perfTimer("renderOverlay");
|
PerformanceTimer perfTimer("renderOverlay");
|
||||||
_applicationOverlay.renderOverlay();
|
_applicationOverlay.renderOverlay();
|
||||||
_applicationOverlay.displayOverlayTexture();
|
_applicationOverlay.displayOverlayTexture();
|
||||||
}
|
}
|
||||||
#endif
|
finalFbo->release();
|
||||||
|
|
||||||
|
// This might not be needed *right now*. We want to ensure that the FBO rendering
|
||||||
|
// has completed before we start trying to read from it in another context. However
|
||||||
|
// once we have multi-threaded rendering, this will almost certainly be critical,
|
||||||
|
// but may be better handled with a fence object
|
||||||
|
glFinish();
|
||||||
|
|
||||||
_offscreenContext->doneCurrent();
|
_offscreenContext->doneCurrent();
|
||||||
Q_ASSERT(!QOpenGLContext::currentContext());
|
Q_ASSERT(!QOpenGLContext::currentContext());
|
||||||
|
@ -3161,16 +3162,9 @@ void Application::getProjectionMatrix(glm::dmat4* projectionMatrix) {
|
||||||
|
|
||||||
void Application::computeOffAxisFrustum(float& left, float& right, float& bottom, float& top, float& nearVal,
|
void Application::computeOffAxisFrustum(float& left, float& right, float& bottom, float& top, float& nearVal,
|
||||||
float& farVal, glm::vec4& nearClipPlane, glm::vec4& farClipPlane) const {
|
float& farVal, glm::vec4& nearClipPlane, glm::vec4& farClipPlane) const {
|
||||||
|
|
||||||
// allow 3DTV/Oculus to override parameters from camera
|
|
||||||
_displayViewFrustum.computeOffAxisFrustum(left, right, bottom, top, nearVal, farVal, nearClipPlane, farClipPlane);
|
_displayViewFrustum.computeOffAxisFrustum(left, right, bottom, top, nearVal, farVal, nearClipPlane, farClipPlane);
|
||||||
#if 0
|
// allow 3DTV/Oculus to override parameters from camera
|
||||||
if (OculusManager::isConnected()) {
|
getActiveRenderPlugin()->overrideOffAxisFrustum(left, right, bottom, top, nearVal, farVal, nearClipPlane, farClipPlane);
|
||||||
OculusManager::overrideOffAxisFrustum(left, right, bottom, top, nearVal, farVal, nearClipPlane, farClipPlane);
|
|
||||||
} else if (TV3DManager::isConnected()) {
|
|
||||||
TV3DManager::overrideOffAxisFrustum(left, right, bottom, top, nearVal, farVal, nearClipPlane, farClipPlane);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Application::getShadowsEnabled() {
|
bool Application::getShadowsEnabled() {
|
||||||
|
@ -3263,10 +3257,6 @@ void Application::resetSensors() {
|
||||||
DependencyManager::get<DdeFaceTracker>()->reset();
|
DependencyManager::get<DdeFaceTracker>()->reset();
|
||||||
|
|
||||||
getActiveRenderPlugin()->resetSensors();
|
getActiveRenderPlugin()->resetSensors();
|
||||||
#if 0
|
|
||||||
OculusManager::reset();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//_leapmotion.reset();
|
//_leapmotion.reset();
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
class Plugin : public QObject {
|
class Plugin : public QObject {
|
||||||
private:
|
|
||||||
bool _active{ false };
|
|
||||||
public:
|
public:
|
||||||
virtual const QString & getName() = 0;
|
virtual const QString & getName() = 0;
|
||||||
virtual bool isSupported() { return true; }
|
virtual bool isSupported() { return true; }
|
||||||
|
|
|
@ -8,3 +8,97 @@
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//
|
||||||
#include "OculusBaseRenderPlugin.h"
|
#include "OculusBaseRenderPlugin.h"
|
||||||
|
|
||||||
|
#include <OVR_CAPI.h>
|
||||||
|
|
||||||
|
bool OculusBaseRenderPlugin::sdkInitialized = false;
|
||||||
|
|
||||||
|
bool OculusBaseRenderPlugin::enableSdk() {
|
||||||
|
sdkInitialized = ovr_Initialize();
|
||||||
|
return sdkInitialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OculusBaseRenderPlugin::disableSdk() {
|
||||||
|
ovr_Shutdown();
|
||||||
|
sdkInitialized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OculusBaseRenderPlugin::withSdkActive(std::function<void()> f) {
|
||||||
|
bool activateSdk = !sdkInitialized;
|
||||||
|
if (activateSdk && !enableSdk()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
f();
|
||||||
|
if (activateSdk) {
|
||||||
|
disableSdk();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OculusBaseRenderPlugin::isSupported() {
|
||||||
|
bool attached = false;
|
||||||
|
withSdkActive([&] {
|
||||||
|
attached = ovrHmd_Detect();
|
||||||
|
});
|
||||||
|
return attached;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OculusBaseRenderPlugin::activate() {
|
||||||
|
enableSdk();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OculusBaseRenderPlugin::deactivate() {
|
||||||
|
disableSdk();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// Set the desired FBO texture size. If it hasn't changed, this does nothing.
|
||||||
|
// Otherwise, it must rebuild the FBOs
|
||||||
|
if (OculusManager::isConnected()) {
|
||||||
|
DependencyManager::get<TextureCache>()->setFrameBufferSize(OculusManager::getRenderTargetSize());
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// Update camera position
|
||||||
|
if (!OculusManager::isConnected()) {
|
||||||
|
_myCamera.update(1.0f / _fps);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (OculusManager::isConnected()) {
|
||||||
|
//When in mirror mode, use camera rotation. Otherwise, use body rotation
|
||||||
|
if (_myCamera.getMode() == CAMERA_MODE_MIRROR) {
|
||||||
|
OculusManager::display(_myCamera.getRotation(), _myCamera.getPosition(), _myCamera);
|
||||||
|
} else {
|
||||||
|
OculusManager::display(_myAvatar->getWorldAlignedOrientation(), _myAvatar->getDefaultEyePosition(), _myCamera);
|
||||||
|
}
|
||||||
|
_myCamera.update(1.0f / _fps);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
OculusManager::abandonCalibration();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (OculusManager::isConnected()) {
|
||||||
|
return getMouseX() >= 0 && getMouseX() <= _glWidget->getDeviceWidth() &&
|
||||||
|
getMouseY() >= 0 && getMouseY() <= _glWidget->getDeviceHeight();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (OculusManager::isConnected()) {
|
||||||
|
glm::vec2 pos = _applicationOverlay.screenToOverlay(glm::vec2(getTrueMouseX(), getTrueMouseY()));
|
||||||
|
return pos.x;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
if (OculusManager::isConnected()) {
|
||||||
|
glm::vec2 pos = _applicationOverlay.screenToOverlay(glm::vec2(getTrueMouseX(), getTrueMouseY()));
|
||||||
|
return pos.y;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -10,68 +10,31 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "HmdRenderPlugin.h"
|
#include "HmdRenderPlugin.h"
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
class OculusRenderPluginBase : public HmdRenderPlugin {
|
class OculusBaseRenderPlugin : public HmdRenderPlugin {
|
||||||
|
public:
|
||||||
|
virtual bool isSupported();
|
||||||
|
|
||||||
|
virtual void init();
|
||||||
|
virtual void deinit();
|
||||||
|
|
||||||
|
virtual void activate();
|
||||||
|
virtual void deactivate();
|
||||||
|
|
||||||
|
virtual void overrideOffAxisFrustum(
|
||||||
|
float& left, float& right, float& bottom, float& top,
|
||||||
|
float& nearVal, float& farVal,
|
||||||
|
glm::vec4& nearClipPlane, glm::vec4& farClipPlane) const;
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool isRiftPresent();
|
||||||
|
virtual bool isDirectMode();
|
||||||
|
|
||||||
|
static bool sdkInitialized;
|
||||||
|
|
||||||
|
static void withSdkActive(std::function<void()> f);
|
||||||
|
static bool enableSdk();
|
||||||
|
static void disableSdk();
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
|
||||||
// Set the desired FBO texture size. If it hasn't changed, this does nothing.
|
|
||||||
// Otherwise, it must rebuild the FBOs
|
|
||||||
if (OculusManager::isConnected()) {
|
|
||||||
DependencyManager::get<TextureCache>()->setFrameBufferSize(OculusManager::getRenderTargetSize());
|
|
||||||
} else {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
// Update camera position
|
|
||||||
if (!OculusManager::isConnected()) {
|
|
||||||
_myCamera.update(1.0f / _fps);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (OculusManager::isConnected()) {
|
|
||||||
//When in mirror mode, use camera rotation. Otherwise, use body rotation
|
|
||||||
if (_myCamera.getMode() == CAMERA_MODE_MIRROR) {
|
|
||||||
OculusManager::display(_myCamera.getRotation(), _myCamera.getPosition(), _myCamera);
|
|
||||||
} else {
|
|
||||||
OculusManager::display(_myAvatar->getWorldAlignedOrientation(), _myAvatar->getDefaultEyePosition(), _myCamera);
|
|
||||||
}
|
|
||||||
_myCamera.update(1.0f / _fps);
|
|
||||||
|
|
||||||
} else if (TV3DManager::isConnected()) {
|
|
||||||
|
|
||||||
TV3DManager::display(_myCamera);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
OculusManager::abandonCalibration();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (OculusManager::isConnected()) {
|
|
||||||
return getMouseX() >= 0 && getMouseX() <= _glWidget->getDeviceWidth() &&
|
|
||||||
getMouseY() >= 0 && getMouseY() <= _glWidget->getDeviceHeight();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (OculusManager::isConnected()) {
|
|
||||||
glm::vec2 pos = _applicationOverlay.screenToOverlay(glm::vec2(getTrueMouseX(), getTrueMouseY()));
|
|
||||||
return pos.x;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if 0
|
|
||||||
if (OculusManager::isConnected()) {
|
|
||||||
glm::vec2 pos = _applicationOverlay.screenToOverlay(glm::vec2(getTrueMouseX(), getTrueMouseY()));
|
|
||||||
return pos.y;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -30,13 +30,31 @@ public:
|
||||||
virtual void postRender() {};
|
virtual void postRender() {};
|
||||||
|
|
||||||
// Pointer support
|
// Pointer support
|
||||||
|
|
||||||
|
// Does the rendering surface have current focus?
|
||||||
virtual bool hasFocus() const = 0;
|
virtual bool hasFocus() const = 0;
|
||||||
|
// The size of the rendering surface
|
||||||
virtual QSize getRecommendedFramebufferSize() const = 0;
|
virtual QSize getRecommendedFramebufferSize() const = 0;
|
||||||
|
// The size of the window (differs from the framebuffers size in instances like Retina macs)
|
||||||
virtual glm::ivec2 getCanvasSize() const = 0;
|
virtual glm::ivec2 getCanvasSize() const = 0;
|
||||||
virtual glm::ivec2 getUiMousePosition() const = 0;
|
|
||||||
|
// The mouse position relative to the window (or proxy window) surface
|
||||||
virtual glm::ivec2 getTrueMousePosition() const = 0;
|
virtual glm::ivec2 getTrueMousePosition() const = 0;
|
||||||
|
|
||||||
|
// The mouse position relative to the UI elements
|
||||||
|
virtual glm::ivec2 getUiMousePosition() const {
|
||||||
|
return trueMouseToUiMouse(getTrueMousePosition());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert from screen mouse coordinates to UI mouse coordinates
|
||||||
|
virtual glm::ivec2 trueMouseToUiMouse(const glm::ivec2 & position) const { return position; };
|
||||||
|
|
||||||
virtual PickRay computePickRay(const glm::vec2 & pos) const = 0;
|
virtual PickRay computePickRay(const glm::vec2 & pos) const = 0;
|
||||||
virtual bool isMouseOnScreen() const;
|
virtual bool isMouseOnScreen() const;
|
||||||
|
virtual void overrideOffAxisFrustum(
|
||||||
|
float& left, float& right, float& bottom, float& top,
|
||||||
|
float& nearVal, float& farVal,
|
||||||
|
glm::vec4& nearClipPlane, glm::vec4& farClipPlane) const { }
|
||||||
|
|
||||||
// HMD specific methods
|
// HMD specific methods
|
||||||
// TODO move these into another class
|
// TODO move these into another class
|
||||||
|
|
|
@ -9,3 +9,35 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "Tv3dRenderPlugin.h"
|
#include "Tv3dRenderPlugin.h"
|
||||||
|
|
||||||
|
const QString Tv3dRenderPlugin::NAME("Tv3dRenderPlugin");
|
||||||
|
|
||||||
|
const QString & Tv3dRenderPlugin::getName() {
|
||||||
|
return NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Tv3dRenderPlugin::overrideOffAxisFrustum(
|
||||||
|
float& left, float& right, float& bottom, float& top,
|
||||||
|
float& nearVal, float& farVal,
|
||||||
|
glm::vec4& nearClipPlane, glm::vec4& farClipPlane) const {
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (_activeEye) {
|
||||||
|
left = _activeEye->left;
|
||||||
|
right = _activeEye->right;
|
||||||
|
bottom = _activeEye->bottom;
|
||||||
|
top = _activeEye->top;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
} else if (TV3DManager::isConnected()) {
|
||||||
|
|
||||||
|
TV3DManager::display(_myCamera);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
|
|
@ -11,3 +11,16 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "StereoRenderPlugin.h"
|
#include "StereoRenderPlugin.h"
|
||||||
|
|
||||||
|
class Tv3dRenderPlugin : public StereoRenderPlugin {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
static const QString NAME;
|
||||||
|
virtual const QString & getName();
|
||||||
|
|
||||||
|
virtual void overrideOffAxisFrustum(
|
||||||
|
float& left, float& right, float& bottom, float& top,
|
||||||
|
float& nearVal, float& farVal,
|
||||||
|
glm::vec4& nearClipPlane, glm::vec4& farClipPlane) const;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
|
@ -133,7 +133,7 @@ void ApplicationOverlay::renderReticle(glm::quat orientation, float alpha) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplicationOverlay::ApplicationOverlay() :
|
ApplicationOverlay::ApplicationOverlay() :
|
||||||
_textureFov(glm::radians(DEFAULT_OCULUS_UI_ANGULAR_SIZE)),
|
_textureFov(glm::radians(DEFAULT_HMD_UI_ANGULAR_SIZE)),
|
||||||
_textureAspectRatio(1.0f),
|
_textureAspectRatio(1.0f),
|
||||||
_lastMouseMove(0),
|
_lastMouseMove(0),
|
||||||
_magnifier(true),
|
_magnifier(true),
|
||||||
|
@ -172,7 +172,7 @@ void ApplicationOverlay::renderOverlay() {
|
||||||
PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), "ApplicationOverlay::displayOverlay()");
|
PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), "ApplicationOverlay::displayOverlay()");
|
||||||
Overlays& overlays = qApp->getOverlays();
|
Overlays& overlays = qApp->getOverlays();
|
||||||
|
|
||||||
_textureFov = glm::radians(_oculusUIAngularSize);
|
_textureFov = glm::radians(_hmdUIAngularSize);
|
||||||
glm::vec2 canvasSize = Application::getInstance()->getCanvasSize();
|
glm::vec2 canvasSize = Application::getInstance()->getCanvasSize();
|
||||||
_textureAspectRatio = canvasSize.x / canvasSize.y;;
|
_textureAspectRatio = canvasSize.x / canvasSize.y;;
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ void ApplicationOverlay::renderOverlay() {
|
||||||
_overlays.buildFramebufferObject();
|
_overlays.buildFramebufferObject();
|
||||||
_overlays.bind();
|
_overlays.bind();
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
glPushMatrix(); {
|
glPushMatrix(); {
|
||||||
const float NEAR_CLIP = -10000;
|
const float NEAR_CLIP = -10000;
|
||||||
const float FAR_CLIP = 10000;
|
const float FAR_CLIP = 10000;
|
||||||
|
@ -450,9 +450,7 @@ QPoint ApplicationOverlay::getPalmClickLocation(const PalmData *palm) const {
|
||||||
glm::vec3 tipPos = invOrientation * (tip - eyePos);
|
glm::vec3 tipPos = invOrientation * (tip - eyePos);
|
||||||
|
|
||||||
QPoint rv;
|
QPoint rv;
|
||||||
#if 0
|
if (qApp->getActiveRenderPlugin()->isHmd()) {
|
||||||
if (OculusManager::isConnected()) {
|
|
||||||
auto glCanvas = Application::getInstance()->getGLWidget();
|
|
||||||
float t;
|
float t;
|
||||||
|
|
||||||
//We back the ray up by dir to ensure that it will not start inside the UI.
|
//We back the ray up by dir to ensure that it will not start inside the UI.
|
||||||
|
@ -470,9 +468,10 @@ QPoint ApplicationOverlay::getPalmClickLocation(const PalmData *palm) const {
|
||||||
|
|
||||||
float u = asin(collisionPos.x) / (_textureFov)+0.5f;
|
float u = asin(collisionPos.x) / (_textureFov)+0.5f;
|
||||||
float v = 1.0 - (asin(collisionPos.y) / (_textureFov)+0.5f);
|
float v = 1.0 - (asin(collisionPos.y) / (_textureFov)+0.5f);
|
||||||
|
auto size = qApp->getActiveRenderPlugin()->getCanvasSize();
|
||||||
|
|
||||||
rv.setX(u * glCanvas->width());
|
rv.setX(u * size.x);
|
||||||
rv.setY(v * glCanvas->height());
|
rv.setY(v * size.y);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//if they did not click on the overlay, just set the coords to INT_MAX
|
//if they did not click on the overlay, just set the coords to INT_MAX
|
||||||
|
@ -480,7 +479,6 @@ QPoint ApplicationOverlay::getPalmClickLocation(const PalmData *palm) const {
|
||||||
rv.setY(INT_MAX);
|
rv.setY(INT_MAX);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
#endif
|
|
||||||
glm::dmat4 projection;
|
glm::dmat4 projection;
|
||||||
qApp->getProjectionMatrix(&projection);
|
qApp->getProjectionMatrix(&projection);
|
||||||
|
|
||||||
|
@ -493,9 +491,7 @@ QPoint ApplicationOverlay::getPalmClickLocation(const PalmData *palm) const {
|
||||||
glm::ivec2 canvasSize = Application::getInstance()->getCanvasSize();
|
glm::ivec2 canvasSize = Application::getInstance()->getCanvasSize();
|
||||||
rv.setX(((ndcSpacePos.x + 1.0) / 2.0) * canvasSize.x);
|
rv.setX(((ndcSpacePos.x + 1.0) / 2.0) * canvasSize.x);
|
||||||
rv.setY((1.0 - ((ndcSpacePos.y + 1.0) / 2.0)) * canvasSize.y);
|
rv.setY((1.0 - ((ndcSpacePos.y + 1.0) / 2.0)) * canvasSize.y);
|
||||||
#if 0
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -528,20 +524,20 @@ void ApplicationOverlay::renderPointers() {
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
_crosshairTexture->bind();
|
_crosshairTexture->bind();
|
||||||
#if 0
|
|
||||||
|
|
||||||
if (OculusManager::isConnected() && !qApp->getLastMouseMoveWasSimulated() && !qApp->isMouseHidden()) {
|
if (qApp->getActiveRenderPlugin()->isHmd() && !qApp->getLastMouseMoveWasSimulated() && !qApp->isMouseHidden()) {
|
||||||
auto glCanvas = Application::getInstance()->getGLWidget();
|
glm::ivec2 trueMouse = qApp->getActiveRenderPlugin()->getTrueMousePosition();
|
||||||
//If we are in oculus, render reticle later
|
//If we are in oculus, render reticle later
|
||||||
if (_lastMouseMove == 0) {
|
if (_lastMouseMove == 0) {
|
||||||
_lastMouseMove = usecTimestampNow();
|
_lastMouseMove = usecTimestampNow();
|
||||||
}
|
}
|
||||||
QPoint position = QPoint(qApp->getTrueMouseX(), qApp->getTrueMouseY());
|
QPoint position(trueMouse.x, trueMouse.y);
|
||||||
|
|
||||||
static const int MAX_IDLE_TIME = 3;
|
static const int MAX_IDLE_TIME = 3;
|
||||||
if (_reticlePosition[MOUSE] != position) {
|
if (_reticlePosition[MOUSE] != position) {
|
||||||
_lastMouseMove = usecTimestampNow();
|
_lastMouseMove = usecTimestampNow();
|
||||||
} else if (usecTimestampNow() - _lastMouseMove > MAX_IDLE_TIME * USECS_PER_SECOND) {
|
} else if (usecTimestampNow() - _lastMouseMove > MAX_IDLE_TIME * USECS_PER_SECOND) {
|
||||||
|
#if 0
|
||||||
float pitch = 0.0f, yaw = 0.0f, roll = 0.0f; // radians
|
float pitch = 0.0f, yaw = 0.0f, roll = 0.0f; // radians
|
||||||
OculusManager::getEulerAngles(yaw, pitch, roll);
|
OculusManager::getEulerAngles(yaw, pitch, roll);
|
||||||
glm::quat orientation(glm::vec3(pitch, yaw, roll));
|
glm::quat orientation(glm::vec3(pitch, yaw, roll));
|
||||||
|
@ -559,6 +555,7 @@ void ApplicationOverlay::renderPointers() {
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "No collision point";
|
qDebug() << "No collision point";
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
_reticlePosition[MOUSE] = position;
|
_reticlePosition[MOUSE] = position;
|
||||||
|
@ -566,9 +563,7 @@ void ApplicationOverlay::renderPointers() {
|
||||||
_magActive[MOUSE] = _magnifier;
|
_magActive[MOUSE] = _magnifier;
|
||||||
_reticleActive[LEFT_CONTROLLER] = false;
|
_reticleActive[LEFT_CONTROLLER] = false;
|
||||||
_reticleActive[RIGHT_CONTROLLER] = false;
|
_reticleActive[RIGHT_CONTROLLER] = false;
|
||||||
} else
|
} else if (qApp->getLastMouseMoveWasSimulated() && Menu::getInstance()->isOptionChecked(MenuOption::SixenseMouseInput)) {
|
||||||
#endif
|
|
||||||
if (qApp->getLastMouseMoveWasSimulated() && Menu::getInstance()->isOptionChecked(MenuOption::SixenseMouseInput)) {
|
|
||||||
_lastMouseMove = 0;
|
_lastMouseMove = 0;
|
||||||
//only render controller pointer if we aren't already rendering a mouse pointer
|
//only render controller pointer if we aren't already rendering a mouse pointer
|
||||||
_reticleActive[MOUSE] = false;
|
_reticleActive[MOUSE] = false;
|
||||||
|
@ -916,7 +911,6 @@ void ApplicationOverlay::renderStatsAndLogs() {
|
||||||
Application* application = Application::getInstance();
|
Application* application = Application::getInstance();
|
||||||
QSharedPointer<BandwidthRecorder> bandwidthRecorder = DependencyManager::get<BandwidthRecorder>();
|
QSharedPointer<BandwidthRecorder> bandwidthRecorder = DependencyManager::get<BandwidthRecorder>();
|
||||||
|
|
||||||
auto glCanvas = Application::getInstance()->getGLWidget();
|
|
||||||
const OctreePacketProcessor& octreePacketProcessor = application->getOctreePacketProcessor();
|
const OctreePacketProcessor& octreePacketProcessor = application->getOctreePacketProcessor();
|
||||||
NodeBounds& nodeBoundsDisplay = application->getNodeBoundsDisplay();
|
NodeBounds& nodeBoundsDisplay = application->getNodeBoundsDisplay();
|
||||||
|
|
||||||
|
@ -944,7 +938,10 @@ void ApplicationOverlay::renderStatsAndLogs() {
|
||||||
int timerBottom =
|
int timerBottom =
|
||||||
(Menu::getInstance()->isOptionChecked(MenuOption::Stats))
|
(Menu::getInstance()->isOptionChecked(MenuOption::Stats))
|
||||||
? 80 : 20;
|
? 80 : 20;
|
||||||
drawText(glCanvas->width() - 100, glCanvas->height() - timerBottom,
|
|
||||||
|
auto size = qApp->getActiveRenderPlugin()->getCanvasSize();
|
||||||
|
// auto glCanvas = Application::getInstance()->getGLWidget();
|
||||||
|
drawText(size.x - 100, size.y - timerBottom,
|
||||||
0.30f, 0.0f, 0, frameTimer.toUtf8().constData(), WHITE_TEXT);
|
0.30f, 0.0f, 0, frameTimer.toUtf8().constData(), WHITE_TEXT);
|
||||||
}
|
}
|
||||||
nodeBoundsDisplay.drawOverlay();
|
nodeBoundsDisplay.drawOverlay();
|
||||||
|
|
|
@ -21,7 +21,7 @@ const float MAGNIFY_WIDTH = 220.0f;
|
||||||
const float MAGNIFY_HEIGHT = 100.0f;
|
const float MAGNIFY_HEIGHT = 100.0f;
|
||||||
const float MAGNIFY_MULT = 2.0f;
|
const float MAGNIFY_MULT = 2.0f;
|
||||||
|
|
||||||
const float DEFAULT_OCULUS_UI_ANGULAR_SIZE = 72.0f;
|
const float DEFAULT_HMD_UI_ANGULAR_SIZE = 72.0f;
|
||||||
|
|
||||||
// Handles the drawing of the overlays to the screen
|
// Handles the drawing of the overlays to the screen
|
||||||
class ApplicationOverlay {
|
class ApplicationOverlay {
|
||||||
|
@ -44,10 +44,8 @@ public:
|
||||||
bool hasMagnifier() const { return _magnifier; }
|
bool hasMagnifier() const { return _magnifier; }
|
||||||
void toggleMagnifier() { _magnifier = !_magnifier; }
|
void toggleMagnifier() { _magnifier = !_magnifier; }
|
||||||
|
|
||||||
#if 0
|
float getHmdUIAngularSize() const { return _hmdUIAngularSize; }
|
||||||
float getOculusUIAngularSize() const { return _oculusUIAngularSize; }
|
void setHmdUIAngularSize(float hmdUIAngularSize) { _hmdUIAngularSize = hmdUIAngularSize; }
|
||||||
void setOculusUIAngularSize(float oculusUIAngularSize) { _oculusUIAngularSize = oculusUIAngularSize; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Converter from one frame of reference to another.
|
// Converter from one frame of reference to another.
|
||||||
// Frame of reference:
|
// Frame of reference:
|
||||||
|
@ -97,7 +95,7 @@ private:
|
||||||
VerticesIndices _vbo;
|
VerticesIndices _vbo;
|
||||||
};
|
};
|
||||||
|
|
||||||
float _oculusUIAngularSize = DEFAULT_OCULUS_UI_ANGULAR_SIZE;
|
float _hmdUIAngularSize = DEFAULT_HMD_UI_ANGULAR_SIZE;
|
||||||
|
|
||||||
void renderReticle(glm::quat orientation, float alpha);
|
void renderReticle(glm::quat orientation, float alpha);
|
||||||
void renderPointers();;
|
void renderPointers();;
|
||||||
|
|
Loading…
Reference in a new issue