diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 65615a65b0..dec179d479 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -112,7 +112,6 @@ #include "avatar/AvatarManager.h" -#include "audio/AudioIOStatsRenderer.h" #include "audio/AudioScope.h" #include "devices/DdeFaceTracker.h" @@ -274,7 +273,6 @@ bool setupEssentials(int& argc, char** argv) { auto faceshift = DependencyManager::set(); auto audio = DependencyManager::set(); auto audioScope = DependencyManager::set(); - auto audioIOStatsRenderer = DependencyManager::set(); auto deferredLightingEffect = DependencyManager::set(); auto ambientOcclusionEffect = DependencyManager::set(); auto textureCache = DependencyManager::set(); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 60311904de..f292ff2d2a 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -24,7 +24,6 @@ #include "Application.h" #include "AccountManager.h" -#include "audio/AudioIOStatsRenderer.h" #include "audio/AudioScope.h" #include "avatar/AvatarManager.h" #include "devices/DdeFaceTracker.h" @@ -588,18 +587,13 @@ Menu::Menu() { audioScopeFramesGroup->addAction(fiftyFrames); } - auto statsRenderer = DependencyManager::get(); addCheckableActionToQMenuAndActionHash(audioDebugMenu, MenuOption::AudioStats, Qt::CTRL | Qt::SHIFT | Qt::Key_A, - false, - statsRenderer.data(), - SLOT(toggle())); + false); //, statsRenderer.data(), SLOT(toggle())); // TODO: convert to dialogbox addCheckableActionToQMenuAndActionHash(audioDebugMenu, MenuOption::AudioStatsShowInjectedStreams, 0, - false, - statsRenderer.data(), - SLOT(toggleShowInjectedStreams())); + false); //, statsRenderer.data(), SLOT(toggleShowInjectedStreams)); // TODO: convert to dialogbox MenuWrapper* physicsOptionsMenu = developerMenu->addMenu("Physics"); diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 82f7d55b5d..9a013c8f6f 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -100,23 +100,6 @@ int widthText(float scale, int mono, char const* string) { return textRenderer(mono)->computeExtent(string).x; // computeWidth(string) * (scale / 0.10); } -void drawText(int x, int y, float scale, float radians, int mono, - char const* string, const float* color) { - // - // Draws text on screen as stroked so it can be resized - // - glPushMatrix(); - glTranslatef(static_cast(x), static_cast(y), 0.0f); - - - glRotated(double(radians * DEGREES_PER_RADIAN), 0.0, 0.0, 1.0); - glScalef(scale / 0.1f, scale / 0.1f, 1.0f); - - glm::vec4 colorV4 = {color[0], color[1], color[2], 1.0f }; - textRenderer(mono)->draw(0, 0, string, colorV4); - glPopMatrix(); -} - void renderCollisionOverlay(int width, int height, float magnitude, float red, float blue, float green) { const float MIN_VISIBLE_COLLISION = 0.01f; if (magnitude > MIN_VISIBLE_COLLISION) { diff --git a/interface/src/Util.h b/interface/src/Util.h index d252c26bef..a422918d9a 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -24,9 +24,6 @@ const glm::vec3 randVector(); void renderWorldBox(gpu::Batch& batch); int widthText(float scale, int mono, char const* string); -void drawText(int x, int y, float scale, float radians, int mono, - char const* string, const float* color); - void renderCollisionOverlay(int width, int height, float magnitude, float red = 0, float blue = 0, float green = 0); void runTimingTests(); diff --git a/interface/src/audio/AudioIOStatsRenderer.cpp b/interface/src/audio/AudioIOStatsRenderer.cpp deleted file mode 100644 index 35b716c611..0000000000 --- a/interface/src/audio/AudioIOStatsRenderer.cpp +++ /dev/null @@ -1,242 +0,0 @@ -// -// AudioIOStatsRenderer.cpp -// interface/src/audio -// -// Created by Stephen Birarda on 2014-12-16. -// Copyright 2014 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 "InterfaceConfig.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "AudioIOStatsRenderer.h" - -AudioIOStatsRenderer::AudioIOStatsRenderer() : - _stats(NULL), - _isEnabled(false), - _shouldShowInjectedStreams(false) -{ - // grab the stats object from the audio I/O singleton - _stats = &DependencyManager::get()->getStats(); -} - -#ifdef _WIN32 -const unsigned int STATS_WIDTH = 1500; -#else -const unsigned int STATS_WIDTH = 650; -#endif -const unsigned int STATS_HEIGHT_PER_LINE = 20; - -void AudioIOStatsRenderer::render(const float* color, int width, int height) { - if (!_isEnabled) { - return; - } - - const int linesWhenCentered = _shouldShowInjectedStreams ? 34 : 27; - const int CENTERED_BACKGROUND_HEIGHT = STATS_HEIGHT_PER_LINE * linesWhenCentered; - - int lines = _shouldShowInjectedStreams ? _stats->getMixerInjectedStreamStatsMap().size() * 7 + 27 : 27; - int statsHeight = STATS_HEIGHT_PER_LINE * lines; - - - static const glm::vec4 backgroundColor = { 0.2f, 0.2f, 0.2f, 0.6f }; - int x = std::max((width - (int)STATS_WIDTH) / 2, 0); - int y = std::max((height - CENTERED_BACKGROUND_HEIGHT) / 2, 0); - int w = STATS_WIDTH; - int h = statsHeight; - DependencyManager::get()->renderQuad(x, y, w, h, backgroundColor); - - int horizontalOffset = x + 5; - int verticalOffset = y; - - float scale = 0.10f; - float rotation = 0.0f; - int font = 2; - - char latencyStatString[512]; - - float audioInputBufferLatency = 0.0f, inputRingBufferLatency = 0.0f, networkRoundtripLatency = 0.0f, mixerRingBufferLatency = 0.0f, outputRingBufferLatency = 0.0f, audioOutputBufferLatency = 0.0f; - - AudioStreamStats downstreamAudioStreamStats = _stats->getMixerDownstreamStats(); - SharedNodePointer audioMixerNodePointer = DependencyManager::get()->soloNodeOfType(NodeType::AudioMixer); - if (!audioMixerNodePointer.isNull()) { - audioInputBufferLatency = _stats->getAudioInputMsecsReadStats().getWindowAverage(); - inputRingBufferLatency = (float) _stats->getInputRungBufferMsecsAvailableStats().getWindowAverage(); - networkRoundtripLatency = audioMixerNodePointer->getPingMs(); - mixerRingBufferLatency = _stats->getMixerAvatarStreamStats()._framesAvailableAverage * AudioConstants::NETWORK_FRAME_MSECS; - outputRingBufferLatency = downstreamAudioStreamStats._framesAvailableAverage * AudioConstants::NETWORK_FRAME_MSECS; - audioOutputBufferLatency = _stats->getAudioOutputMsecsUnplayedStats().getWindowAverage(); - } - float totalLatency = audioInputBufferLatency + inputRingBufferLatency + networkRoundtripLatency + mixerRingBufferLatency + outputRingBufferLatency + audioOutputBufferLatency; - - sprintf(latencyStatString, - " Audio input buffer: %7.2fms - avg msecs of samples read to the input ring buffer in last 10s", - (double)audioInputBufferLatency); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, latencyStatString, color); - - sprintf(latencyStatString, - " Input ring buffer: %7.2fms - avg msecs of samples in input ring buffer in last 10s", - (double)inputRingBufferLatency); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, latencyStatString, color); - - sprintf(latencyStatString, - " Network to mixer: %7.2fms - half of last ping value calculated by the node list", - (double)(networkRoundtripLatency / 2.0f)); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, latencyStatString, color); - - sprintf(latencyStatString, - " AudioMixer ring buffer: %7.2fms - avg msecs of samples in audio mixer's ring buffer in last 10s", - (double)mixerRingBufferLatency); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, latencyStatString, color); - - sprintf(latencyStatString, - " Network to client: %7.2fms - half of last ping value calculated by the node list", - (double)(networkRoundtripLatency / 2.0f)); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, latencyStatString, color); - - sprintf(latencyStatString, - " Output ring buffer: %7.2fms - avg msecs of samples in output ring buffer in last 10s", - (double)outputRingBufferLatency); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, latencyStatString, color); - - sprintf(latencyStatString, - " Audio output buffer: %7.2fms - avg msecs of samples in audio output buffer in last 10s", - (double)audioOutputBufferLatency); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, latencyStatString, color); - - sprintf(latencyStatString, " TOTAL: %7.2fms\n", (double)totalLatency); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, latencyStatString, color); - - - verticalOffset += STATS_HEIGHT_PER_LINE; // blank line - - char clientUpstreamMicLabelString[] = "Upstream Mic Audio Packets Sent Gaps (by client):"; - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, clientUpstreamMicLabelString, color); - - const MovingMinMaxAvg& packetSentTimeGaps = _stats->getPacketSentTimeGaps(); - - char stringBuffer[512]; - sprintf(stringBuffer, " Inter-packet timegaps (overall) | min: %9s, max: %9s, avg: %9s", - formatUsecTime(packetSentTimeGaps.getMin()).toLatin1().data(), - formatUsecTime(packetSentTimeGaps.getMax()).toLatin1().data(), - formatUsecTime(packetSentTimeGaps.getAverage()).toLatin1().data()); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, stringBuffer, color); - - sprintf(stringBuffer, " Inter-packet timegaps (last 30s) | min: %9s, max: %9s, avg: %9s", - formatUsecTime(packetSentTimeGaps.getWindowMin()).toLatin1().data(), - formatUsecTime(packetSentTimeGaps.getWindowMax()).toLatin1().data(), - formatUsecTime(packetSentTimeGaps.getWindowAverage()).toLatin1().data()); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, stringBuffer, color); - - verticalOffset += STATS_HEIGHT_PER_LINE; // blank line - - char upstreamMicLabelString[] = "Upstream mic audio stats (received and reported by audio-mixer):"; - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, upstreamMicLabelString, color); - - renderAudioStreamStats(&_stats->getMixerAvatarStreamStats(), horizontalOffset, verticalOffset, - scale, rotation, font, color); - - - verticalOffset += STATS_HEIGHT_PER_LINE; // blank line - - char downstreamLabelString[] = "Downstream mixed audio stats:"; - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, downstreamLabelString, color); - - AudioStreamStats downstreamStats = _stats->getMixerDownstreamStats(); - renderAudioStreamStats(&downstreamStats, horizontalOffset, verticalOffset, - scale, rotation, font, color, true); - - - if (_shouldShowInjectedStreams) { - - foreach(const AudioStreamStats& injectedStreamAudioStats, _stats->getMixerInjectedStreamStatsMap()) { - - verticalOffset += STATS_HEIGHT_PER_LINE; // blank line - - char upstreamInjectedLabelString[512]; - sprintf(upstreamInjectedLabelString, "Upstream injected audio stats: stream ID: %s", - injectedStreamAudioStats._streamIdentifier.toString().toLatin1().data()); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, upstreamInjectedLabelString, color); - - renderAudioStreamStats(&injectedStreamAudioStats, horizontalOffset, verticalOffset, scale, rotation, font, color); - } - } -} - -void AudioIOStatsRenderer::renderAudioStreamStats(const AudioStreamStats* streamStats, int horizontalOffset, int& verticalOffset, - float scale, float rotation, int font, const float* color, bool isDownstreamStats) { - - char stringBuffer[512]; - - sprintf(stringBuffer, " Packet loss | overall: %5.2f%% (%d lost), last_30s: %5.2f%% (%d lost)", - (double)(streamStats->_packetStreamStats.getLostRate() * 100.0f), - streamStats->_packetStreamStats._lost, - (double)(streamStats->_packetStreamWindowStats.getLostRate() * 100.0f), - streamStats->_packetStreamWindowStats._lost); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, stringBuffer, color); - - if (isDownstreamStats) { - sprintf(stringBuffer, " Ringbuffer frames | desired: %u, avg_available(10s): %u+%d, available: %u+%d", - streamStats->_desiredJitterBufferFrames, - streamStats->_framesAvailableAverage, - (int)((float)_stats->getAudioInputMsecsReadStats().getWindowAverage() / AudioConstants::NETWORK_FRAME_MSECS), - streamStats->_framesAvailable, - (int)(_stats->getAudioOutputMsecsUnplayedStats().getCurrentIntervalLastSample() - / AudioConstants::NETWORK_FRAME_MSECS)); - } else { - sprintf(stringBuffer, " Ringbuffer frames | desired: %u, avg_available(10s): %u, available: %u", - streamStats->_desiredJitterBufferFrames, - streamStats->_framesAvailableAverage, - streamStats->_framesAvailable); - } - - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, stringBuffer, color); - - sprintf(stringBuffer, " Ringbuffer stats | starves: %u, prev_starve_lasted: %u, frames_dropped: %u, overflows: %u", - streamStats->_starveCount, - streamStats->_consecutiveNotMixedCount, - streamStats->_framesDropped, - streamStats->_overflowCount); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, stringBuffer, color); - - sprintf(stringBuffer, " Inter-packet timegaps (overall) | min: %9s, max: %9s, avg: %9s", - formatUsecTime(streamStats->_timeGapMin).toLatin1().data(), - formatUsecTime(streamStats->_timeGapMax).toLatin1().data(), - formatUsecTime(streamStats->_timeGapAverage).toLatin1().data()); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, stringBuffer, color); - - sprintf(stringBuffer, " Inter-packet timegaps (last 30s) | min: %9s, max: %9s, avg: %9s", - formatUsecTime(streamStats->_timeGapWindowMin).toLatin1().data(), - formatUsecTime(streamStats->_timeGapWindowMax).toLatin1().data(), - formatUsecTime(streamStats->_timeGapWindowAverage).toLatin1().data()); - verticalOffset += STATS_HEIGHT_PER_LINE; - drawText(horizontalOffset, verticalOffset, scale, rotation, font, stringBuffer, color); -} diff --git a/interface/src/audio/AudioIOStatsRenderer.h b/interface/src/audio/AudioIOStatsRenderer.h deleted file mode 100644 index 79d177e252..0000000000 --- a/interface/src/audio/AudioIOStatsRenderer.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// AudioIOStatsRenderer.h -// interface/src/audio -// -// Created by Stephen Birarda on 2014-12-16. -// Copyright 2014 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 -// - -#ifndef hifi_AudioIOStatsRenderer_h -#define hifi_AudioIOStatsRenderer_h - -#include - -#include - -class AudioIOStats; -class AudioStreamStats; - -class AudioIOStatsRenderer : public QObject, public Dependency { - Q_OBJECT - SINGLETON_DEPENDENCY -public: - void render(const float* color, int width, int height); - -public slots: - void toggle() { _isEnabled = !_isEnabled; } - void toggleShowInjectedStreams() { _shouldShowInjectedStreams = !_shouldShowInjectedStreams; } -protected: - AudioIOStatsRenderer(); -private: - // audio stats methods for rendering - void renderAudioStreamStats(const AudioStreamStats* streamStats, int horizontalOffset, int& verticalOffset, - float scale, float rotation, int font, const float* color, bool isDownstreamStats = false); - - const AudioIOStats* _stats; - - bool _isEnabled; - bool _shouldShowInjectedStreams; -}; - - -#endif // hifi_AudioIOStatsRenderer_h \ No newline at end of file diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 79c600b7ec..053ce7b3cc 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -323,28 +323,6 @@ void MyAvatar::updateFromTrackers(float deltaTime) { } -void MyAvatar::renderDebugBodyPoints() { - glm::vec3 torsoPosition(getPosition()); - glm::vec3 headPosition(getHead()->getEyePosition()); - float torsoToHead = glm::length(headPosition - torsoPosition); - glm::vec3 position; - qCDebug(interfaceapp, "head-above-torso %.2f, scale = %0.2f", (double)torsoToHead, (double)getScale()); - - // Torso Sphere - position = torsoPosition; - glPushMatrix(); - glTranslatef(position.x, position.y, position.z); - DependencyManager::get()->renderSphere(0.2f, 10.0f, 10.0f, glm::vec4(0, 1, 0, .5f)); - glPopMatrix(); - - // Head Sphere - position = headPosition; - glPushMatrix(); - glTranslatef(position.x, position.y, position.z); - DependencyManager::get()->renderSphere(0.15f, 10.0f, 10.0f, glm::vec4(0, 1, 0, .5f)); - glPopMatrix(); -} - // virtual void MyAvatar::render(RenderArgs* renderArgs, const glm::vec3& cameraPosition, bool postLighting) { // don't render if we've been asked to disable local rendering @@ -355,8 +333,9 @@ void MyAvatar::render(RenderArgs* renderArgs, const glm::vec3& cameraPosition, b Avatar::render(renderArgs, cameraPosition, postLighting); // don't display IK constraints in shadow mode - if (Menu::getInstance()->isOptionChecked(MenuOption::ShowIKConstraints) && postLighting) { - _skeletonModel.renderIKConstraints(); + if (Menu::getInstance()->isOptionChecked(MenuOption::ShowIKConstraints) && + renderArgs && renderArgs->_batch) { + _skeletonModel.renderIKConstraints(*renderArgs->_batch); } } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 34dfcad2ad..a2566118f2 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -48,7 +48,6 @@ public: virtual void render(RenderArgs* renderArgs, const glm::vec3& cameraPosition, bool postLighting = false) override; virtual void renderBody(RenderArgs* renderArgs, ViewFrustum* renderFrustum, bool postLighting, float glowLevel = 0.0f) override; virtual bool shouldRenderHead(const RenderArgs* renderArgs) const override; - void renderDebugBodyPoints(); // setters void setLeanScale(float scale) { _leanScale = scale; } diff --git a/interface/src/avatar/SkeletonModel.cpp b/interface/src/avatar/SkeletonModel.cpp index 20d458195d..2d4baaf237 100644 --- a/interface/src/avatar/SkeletonModel.cpp +++ b/interface/src/avatar/SkeletonModel.cpp @@ -186,9 +186,9 @@ void SkeletonModel::getHandShapes(int jointIndex, QVector& shapes) } } -void SkeletonModel::renderIKConstraints() { - renderJointConstraints(getRightHandJointIndex()); - renderJointConstraints(getLeftHandJointIndex()); +void SkeletonModel::renderIKConstraints(gpu::Batch& batch) { + renderJointConstraints(batch, getRightHandJointIndex()); + renderJointConstraints(batch, getLeftHandJointIndex()); } class IndexValue { @@ -312,26 +312,27 @@ void SkeletonModel::maybeUpdateEyeRotation(const JointState& parentState, const _owningAvatar->getHead()->getFaceModel().maybeUpdateEyeRotation(this, parentState, joint, state); } -void SkeletonModel::renderJointConstraints(int jointIndex) { +void SkeletonModel::renderJointConstraints(gpu::Batch& batch, int jointIndex) { if (jointIndex == -1 || jointIndex >= _jointStates.size()) { return; } const FBXGeometry& geometry = _geometry->getFBXGeometry(); const float BASE_DIRECTION_SIZE = 0.3f; float directionSize = BASE_DIRECTION_SIZE * extractUniformScale(_scale); - glLineWidth(3.0f); + batch._glLineWidth(3.0f); do { const FBXJoint& joint = geometry.joints.at(jointIndex); const JointState& jointState = _jointStates.at(jointIndex); glm::vec3 position = _rotation * jointState.getPosition() + _translation; - - glPushMatrix(); - glTranslatef(position.x, position.y, position.z); glm::quat parentRotation = (joint.parentIndex == -1) ? _rotation : _rotation * _jointStates.at(joint.parentIndex).getRotation(); - glm::vec3 rotationAxis = glm::axis(parentRotation); - glRotatef(glm::degrees(glm::angle(parentRotation)), rotationAxis.x, rotationAxis.y, rotationAxis.z); float fanScale = directionSize * 0.75f; - glScalef(fanScale, fanScale, fanScale); + + Transform transform = Transform(); + transform.setTranslation(position); + transform.setRotation(parentRotation); + transform.setScale(fanScale); + batch.setModelTransform(transform); + const int AXIS_COUNT = 3; auto geometryCache = DependencyManager::get(); @@ -362,17 +363,14 @@ void SkeletonModel::renderJointConstraints(int jointIndex) { // TODO: this is really inefficient constantly recreating these vertices buffers. It would be // better if the skeleton model cached these buffers for each of the joints they are rendering geometryCache->updateVertices(_triangleFanID, points, color); - geometryCache->renderVertices(gpu::TRIANGLE_FAN, _triangleFanID); + geometryCache->renderVertices(batch, gpu::TRIANGLE_FAN, _triangleFanID); } - glPopMatrix(); renderOrientationDirections(jointIndex, position, _rotation * jointState.getRotation(), directionSize); jointIndex = joint.parentIndex; } while (jointIndex != -1 && geometry.joints.at(jointIndex).isFree); - - glLineWidth(1.0f); } void SkeletonModel::renderOrientationDirections(int jointIndex, glm::vec3 position, const glm::quat& orientation, float size) { diff --git a/interface/src/avatar/SkeletonModel.h b/interface/src/avatar/SkeletonModel.h index 755aa3dfee..3d63238cf2 100644 --- a/interface/src/avatar/SkeletonModel.h +++ b/interface/src/avatar/SkeletonModel.h @@ -36,7 +36,7 @@ public: /// \param shapes[out] list in which is stored pointers to hand shapes void getHandShapes(int jointIndex, QVector& shapes) const; - void renderIKConstraints(); + void renderIKConstraints(gpu::Batch& batch); /// Returns the index of the left hand joint, or -1 if not found. int getLeftHandJointIndex() const { return isActive() ? _geometry->getFBXGeometry().leftHandJointIndex : -1; } @@ -144,7 +144,7 @@ protected: private: - void renderJointConstraints(int jointIndex); + void renderJointConstraints(gpu::Batch& batch, int jointIndex); void renderOrientationDirections(int jointIndex, glm::vec3 position, const glm::quat& orientation, float size); struct OrientationLineIDs { diff --git a/interface/src/ui/ApplicationOverlay.cpp b/interface/src/ui/ApplicationOverlay.cpp index b28c5c83a2..63dcba9d5d 100644 --- a/interface/src/ui/ApplicationOverlay.cpp +++ b/interface/src/ui/ApplicationOverlay.cpp @@ -27,7 +27,6 @@ #include #include "AudioClient.h" -#include "audio/AudioIOStatsRenderer.h" #include "audio/AudioScope.h" #include "Application.h" #include "ApplicationOverlay.h" diff --git a/interface/src/ui/overlays/ImageOverlay.cpp b/interface/src/ui/overlays/ImageOverlay.cpp index 360eb3261d..ce6e12d73e 100644 --- a/interface/src/ui/overlays/ImageOverlay.cpp +++ b/interface/src/ui/overlays/ImageOverlay.cpp @@ -62,42 +62,18 @@ void ImageOverlay::render(RenderArgs* args) { return; } - // TODO: I commented all the code needed to migrate this ImageOverlay rendering from naked gl to gpu::Batch - /*gpu::Batch localBatch; - gpu::Batch& batch = (args->_batch ? (*args->_batch) : localBatch); - static gpu::PipelinePointer drawPipeline; - static int texcoordRectLoc = -1; - static int colorLoc = -1; - if (!drawPipeline) { - auto blitProgram = gpu::StandardShaderLib::getProgram(gpu::StandardShaderLib::getDrawTexcoordRectTransformUnitQuadVS, gpu::StandardShaderLib::getDrawColoredTexturePS); - gpu::Shader::makeProgram(*blitProgram); - texcoordRectLoc = blitProgram->getUniforms().findLocation("texcoordRect"); - colorLoc = blitProgram->getUniforms().findLocation("color"); - - gpu::StatePointer blitState = gpu::StatePointer(new gpu::State()); - blitState->setBlendFunction(false, gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::INV_SRC_ALPHA); - blitState->setColorWriteMask(true, true, true, true); - drawPipeline = gpu::PipelinePointer(gpu::Pipeline::create(blitProgram, blitState)); - } - */ - // TODO: batch.setPipeline(drawPipeline); - glUseProgram(0); + gpu::Batch& batch = *args->_batch; if (_renderImage) { - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, _texture->getID()); - // TODO: batch.setResourceTexture(0, _texture->getGPUTexture()); - } // TODO: else { - // TODO: batch.setResourceTexture(0, args->_whiteTexture); - // TODO: } - - // TODO: batch.setViewTransform(Transform()); + batch.setResourceTexture(0, _texture->getGPUTexture()); + } else { + batch.setResourceTexture(0, args->_whiteTexture); + } const float MAX_COLOR = 255.0f; xColor color = getColor(); float alpha = getAlpha(); glm::vec4 quadColor(color.red / MAX_COLOR, color.green / MAX_COLOR, color.blue / MAX_COLOR, alpha); - // TODO: batch._glUniform4fv(colorLoc, 1, (const float*) &quadColor); int left = _bounds.left(); int right = _bounds.right() + 1; @@ -107,11 +83,7 @@ void ImageOverlay::render(RenderArgs* args) { glm::vec2 topLeft(left, top); glm::vec2 bottomRight(right, bottom); - // TODO: Transform model; - // TODO: model.setTranslation(glm::vec3(0.5f * (right + left), 0.5f * (top + bottom), 0.0f)); - // TODO: model.setScale(glm::vec3(0.5f * (right - left), 0.5f * (bottom - top), 1.0f)); - // TODO: batch.setModelTransform(model); - + batch.setModelTransform(Transform()); // if for some reason our image is not over 0 width or height, don't attempt to render the image if (_renderImage) { @@ -144,22 +116,13 @@ void ImageOverlay::render(RenderArgs* args) { glm::vec2 texCoordBottomRight(x + w, y + h); glm::vec4 texcoordRect(texCoordTopLeft, w, h); - // TODO: batch._glUniform4fv(texcoordRectLoc, 1, (const float*) &texcoordRect); - // TODO: batch.draw(gpu::TRIANGLE_STRIP, 4); - DependencyManager::get()->renderQuad(topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, quadColor); + DependencyManager::get()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, quadColor); } else { - // TODO: batch.draw(gpu::TRIANGLE_STRIP, 4); - DependencyManager::get()->renderQuad(topLeft, bottomRight, quadColor); + DependencyManager::get()->renderQuad(batch, topLeft, bottomRight, quadColor); } - glDisable(GL_TEXTURE_2D); } else { - // TODO: batch.draw(gpu::TRIANGLE_STRIP, 4); - DependencyManager::get()->renderQuad(topLeft, bottomRight, quadColor); + DependencyManager::get()->renderQuad(batch, topLeft, bottomRight, quadColor); } - - // TODO: if (!args->_batch) { - // TODO: args->_context->render(batch); - // TODO: } } void ImageOverlay::setProperties(const QScriptValue& properties) {