Showing the changes to libraries/render-utils/src/Model.cpp (1 of 72 files). Show all
Unified · Split
| @@ -82,7 +82,8 @@ Model::Model(QObject* parent) : · 81 unmodified lines | ||
| 82 | 82 | _appliedBlendNumber(0), |
| 83 | 83 | _calculatedMeshBoxesValid(false), |
| 84 | 84 | _calculatedMeshTrianglesValid(false), |
| 85 | − _meshGroupsKnown(false) { | |
| 85 | + _meshGroupsKnown(false), | |
| 86 | + _renderCollisionHull(false) { | |
| 86 | 87 | |
| 87 | 88 | // we may have been created in the network thread, but we live in the main thread |
| 88 | 89 | if (_viewState) { |
| @@ -664,7 +665,7 @@ bool Model::render(float alpha, RenderMode mode, RenderArgs* args) { · 575 unmodified lines | ||
| 664 | 665 | renderSetup(args); |
| 665 | 666 | return renderCore(alpha, mode, args); |
| 666 | 667 | } |
| 667 | − | |
| 668 | + | |
| 668 | 669 | bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { |
| 669 | 670 | PROFILE_RANGE(__FUNCTION__); |
| 670 | 671 | if (!_viewState) { |
| @@ -680,7 +681,11 @@ bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { · 9 unmodified lines | ||
| 680 | 681 | // Setup the projection matrix |
| 681 | 682 | if (args && args->_viewFrustum) { |
| 682 | 683 | glm::mat4 proj; |
| 683 | − args->_viewFrustum->evalProjectionMatrix(proj); | |
| 684 | + if (mode == RenderArgs::SHADOW_RENDER_MODE) { | |
| 685 | + args->_viewFrustum->evalProjectionMatrix(proj); | |
| 686 | + } else { | |
| 687 | + args->_viewFrustum->evalProjectionMatrix(proj); | |
| 688 | + } | |
| 684 | 689 | batch.setProjectionTransform(proj); |
| 685 | 690 | } |
| 686 | 691 | |
| @@ -688,7 +693,9 @@ bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { · 1 unmodified line | ||
| 688 | 693 | if (_transforms.empty()) { |
| 689 | 694 | _transforms.push_back(Transform()); |
| 690 | 695 | } |
| 696 | + | |
| 691 | 697 | _transforms[0] = _viewState->getViewTransform(); |
| 698 | + | |
| 692 | 699 | // apply entity translation offset to the viewTransform in one go (it's a preTranslate because viewTransform goes from world to eye space) |
| 693 | 700 | _transforms[0].preTranslate(-_translation); |
| 694 | 701 | |
| @@ -725,6 +732,7 @@ bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { · 30 unmodified lines | ||
| 725 | 732 | { |
| 726 | 733 | GLenum buffers[3]; |
| 727 | 734 | int bufferCount = 0; |
| 735 | + | |
| 728 | 736 | // if (mode == RenderArgs::DEFAULT_RENDER_MODE || mode == RenderArgs::DIFFUSE_RENDER_MODE) { |
| 729 | 737 | if (mode != RenderArgs::SHADOW_RENDER_MODE) { |
| 730 | 738 | buffers[bufferCount++] = GL_COLOR_ATTACHMENT0; |
| @@ -1732,14 +1740,17 @@ void Model::startScene(RenderArgs::RenderSide renderSide) { · 1001 unmodified lines | ||
| 1732 | 1740 | } |
| 1733 | 1741 | } |
| 1734 | 1742 | |
| 1735 | −void Model::setupBatchTransform(gpu::Batch& batch) { | |
| 1743 | +void Model::setupBatchTransform(gpu::Batch& batch, RenderArgs* args) { | |
| 1736 | 1744 | |
| 1737 | 1745 | // Capture the view matrix once for the rendering of this model |
| 1738 | 1746 | if (_transforms.empty()) { |
| 1739 | 1747 | _transforms.push_back(Transform()); |
| 1740 | 1748 | } |
| 1749 | + | |
| 1741 | 1750 | _transforms[0] = _viewState->getViewTransform(); |
| 1751 | + | |
| 1742 | 1752 | _transforms[0].preTranslate(-_translation); |
| 1753 | + | |
| 1743 | 1754 | batch.setViewTransform(_transforms[0]); |
| 1744 | 1755 | } |
| 1745 | 1756 | |
| @@ -1763,7 +1774,11 @@ void Model::endScene(RenderMode mode, RenderArgs* args) { · 17 unmodified lines | ||
| 1763 | 1774 | |
| 1764 | 1775 | if (args) { |
| 1765 | 1776 | glm::mat4 proj; |
| 1766 | − args->_viewFrustum->evalProjectionMatrix(proj); | |
| 1777 | + if (mode == RenderArgs::SHADOW_RENDER_MODE) { | |
| 1778 | + args->_viewFrustum->evalProjectionMatrix(proj); | |
| 1779 | + } else { | |
| 1780 | + args->_viewFrustum->evalProjectionMatrix(proj); | |
| 1781 | + } | |
| 1767 | 1782 | gpu::Batch batch; |
| 1768 | 1783 | batch.setProjectionTransform(proj); |
| 1769 | 1784 | backend.render(batch); |
| @@ -1953,6 +1968,23 @@ bool Model::renderInScene(float alpha, RenderArgs* args) { · 183 unmodified lines | ||
| 1953 | 1968 | if (_meshStates.isEmpty()) { |
| 1954 | 1969 | return false; |
| 1955 | 1970 | } |
| 1971 | + | |
| 1972 | + if (args->_renderMode == RenderArgs::DEBUG_RENDER_MODE && _renderCollisionHull == false) { | |
| 1973 | + // turning collision hull rendering on | |
| 1974 | + _renderCollisionHull = true; | |
| 1975 | + _nextGeometry = _collisionGeometry; | |
| 1976 | + _saveNonCollisionGeometry = _geometry; | |
| 1977 | + updateGeometry(); | |
| 1978 | + simulate(0.0, true); | |
| 1979 | + } else if (args->_renderMode != RenderArgs::DEBUG_RENDER_MODE && _renderCollisionHull == true) { | |
| 1980 | + // turning collision hull rendering off | |
| 1981 | + _renderCollisionHull = false; | |
| 1982 | + _nextGeometry = _saveNonCollisionGeometry; | |
| 1983 | + _saveNonCollisionGeometry.clear(); | |
| 1984 | + updateGeometry(); | |
| 1985 | + simulate(0.0, true); | |
| 1986 | + } | |
| 1987 | + | |
| 1956 | 1988 | renderSetup(args); |
| 1957 | 1989 | _modelsInScene.push_back(this); |
| 1958 | 1990 | return true; |
| @@ -2343,7 +2375,8 @@ int Model::renderMeshesForModelsInScene(gpu::Batch& batch, RenderMode mode, bool · 384 unmodified lines | ||
| 2343 | 2375 | pickPrograms(batch, mode, translucent, alphaThreshold, hasLightmap, hasTangents, hasSpecular, isSkinned, args, locations); |
| 2344 | 2376 | pickProgramsNeeded = false; |
| 2345 | 2377 | } |
| 2346 | − model->setupBatchTransform(batch); | |
| 2378 | + | |
| 2379 | + model->setupBatchTransform(batch, args); | |
| 2347 | 2380 | meshPartsRendered += model->renderMeshesFromList(list, batch, mode, translucent, alphaThreshold, args, locations); |
| 2348 | 2381 | } |
| 2349 | 2382 | } |
| @@ -2388,7 +2421,7 @@ int Model::renderMeshes(gpu::Batch& batch, RenderMode mode, bool translucent, fl · 38 unmodified lines | ||
| 2388 | 2421 | |
| 2389 | 2422 | |
| 2390 | 2423 | int Model::renderMeshesFromList(QVector<int>& list, gpu::Batch& batch, RenderMode mode, bool translucent, float alphaThreshold, RenderArgs* args, |
| 2391 | − Locations* locations, bool forceRenderSomeMeshes) { | |
| 2424 | + Locations* locations, bool forceRenderMeshes) { | |
| 2392 | 2425 | PROFILE_RANGE(__FUNCTION__); |
| 2393 | 2426 | |
| 2394 | 2427 | auto textureCache = DependencyManager::get<TextureCache>(); |
| @@ -2428,10 +2461,10 @@ int Model::renderMeshesFromList(QVector<int>& list, gpu::Batch& batch, RenderMod · 33 unmodified lines | ||
| 2428 | 2461 | |
| 2429 | 2462 | if (args->_viewFrustum) { |
| 2430 | 2463 | |
| 2431 | − shouldRender = forceRenderSomeMeshes || | |
| 2464 | + shouldRender = forceRenderMeshes || | |
| 2432 | 2465 | args->_viewFrustum->boxInFrustum(_calculatedMeshBoxes.at(i)) != ViewFrustum::OUTSIDE; |
| 2433 | 2466 | |
| 2434 | − if (shouldRender && !forceRenderSomeMeshes) { | |
| 2467 | + if (shouldRender && !forceRenderMeshes) { | |
| 2435 | 2468 | float distance = args->_viewFrustum->distanceToCamera(_calculatedMeshBoxes.at(i).calcCenter()); |
| 2436 | 2469 | shouldRender = !_viewState ? false : _viewState->shouldRenderMesh(_calculatedMeshBoxes.at(i).getLargestDimension(), |
| 2437 | 2470 | distance); |