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 | _appliedBlendNumber(0), | 82 | _appliedBlendNumber(0), |
| 83 | _calculatedMeshBoxesValid(false), | 83 | _calculatedMeshBoxesValid(false), |
| 84 | _calculatedMeshTrianglesValid(false), | 84 | _calculatedMeshTrianglesValid(false), |
| 85 | _meshGroupsKnown(false) { | 85 | _meshGroupsKnown(false), |
| 86 | _renderCollisionHull(false) { | ||
| 86 | 87 | ||
| 87 | // we may have been created in the network thread, but we live in the main thread | 88 | // we may have been created in the network thread, but we live in the main thread |
| 88 | if (_viewState) { | 89 | if (_viewState) { |
| @@ -664,7 +665,7 @@ bool Model::render(float alpha, RenderMode mode, RenderArgs* args) { · 575 unmodified lines | |||
| 664 | renderSetup(args); | 665 | renderSetup(args); |
| 665 | return renderCore(alpha, mode, args); | 666 | return renderCore(alpha, mode, args); |
| 666 | } | 667 | } |
| 667 | 668 | ||
| 668 | bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { | 669 | bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { |
| 669 | PROFILE_RANGE(__FUNCTION__); | 670 | PROFILE_RANGE(__FUNCTION__); |
| 670 | if (!_viewState) { | 671 | if (!_viewState) { |
| @@ -680,7 +681,11 @@ bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { · 9 unmodified lines | |||
| 680 | // Setup the projection matrix | 681 | // Setup the projection matrix |
| 681 | if (args && args->_viewFrustum) { | 682 | if (args && args->_viewFrustum) { |
| 682 | glm::mat4 proj; | 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 | batch.setProjectionTransform(proj); | 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 | if (_transforms.empty()) { | 693 | if (_transforms.empty()) { |
| 689 | _transforms.push_back(Transform()); | 694 | _transforms.push_back(Transform()); |
| 690 | } | 695 | } |
| 696 | |||
| 691 | _transforms[0] = _viewState->getViewTransform(); | 697 | _transforms[0] = _viewState->getViewTransform(); |
| 698 | |||
| 692 | // apply entity translation offset to the viewTransform in one go (it's a preTranslate because viewTransform goes from world to eye space) | 699 | // apply entity translation offset to the viewTransform in one go (it's a preTranslate because viewTransform goes from world to eye space) |
| 693 | _transforms[0].preTranslate(-_translation); | 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 | GLenum buffers[3]; | 733 | GLenum buffers[3]; |
| 727 | int bufferCount = 0; | 734 | int bufferCount = 0; |
| 735 | |||
| 728 | // if (mode == RenderArgs::DEFAULT_RENDER_MODE || mode == RenderArgs::DIFFUSE_RENDER_MODE) { | 736 | // if (mode == RenderArgs::DEFAULT_RENDER_MODE || mode == RenderArgs::DIFFUSE_RENDER_MODE) { |
| 729 | if (mode != RenderArgs::SHADOW_RENDER_MODE) { | 737 | if (mode != RenderArgs::SHADOW_RENDER_MODE) { |
| 730 | buffers[bufferCount++] = GL_COLOR_ATTACHMENT0; | 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 | // Capture the view matrix once for the rendering of this model | 1745 | // Capture the view matrix once for the rendering of this model |
| 1738 | if (_transforms.empty()) { | 1746 | if (_transforms.empty()) { |
| 1739 | _transforms.push_back(Transform()); | 1747 | _transforms.push_back(Transform()); |
| 1740 | } | 1748 | } |
| 1749 | |||
| 1741 | _transforms[0] = _viewState->getViewTransform(); | 1750 | _transforms[0] = _viewState->getViewTransform(); |
| 1751 | |||
| 1742 | _transforms[0].preTranslate(-_translation); | 1752 | _transforms[0].preTranslate(-_translation); |
| 1753 | |||
| 1743 | batch.setViewTransform(_transforms[0]); | 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 | if (args) { | 1775 | if (args) { |
| 1765 | glm::mat4 proj; | 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 | gpu::Batch batch; | 1782 | gpu::Batch batch; |
| 1768 | batch.setProjectionTransform(proj); | 1783 | batch.setProjectionTransform(proj); |
| 1769 | backend.render(batch); | 1784 | backend.render(batch); |
| @@ -1953,6 +1968,23 @@ bool Model::renderInScene(float alpha, RenderArgs* args) { · 183 unmodified lines | |||
| 1953 | if (_meshStates.isEmpty()) { | 1968 | if (_meshStates.isEmpty()) { |
| 1954 | return false; | 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 | renderSetup(args); | 1988 | renderSetup(args); |
| 1957 | _modelsInScene.push_back(this); | 1989 | _modelsInScene.push_back(this); |
| 1958 | return true; | 1990 | return true; |
| @@ -2343,7 +2375,8 @@ int Model::renderMeshesForModelsInScene(gpu::Batch& batch, RenderMode mode, bool · 384 unmodified lines | |||
| 2343 | pickPrograms(batch, mode, translucent, alphaThreshold, hasLightmap, hasTangents, hasSpecular, isSkinned, args, locations); | 2375 | pickPrograms(batch, mode, translucent, alphaThreshold, hasLightmap, hasTangents, hasSpecular, isSkinned, args, locations); |
| 2344 | pickProgramsNeeded = false; | 2376 | pickProgramsNeeded = false; |
| 2345 | } | 2377 | } |
| 2346 | model->setupBatchTransform(batch); | 2378 | |
| 2379 | model->setupBatchTransform(batch, args); | ||
| 2347 | meshPartsRendered += model->renderMeshesFromList(list, batch, mode, translucent, alphaThreshold, args, locations); | 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 | int Model::renderMeshesFromList(QVector<int>& list, gpu::Batch& batch, RenderMode mode, bool translucent, float alphaThreshold, RenderArgs* args, | 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 | PROFILE_RANGE(__FUNCTION__); | 2425 | PROFILE_RANGE(__FUNCTION__); |
| 2393 | 2426 | ||
| 2394 | auto textureCache = DependencyManager::get<TextureCache>(); | 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 | if (args->_viewFrustum) { | 2462 | if (args->_viewFrustum) { |
| 2430 | 2463 | ||
| 2431 | shouldRender = forceRenderSomeMeshes || | 2464 | shouldRender = forceRenderMeshes || |
| 2432 | args->_viewFrustum->boxInFrustum(_calculatedMeshBoxes.at(i)) != ViewFrustum::OUTSIDE; | 2465 | args->_viewFrustum->boxInFrustum(_calculatedMeshBoxes.at(i)) != ViewFrustum::OUTSIDE; |
| 2433 | 2466 | ||
| 2434 | if (shouldRender && !forceRenderSomeMeshes) { | 2467 | if (shouldRender && !forceRenderMeshes) { |
| 2435 | float distance = args->_viewFrustum->distanceToCamera(_calculatedMeshBoxes.at(i).calcCenter()); | 2468 | float distance = args->_viewFrustum->distanceToCamera(_calculatedMeshBoxes.at(i).calcCenter()); |
| 2436 | shouldRender = !_viewState ? false : _viewState->shouldRenderMesh(_calculatedMeshBoxes.at(i).getLargestDimension(), | 2469 | shouldRender = !_viewState ? false : _viewState->shouldRenderMesh(_calculatedMeshBoxes.at(i).getLargestDimension(), |
| 2437 | distance); | 2470 | distance); |