History

MErging with origin/orange, brinign the fix for shadows

Sam Gateau committed 11 years ago

Commit 00817ab2 parents 3f581d0 17743c672 files · +1895 −1767Browse files

Showing the changes to libraries/render-utils/src/Model.cpp (1 of 72 files). Show all

Unified · Split

libraries/render-utils/src/Model.cpp+42−9
@@ -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 thread88 // 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
668bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) {669bool 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 matrix681 // 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
1735void Model::setupBatchTransform(gpu::Batch& batch) {1743void Model::setupBatchTransform(gpu::Batch& batch, RenderArgs* args) {
1736 1744
1737 // Capture the view matrix once for the rendering of this model1745 // 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
2390int Model::renderMeshesFromList(QVector<int>& list, gpu::Batch& batch, RenderMode mode, bool translucent, float alphaThreshold, RenderArgs* args,2423int 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);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t