From fb62fda2d2056b0d1ecaea28d2b9524bda297c29 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 15 Jul 2015 10:26:48 -0700 Subject: [PATCH] started working on input plugin architecture --- interface/src/Application.cpp | 3 +++ .../src/input-plugins/InputPlugin.cpp | 8 ++++++ .../src/input-plugins/InputPlugin.h | 17 ++++++++++++ .../input-plugins/ViveControllerManager.cpp | 27 +++++++++++++------ .../src/input-plugins/ViveControllerManager.h | 13 ++++++--- 5 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 libraries/input-plugins/src/input-plugins/InputPlugin.cpp create mode 100644 libraries/input-plugins/src/input-plugins/InputPlugin.h diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 14015a623c..11a1f34168 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2226,6 +2226,9 @@ void Application::loadSettings() { DependencyManager::get()->loadSettings(); DependencyManager::get()->loadSettings(); + // DONT CHECK IN + //DependencyManager::get()->setAutomaticLODAdjust(false); + Menu::getInstance()->loadSettings(); _myAvatar->loadData(); } diff --git a/libraries/input-plugins/src/input-plugins/InputPlugin.cpp b/libraries/input-plugins/src/input-plugins/InputPlugin.cpp new file mode 100644 index 0000000000..1da0dce891 --- /dev/null +++ b/libraries/input-plugins/src/input-plugins/InputPlugin.cpp @@ -0,0 +1,8 @@ +// +// Created by Sam Gondelman on 7/13/2015 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +#include "InputPlugin.h" diff --git a/libraries/input-plugins/src/input-plugins/InputPlugin.h b/libraries/input-plugins/src/input-plugins/InputPlugin.h new file mode 100644 index 0000000000..1b3eca4049 --- /dev/null +++ b/libraries/input-plugins/src/input-plugins/InputPlugin.h @@ -0,0 +1,17 @@ +// +// Created by Sam Gondelman on 7/13/2015 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +#pragma once + +#include + +class InputPlugin : public Plugin { + Q_OBJECT +public: + virtual bool isHandController() = 0; +}; + diff --git a/libraries/input-plugins/src/input-plugins/ViveControllerManager.cpp b/libraries/input-plugins/src/input-plugins/ViveControllerManager.cpp index 1e2405b98d..fdf735940b 100644 --- a/libraries/input-plugins/src/input-plugins/ViveControllerManager.cpp +++ b/libraries/input-plugins/src/input-plugins/ViveControllerManager.cpp @@ -56,7 +56,9 @@ ViveControllerManager::ViveControllerManager() : _isInitialized(false), _isEnabled(true), _trackedControllers(0), - _modelLoaded(false) + _modelLoaded(false), + _leftHandRenderID(0), + _rightHandRenderID(0) { } @@ -144,11 +146,11 @@ void ViveControllerManager::activate() { gpu::Element formatGPU = gpu::Element(gpu::VEC4, gpu::UINT8, gpu::RGBA); gpu::Element formatMip = gpu::Element(gpu::VEC4, gpu::UINT8, gpu::RGBA); - texture = gpu::TexturePointer( + _texture = gpu::TexturePointer( gpu::Texture::create2D(formatGPU, model.diffuseTexture.unWidth, model.diffuseTexture.unHeight, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR))); - texture->assignStoredMip(0, formatMip, model.diffuseTexture.unWidth * model.diffuseTexture.unHeight * 4 * sizeof(uint8_t), model.diffuseTexture.rubTextureMapData); - texture->autoGenerateMips(-1); + _texture->assignStoredMip(0, formatMip, model.diffuseTexture.unWidth * model.diffuseTexture.unHeight * 4 * sizeof(uint8_t), model.diffuseTexture.rubTextureMapData); + _texture->autoGenerateMips(-1); _modelLoaded = true; } @@ -156,21 +158,30 @@ void ViveControllerManager::activate() { _isInitialized = true; } -void ViveControllerManager::render(RenderArgs* args) { - PerformanceTimer perfTimer("ViveControllerManager::render"); +void ViveControllerManager::updateRendering(RenderArgs* args, render::ScenePointer scene, render::PendingChanges pendingChanges) { + PerformanceTimer perfTimer("ViveControllerManager::updateRendering"); if (_modelLoaded) { + //auto controllerPayload = new render::Payload(this); + //auto controllerPayloadPointer = ViveControllerManager::PayloadPointer(controllerPayload); + //if (_leftHandRenderID == 0) { + // _leftHandRenderID = scene->allocateID(); + // pendingChanges.resetItem(_leftHandRenderID, controllerPayloadPointer); + //} + //pendingChanges.updateItem(_leftHandRenderID, ); + + UserInputMapper::PoseValue leftHand = _poseStateMap[makeInput(JointChannel::LEFT_HAND).getChannel()]; UserInputMapper::PoseValue rightHand = _poseStateMap[makeInput(JointChannel::RIGHT_HAND).getChannel()]; gpu::Batch batch; auto geometryCache = DependencyManager::get(); geometryCache->useSimpleDrawPipeline(batch); - DependencyManager::get()->bindSimpleProgram(batch); + DependencyManager::get()->bindSimpleProgram(batch, true); auto mesh = _modelGeometry.getMesh(); batch.setInputFormat(mesh->getVertexFormat()); - //batch.setUniformTexture(0, texture); + //batch._glBindTexture(GL_TEXTURE_2D, _uexture); if (leftHand.isValid()) { renderHand(leftHand, batch, LEFT_HAND); diff --git a/libraries/input-plugins/src/input-plugins/ViveControllerManager.h b/libraries/input-plugins/src/input-plugins/ViveControllerManager.h index 57bd3cb880..a1a44db6fc 100644 --- a/libraries/input-plugins/src/input-plugins/ViveControllerManager.h +++ b/libraries/input-plugins/src/input-plugins/ViveControllerManager.h @@ -19,14 +19,16 @@ #include #include -#include "plugins/Plugin.h" +#include "InputPlugin.h" #include +#include #include "UserInputMapper.h" -class ViveControllerManager : public Plugin { +class ViveControllerManager : public InputPlugin { public: virtual const QString& getName() const override; virtual bool isSupported() const override; + virtual bool isHandController() { return true; } /// Called when plugin is initially loaded, typically at application start virtual void init() override; @@ -68,7 +70,7 @@ public: void focusOutEvent(); - void render(RenderArgs* args); + void updateRendering(RenderArgs* args, render::ScenePointer scene, render::PendingChanges pendingChanges); void update(); static ViveControllerManager& getInstance(); @@ -106,7 +108,10 @@ private: bool _modelLoaded; model::Geometry _modelGeometry; - gpu::TexturePointer texture; + gpu::TexturePointer _texture; + + int _leftHandRenderID; + int _rightHandRenderID; static const QString NAME;