From 8b0086417598d831a307a19cd80d6071a321b084 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 1 Jul 2015 15:04:19 -0700 Subject: [PATCH 1/5] hydra hand spheres and lasers are rendering again --- examples/lineRotations.js | 134 +++++++++++++++++++++++++ interface/src/Application.cpp | 2 +- interface/src/avatar/Avatar.cpp | 8 +- interface/src/avatar/Avatar.h | 2 +- interface/src/avatar/Hand.cpp | 54 +++++----- interface/src/avatar/Hand.h | 2 +- interface/src/avatar/MyAvatar.cpp | 12 ++- interface/src/avatar/MyAvatar.h | 2 +- interface/src/avatar/SkeletonModel.cpp | 2 +- 9 files changed, 173 insertions(+), 45 deletions(-) create mode 100644 examples/lineRotations.js diff --git a/examples/lineRotations.js b/examples/lineRotations.js new file mode 100644 index 0000000000..e60be82770 --- /dev/null +++ b/examples/lineRotations.js @@ -0,0 +1,134 @@ +// +// RenderableQuadEntityItem.cpp +// libraries/entities-renderer/src/ +// +// Created by Eric Levin on 6/22/15 +// 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 + +#include +#include + +#include +#include + +#include "RenderableQuadEntityItem.h" + + + + + + + +EntityItemPointer RenderableQuadEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { + return EntityItemPointer(new RenderableQuadEntityItem(entityID, properties)); +} + +RenderableQuadEntityItem::RenderableQuadEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : +QuadEntityItem(entityItemID, properties) { + _numVertices = 0; + +} + +gpu::PipelinePointer RenderableQuadEntityItem::_pipeline; +gpu::Stream::FormatPointer RenderableQuadEntityItem::_format; + +void RenderableQuadEntityItem::createPipeline() { + static const int NORMAL_OFFSET = 12; + static const int COLOR_OFFSET = 24; + _format.reset(new gpu::Stream::Format()); + _format->setAttribute(gpu::Stream::POSITION, 0, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ), 0); + _format->setAttribute(gpu::Stream::NORMAL, 0, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ), NORMAL_OFFSET); + _format->setAttribute(gpu::Stream::COLOR, 0, gpu::Element(gpu::VEC4, gpu::UINT8, gpu::RGBA), COLOR_OFFSET); + + auto VS = DependencyManager::get()->getSimpleVertexShader(); + auto PS = DependencyManager::get()->getSimplePixelShader(); + gpu::ShaderPointer program = gpu::ShaderPointer(gpu::Shader::createProgram(VS, PS)); + + gpu::Shader::BindingSet slotBindings; + gpu::Shader::makeProgram(*program, slotBindings); + + gpu::StatePointer state = gpu::StatePointer(new gpu::State()); + //state->setCullMode(gpu::State::CULL_BACK); + state->setDepthTest(true, true, gpu::LESS_EQUAL); + state->setBlendFunction(false, + gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::INV_SRC_ALPHA, + gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); + _pipeline = gpu::PipelinePointer(gpu::Pipeline::create(program, state)); +} +int generateColor() { + float c1 = static_cast (rand()) / static_cast (RAND_MAX); + float c2 = static_cast (rand()) / static_cast (RAND_MAX); + float c3 = static_cast (rand()) / static_cast (RAND_MAX); + return ((int(c1 * 255.0f) & 0xFF)) | + ((int(c2 * 255.0f) & 0xFF) << 8) | + ((int(c3 * 255.0f) & 0xFF) << 16) | + ((int(255.0f) & 0xFF) << 24); +} + +void RenderableQuadEntityItem::updateGeometry() { + QReadLocker lock(&_quadReadWriteLock); + int compactColor = generateColor(); + _numVertices = 0; + _verticesBuffer.reset(new gpu::Buffer()); + int vertexIndex = 0; + for (int i = 0; i < _normals.size(); i++) { + compactColor = generateColor(); + _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_vertices.at(vertexIndex)); + vertexIndex++; + _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_normals.at(i)); + _verticesBuffer->append(sizeof(int), (gpu::Byte*)&compactColor); + _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_vertices.at(vertexIndex)); + vertexIndex++; + _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_normals.at(i)); + _verticesBuffer->append(sizeof(int), (gpu::Byte*)&compactColor); + + _numVertices +=2; + } + _pointsChanged = false; + + + +} + + + +void RenderableQuadEntityItem::render(RenderArgs* args) { + if (_points.size() < 2 || _vertices.size() != _normals.size() * 2) { + return; + } + + if (!_pipeline) { + createPipeline(); + } + + PerformanceTimer perfTimer("RenderableQuadEntityItem::render"); + Q_ASSERT(getType() == EntityTypes::Quad); + + Q_ASSERT(args->_batch); + if (_pointsChanged) { + updateGeometry(); + } + + + gpu::Batch& batch = *args->_batch; + Transform transform = Transform(); + transform.setTranslation(getPosition()); + transform.setRotation(getRotation()); + batch.setModelTransform(transform); + + + batch.setPipeline(_pipeline); + + batch.setInputFormat(_format); + batch.setInputBuffer(0, _verticesBuffer, 0, _format->getChannels().at(0)._stride); + + batch.draw(gpu::TRIANGLE_STRIP, _numVertices, 0); + + RenderableDebugableEntityItem::render(this, args); +}; diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 2e2722aec2..ce070f4ca9 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3547,7 +3547,7 @@ void Application::displaySide(RenderArgs* renderArgs, Camera& theCamera, bool se } //Render the sixense lasers if (Menu::getInstance()->isOptionChecked(MenuOption::SixenseLasers)) { - _myAvatar->renderLaserPointers(); + _myAvatar->renderLaserPointers(*renderArgs->_batch); } if (!selfAvatarOnly) { diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index d0778481a6..384b2f0c86 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -575,9 +575,9 @@ void Avatar::renderBody(RenderArgs* renderArgs, ViewFrustum* renderFrustum, bool return; } - if (postLighting) { +// if (postLighting) { getHand()->render(renderArgs, false); - } +// } } getHead()->render(renderArgs, 1.0f, renderFrustum, postLighting); } @@ -1010,7 +1010,7 @@ int Avatar::parseDataAtOffset(const QByteArray& packet, int offset) { int Avatar::_jointConesID = GeometryCache::UNKNOWN_ID; // render a makeshift cone section that serves as a body part connecting joint spheres -void Avatar::renderJointConnectingCone(glm::vec3 position1, glm::vec3 position2, +void Avatar::renderJointConnectingCone(gpu::Batch& batch, glm::vec3 position1, glm::vec3 position2, float radius1, float radius2, const glm::vec4& color) { auto geometryCache = DependencyManager::get(); @@ -1057,7 +1057,7 @@ void Avatar::renderJointConnectingCone(glm::vec3 position1, glm::vec3 position2, // TODO: this is really inefficient constantly recreating these vertices buffers. It would be // better if the avatars cached these buffers for each of the joints they are rendering geometryCache->updateVertices(_jointConesID, points, color); - geometryCache->renderVertices(gpu::TRIANGLES, _jointConesID); + geometryCache->renderVertices(batch, gpu::TRIANGLES, _jointConesID); } } diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 236b04864b..b23059acb0 100644 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -148,7 +148,7 @@ public: virtual int parseDataAtOffset(const QByteArray& packet, int offset); - static void renderJointConnectingCone(glm::vec3 position1, glm::vec3 position2, + static void renderJointConnectingCone( gpu::Batch& batch, glm::vec3 position1, glm::vec3 position2, float radius1, float radius2, const glm::vec4& color); virtual void applyCollision(const glm::vec3& contactPoint, const glm::vec3& penetration) { } diff --git a/interface/src/avatar/Hand.cpp b/interface/src/avatar/Hand.cpp index 74653d9768..7b2968973c 100644 --- a/interface/src/avatar/Hand.cpp +++ b/interface/src/avatar/Hand.cpp @@ -103,7 +103,8 @@ void Hand::resolvePenetrations() { } void Hand::render(RenderArgs* renderArgs, bool isMine) { - if (renderArgs->_renderMode != RenderArgs::SHADOW_RENDER_MODE && + gpu::Batch& batch = *renderArgs->_batch; + if (renderArgs->_renderMode != RenderArgs::SHADOW_RENDER_MODE && Menu::getInstance()->isOptionChecked(MenuOption::RenderSkeletonCollisionShapes)) { // draw a green sphere at hand joint location, which is actually near the wrist) for (size_t i = 0; i < getNumPalms(); i++) { @@ -112,31 +113,25 @@ void Hand::render(RenderArgs* renderArgs, bool isMine) { continue; } glm::vec3 position = palm.getPosition(); - glPushMatrix(); - glTranslatef(position.x, position.y, position.z); - DependencyManager::get()->renderSphere(PALM_COLLISION_RADIUS * _owningAvatar->getScale(), 10, 10, glm::vec3(0.0f, 1.0f, 0.0f)); - glPopMatrix(); + Transform transform = Transform(); + transform.setTranslation(position); + batch.setModelTransform(transform); + DependencyManager::get()->renderSphere(batch, PALM_COLLISION_RADIUS * _owningAvatar->getScale(), 10, 10, glm::vec3(0.0f, 1.0f, 0.0f)); } } if (renderArgs->_renderMode != RenderArgs::SHADOW_RENDER_MODE && Menu::getInstance()->isOptionChecked(MenuOption::DisplayHands)) { - renderHandTargets(isMine); + renderHandTargets(renderArgs, isMine); } - glEnable(GL_DEPTH_TEST); - glEnable(GL_RESCALE_NORMAL); -} - -void Hand::renderHandTargets(bool isMine) { - glPushMatrix(); +} +void Hand::renderHandTargets(RenderArgs* renderArgs, bool isMine) { + gpu::Batch& batch = *renderArgs->_batch; const float avatarScale = DependencyManager::get()->getMyAvatar()->getScale(); const float alpha = 1.0f; const glm::vec3 handColor(1.0, 0.0, 0.0); // Color the hand targets red to be different than skin - - glEnable(GL_DEPTH_TEST); - glDepthMask(GL_TRUE); if (isMine && Menu::getInstance()->isOptionChecked(MenuOption::DisplayHandTargets)) { for (size_t i = 0; i < getNumPalms(); ++i) { @@ -145,12 +140,12 @@ void Hand::renderHandTargets(bool isMine) { continue; } glm::vec3 targetPosition = palm.getTipPosition(); - glPushMatrix(); - glTranslatef(targetPosition.x, targetPosition.y, targetPosition.z); + Transform transform = Transform(); + transform.setTranslation(targetPosition); + batch.setModelTransform(transform); const float collisionRadius = 0.05f; - DependencyManager::get()->renderSphere(collisionRadius, 10, 10, glm::vec4(0.5f,0.5f,0.5f, alpha), false); - glPopMatrix(); + DependencyManager::get()->renderSphere(batch, collisionRadius, 10, 10, glm::vec4(0.5f,0.5f,0.5f, alpha), false); } } @@ -165,22 +160,19 @@ void Hand::renderHandTargets(bool isMine) { if (palm.isActive()) { glm::vec3 tip = palm.getTipPosition(); glm::vec3 root = palm.getPosition(); - - Avatar::renderJointConnectingCone(root, tip, PALM_FINGER_ROD_RADIUS, PALM_FINGER_ROD_RADIUS, glm::vec4(handColor.r, handColor.g, handColor.b, alpha)); + Transform transform = Transform(); + transform.setTranslation(glm::vec3()); + batch.setModelTransform(transform); + Avatar::renderJointConnectingCone(batch, root, tip, PALM_FINGER_ROD_RADIUS, PALM_FINGER_ROD_RADIUS, glm::vec4(handColor.r, handColor.g, handColor.b, alpha)); // Render sphere at palm/finger root glm::vec3 offsetFromPalm = root + palm.getNormal() * PALM_DISK_THICKNESS; - Avatar::renderJointConnectingCone(root, offsetFromPalm, PALM_DISK_RADIUS, 0.0f, glm::vec4(handColor.r, handColor.g, handColor.b, alpha)); - glPushMatrix(); - glTranslatef(root.x, root.y, root.z); - DependencyManager::get()->renderSphere(PALM_BALL_RADIUS, 20.0f, 20.0f, glm::vec4(handColor.r, handColor.g, handColor.b, alpha)); - glPopMatrix(); + Avatar::renderJointConnectingCone(batch, root, offsetFromPalm, PALM_DISK_RADIUS, 0.0f, glm::vec4(handColor.r, handColor.g, handColor.b, alpha)); + transform = Transform(); + transform.setTranslation(root); + batch.setModelTransform(transform); + DependencyManager::get()->renderSphere(batch, PALM_BALL_RADIUS, 20.0f, 20.0f, glm::vec4(handColor.r, handColor.g, handColor.b, alpha)); } } - - glDepthMask(GL_TRUE); - glEnable(GL_DEPTH_TEST); - - glPopMatrix(); } diff --git a/interface/src/avatar/Hand.h b/interface/src/avatar/Hand.h index cb35497960..f6991c5a55 100644 --- a/interface/src/avatar/Hand.h +++ b/interface/src/avatar/Hand.h @@ -56,7 +56,7 @@ private: Avatar* _owningAvatar; - void renderHandTargets(bool isMine); + void renderHandTargets(RenderArgs* renderArgs, bool isMine); }; #endif // hifi_Hand_h diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 4b140e0569..3c691c49d4 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1212,9 +1212,9 @@ void MyAvatar::renderBody(RenderArgs* renderArgs, ViewFrustum* renderFrustum, bo if (shouldRenderHead(renderArgs)) { getHead()->render(renderArgs, 1.0f, renderFrustum, postLighting); } - if (postLighting) { +// if (postLighting) { getHand()->render(renderArgs, true); - } +// } } void MyAvatar::setVisibleInSceneIfReady(Model* model, render::ScenePointer scene, bool visible) { @@ -1587,7 +1587,7 @@ void MyAvatar::updateMotionBehavior() { } //Renders sixense laser pointers for UI selection with controllers -void MyAvatar::renderLaserPointers() { +void MyAvatar::renderLaserPointers(gpu::Batch& batch) { const float PALM_TIP_ROD_RADIUS = 0.002f; //If the Oculus is enabled, we will draw a blue cursor ray @@ -1600,8 +1600,10 @@ void MyAvatar::renderLaserPointers() { //Scale the root vector with the avatar scale scaleVectorRelativeToPosition(root); - - Avatar::renderJointConnectingCone(root, tip, PALM_TIP_ROD_RADIUS, PALM_TIP_ROD_RADIUS, glm::vec4(0, 1, 1, 1)); + Transform transform = Transform(); + transform.setTranslation(glm::vec3()); + batch.setModelTransform(transform); + Avatar::renderJointConnectingCone(batch, root, tip, PALM_TIP_ROD_RADIUS, PALM_TIP_ROD_RADIUS, glm::vec4(0, 1, 1, 1)); } } } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 2fea09ee27..ce5d2148a8 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -157,7 +157,7 @@ public: bool allowDuplicates = false, bool useSaved = true); /// Renders a laser pointer for UI picking - void renderLaserPointers(); + void renderLaserPointers(gpu::Batch& batch); glm::vec3 getLaserPointerTipPosition(const PalmData* palm); const RecorderPointer getRecorder() const { return _recorder; } diff --git a/interface/src/avatar/SkeletonModel.cpp b/interface/src/avatar/SkeletonModel.cpp index 2f66e84b50..8095ba9ac4 100644 --- a/interface/src/avatar/SkeletonModel.cpp +++ b/interface/src/avatar/SkeletonModel.cpp @@ -805,7 +805,7 @@ void SkeletonModel::renderBoundingCollisionShapes(float alpha) { // draw a green cylinder between the two points glm::vec3 origin(0.0f); - Avatar::renderJointConnectingCone( origin, axis, _boundingShape.getRadius(), _boundingShape.getRadius(), glm::vec4(0.6f, 0.8f, 0.6f, alpha)); +// Avatar::renderJointConnectingCone( origin, axis, _boundingShape.getRadius(), _boundingShape.getRadius(), glm::vec4(0.6f, 0.8f, 0.6f, alpha)); glPopMatrix(); } From 8129d0eb1ff958e86b77de51fd048a1e8965b8ae Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 1 Jul 2015 15:12:37 -0700 Subject: [PATCH 2/5] hydra lasers are now rendering again --- interface/src/avatar/Avatar.cpp | 2 +- interface/src/avatar/SkeletonModel.cpp | 14 ++++++-------- interface/src/avatar/SkeletonModel.h | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 384b2f0c86..f011e9f5de 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -449,7 +449,7 @@ void Avatar::render(RenderArgs* renderArgs, const glm::vec3& cameraPosition, boo getHead()->getFaceModel().renderJointCollisionShapes(0.7f); } if (renderBounding && shouldRenderHead(renderArgs)) { - _skeletonModel.renderBoundingCollisionShapes(0.7f); + _skeletonModel.renderBoundingCollisionShapes(*renderArgs->_batch, 0.7f); } // If this is the avatar being looked at, render a little ball above their head diff --git a/interface/src/avatar/SkeletonModel.cpp b/interface/src/avatar/SkeletonModel.cpp index 8095ba9ac4..20d458195d 100644 --- a/interface/src/avatar/SkeletonModel.cpp +++ b/interface/src/avatar/SkeletonModel.cpp @@ -776,24 +776,24 @@ void SkeletonModel::resetShapePositionsToDefaultPose() { _boundingShape.setRotation(_rotation); } -void SkeletonModel::renderBoundingCollisionShapes(float alpha) { +void SkeletonModel::renderBoundingCollisionShapes(gpu::Batch& batch, float alpha) { const int BALL_SUBDIVISIONS = 10; if (_shapes.isEmpty()) { // the bounding shape has not been propery computed // so no need to render it return; } - glPushMatrix(); - Application::getInstance()->loadTranslatedViewMatrix(_translation); // draw a blue sphere at the capsule endpoint glm::vec3 endPoint; _boundingShape.getEndPoint(endPoint); endPoint = endPoint - _translation; - glTranslatef(endPoint.x, endPoint.y, endPoint.z); + Transform transform = Transform(); + transform.setTranslation(endPoint); + batch.setModelTransform(transform); auto geometryCache = DependencyManager::get(); - geometryCache->renderSphere(_boundingShape.getRadius(), BALL_SUBDIVISIONS, BALL_SUBDIVISIONS, glm::vec4(0.6f, 0.6f, 0.8f, alpha)); + geometryCache->renderSphere(batch, _boundingShape.getRadius(), BALL_SUBDIVISIONS, BALL_SUBDIVISIONS, glm::vec4(0.6f, 0.6f, 0.8f, alpha)); // draw a yellow sphere at the capsule startpoint glm::vec3 startPoint; @@ -805,9 +805,7 @@ void SkeletonModel::renderBoundingCollisionShapes(float alpha) { // draw a green cylinder between the two points glm::vec3 origin(0.0f); -// Avatar::renderJointConnectingCone( origin, axis, _boundingShape.getRadius(), _boundingShape.getRadius(), glm::vec4(0.6f, 0.8f, 0.6f, alpha)); - - glPopMatrix(); + Avatar::renderJointConnectingCone(batch, origin, axis, _boundingShape.getRadius(), _boundingShape.getRadius(), glm::vec4(0.6f, 0.8f, 0.6f, alpha)); } bool SkeletonModel::hasSkeleton() { diff --git a/interface/src/avatar/SkeletonModel.h b/interface/src/avatar/SkeletonModel.h index bffdc58659..755aa3dfee 100644 --- a/interface/src/avatar/SkeletonModel.h +++ b/interface/src/avatar/SkeletonModel.h @@ -101,7 +101,7 @@ public: const glm::vec3& getStandingOffset() const { return _standingOffset; } void computeBoundingShape(const FBXGeometry& geometry); - void renderBoundingCollisionShapes(float alpha); + void renderBoundingCollisionShapes(gpu::Batch& batch, float alpha); float getBoundingShapeRadius() const { return _boundingShape.getRadius(); } const CapsuleShape& getBoundingShape() const { return _boundingShape; } const glm::vec3 getBoundingShapeOffset() const { return _boundingShapeLocalOffset; } From 50a7332a5a47d0a8956968a509bccf5068759185 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 1 Jul 2015 15:14:53 -0700 Subject: [PATCH 3/5] removed accidental lineRotations.js file commit --- examples/lineRotations.js | 134 -------------------------------------- 1 file changed, 134 deletions(-) delete mode 100644 examples/lineRotations.js diff --git a/examples/lineRotations.js b/examples/lineRotations.js deleted file mode 100644 index e60be82770..0000000000 --- a/examples/lineRotations.js +++ /dev/null @@ -1,134 +0,0 @@ -// -// RenderableQuadEntityItem.cpp -// libraries/entities-renderer/src/ -// -// Created by Eric Levin on 6/22/15 -// 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 - -#include -#include - -#include -#include - -#include "RenderableQuadEntityItem.h" - - - - - - - -EntityItemPointer RenderableQuadEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { - return EntityItemPointer(new RenderableQuadEntityItem(entityID, properties)); -} - -RenderableQuadEntityItem::RenderableQuadEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : -QuadEntityItem(entityItemID, properties) { - _numVertices = 0; - -} - -gpu::PipelinePointer RenderableQuadEntityItem::_pipeline; -gpu::Stream::FormatPointer RenderableQuadEntityItem::_format; - -void RenderableQuadEntityItem::createPipeline() { - static const int NORMAL_OFFSET = 12; - static const int COLOR_OFFSET = 24; - _format.reset(new gpu::Stream::Format()); - _format->setAttribute(gpu::Stream::POSITION, 0, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ), 0); - _format->setAttribute(gpu::Stream::NORMAL, 0, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ), NORMAL_OFFSET); - _format->setAttribute(gpu::Stream::COLOR, 0, gpu::Element(gpu::VEC4, gpu::UINT8, gpu::RGBA), COLOR_OFFSET); - - auto VS = DependencyManager::get()->getSimpleVertexShader(); - auto PS = DependencyManager::get()->getSimplePixelShader(); - gpu::ShaderPointer program = gpu::ShaderPointer(gpu::Shader::createProgram(VS, PS)); - - gpu::Shader::BindingSet slotBindings; - gpu::Shader::makeProgram(*program, slotBindings); - - gpu::StatePointer state = gpu::StatePointer(new gpu::State()); - //state->setCullMode(gpu::State::CULL_BACK); - state->setDepthTest(true, true, gpu::LESS_EQUAL); - state->setBlendFunction(false, - gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::INV_SRC_ALPHA, - gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); - _pipeline = gpu::PipelinePointer(gpu::Pipeline::create(program, state)); -} -int generateColor() { - float c1 = static_cast (rand()) / static_cast (RAND_MAX); - float c2 = static_cast (rand()) / static_cast (RAND_MAX); - float c3 = static_cast (rand()) / static_cast (RAND_MAX); - return ((int(c1 * 255.0f) & 0xFF)) | - ((int(c2 * 255.0f) & 0xFF) << 8) | - ((int(c3 * 255.0f) & 0xFF) << 16) | - ((int(255.0f) & 0xFF) << 24); -} - -void RenderableQuadEntityItem::updateGeometry() { - QReadLocker lock(&_quadReadWriteLock); - int compactColor = generateColor(); - _numVertices = 0; - _verticesBuffer.reset(new gpu::Buffer()); - int vertexIndex = 0; - for (int i = 0; i < _normals.size(); i++) { - compactColor = generateColor(); - _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_vertices.at(vertexIndex)); - vertexIndex++; - _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_normals.at(i)); - _verticesBuffer->append(sizeof(int), (gpu::Byte*)&compactColor); - _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_vertices.at(vertexIndex)); - vertexIndex++; - _verticesBuffer->append(sizeof(glm::vec3), (const gpu::Byte*)&_normals.at(i)); - _verticesBuffer->append(sizeof(int), (gpu::Byte*)&compactColor); - - _numVertices +=2; - } - _pointsChanged = false; - - - -} - - - -void RenderableQuadEntityItem::render(RenderArgs* args) { - if (_points.size() < 2 || _vertices.size() != _normals.size() * 2) { - return; - } - - if (!_pipeline) { - createPipeline(); - } - - PerformanceTimer perfTimer("RenderableQuadEntityItem::render"); - Q_ASSERT(getType() == EntityTypes::Quad); - - Q_ASSERT(args->_batch); - if (_pointsChanged) { - updateGeometry(); - } - - - gpu::Batch& batch = *args->_batch; - Transform transform = Transform(); - transform.setTranslation(getPosition()); - transform.setRotation(getRotation()); - batch.setModelTransform(transform); - - - batch.setPipeline(_pipeline); - - batch.setInputFormat(_format); - batch.setInputBuffer(0, _verticesBuffer, 0, _format->getChannels().at(0)._stride); - - batch.draw(gpu::TRIANGLE_STRIP, _numVertices, 0); - - RenderableDebugableEntityItem::render(this, args); -}; From f49f368ec3ca565ea1709f89a90d030589a24c74 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 1 Jul 2015 15:16:34 -0700 Subject: [PATCH 4/5] removed dead commented out code --- interface/src/avatar/MyAvatar.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 3c691c49d4..de524656ec 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1212,9 +1212,7 @@ void MyAvatar::renderBody(RenderArgs* renderArgs, ViewFrustum* renderFrustum, bo if (shouldRenderHead(renderArgs)) { getHead()->render(renderArgs, 1.0f, renderFrustum, postLighting); } -// if (postLighting) { - getHand()->render(renderArgs, true); -// } + getHand()->render(renderArgs, true); } void MyAvatar::setVisibleInSceneIfReady(Model* model, render::ScenePointer scene, bool visible) { From a24df5c02ff2b0983d7a736385951d029816d39b Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 1 Jul 2015 15:28:48 -0700 Subject: [PATCH 5/5] added postLighting check back for rendering avatar Hands --- interface/src/avatar/Avatar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index f011e9f5de..6ff8fb52df 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -575,9 +575,9 @@ void Avatar::renderBody(RenderArgs* renderArgs, ViewFrustum* renderFrustum, bool return; } -// if (postLighting) { + if (postLighting) { getHand()->render(renderArgs, false); -// } + } } getHead()->render(renderArgs, 1.0f, renderFrustum, postLighting); }