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
8282 _appliedBlendNumber(0),
8383 _calculatedMeshBoxesValid(false),
8484 _calculatedMeshTrianglesValid(false),
85− _meshGroupsKnown(false) {
85+ _meshGroupsKnown(false),
86+ _renderCollisionHull(false) {
8687
8788 // we may have been created in the network thread, but we live in the main thread
8889 if (_viewState) {
@@ -664,7 +665,7 @@ bool Model::render(float alpha, RenderMode mode, RenderArgs* args) { · 575 unmodified lines
664665 renderSetup(args);
665666 return renderCore(alpha, mode, args);
666667 }
667−
668+
668669 bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) {
669670 PROFILE_RANGE(__FUNCTION__);
670671 if (!_viewState) {
@@ -680,7 +681,11 @@ bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { · 9 unmodified lines
680681 // Setup the projection matrix
681682 if (args && args->_viewFrustum) {
682683 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+ }
684689 batch.setProjectionTransform(proj);
685690 }
686691
@@ -688,7 +693,9 @@ bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { · 1 unmodified line
688693 if (_transforms.empty()) {
689694 _transforms.push_back(Transform());
690695 }
696+
691697 _transforms[0] = _viewState->getViewTransform();
698+
692699 // apply entity translation offset to the viewTransform in one go (it's a preTranslate because viewTransform goes from world to eye space)
693700 _transforms[0].preTranslate(-_translation);
694701
@@ -725,6 +732,7 @@ bool Model::renderCore(float alpha, RenderMode mode, RenderArgs* args) { · 30 unmodified lines
725732 {
726733 GLenum buffers[3];
727734 int bufferCount = 0;
735+
728736 // if (mode == RenderArgs::DEFAULT_RENDER_MODE || mode == RenderArgs::DIFFUSE_RENDER_MODE) {
729737 if (mode != RenderArgs::SHADOW_RENDER_MODE) {
730738 buffers[bufferCount++] = GL_COLOR_ATTACHMENT0;
@@ -1732,14 +1740,17 @@ void Model::startScene(RenderArgs::RenderSide renderSide) { · 1001 unmodified lines
17321740 }
17331741 }
17341742
1735−void Model::setupBatchTransform(gpu::Batch& batch) {
1743+void Model::setupBatchTransform(gpu::Batch& batch, RenderArgs* args) {
17361744
17371745 // Capture the view matrix once for the rendering of this model
17381746 if (_transforms.empty()) {
17391747 _transforms.push_back(Transform());
17401748 }
1749+
17411750 _transforms[0] = _viewState->getViewTransform();
1751+
17421752 _transforms[0].preTranslate(-_translation);
1753+
17431754 batch.setViewTransform(_transforms[0]);
17441755 }
17451756
@@ -1763,7 +1774,11 @@ void Model::endScene(RenderMode mode, RenderArgs* args) { · 17 unmodified lines
17631774
17641775 if (args) {
17651776 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+ }
17671782 gpu::Batch batch;
17681783 batch.setProjectionTransform(proj);
17691784 backend.render(batch);
@@ -1953,6 +1968,23 @@ bool Model::renderInScene(float alpha, RenderArgs* args) { · 183 unmodified lines
19531968 if (_meshStates.isEmpty()) {
19541969 return false;
19551970 }
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+
19561988 renderSetup(args);
19571989 _modelsInScene.push_back(this);
19581990 return true;
@@ -2343,7 +2375,8 @@ int Model::renderMeshesForModelsInScene(gpu::Batch& batch, RenderMode mode, bool · 384 unmodified lines
23432375 pickPrograms(batch, mode, translucent, alphaThreshold, hasLightmap, hasTangents, hasSpecular, isSkinned, args, locations);
23442376 pickProgramsNeeded = false;
23452377 }
2346− model->setupBatchTransform(batch);
2378+
2379+ model->setupBatchTransform(batch, args);
23472380 meshPartsRendered += model->renderMeshesFromList(list, batch, mode, translucent, alphaThreshold, args, locations);
23482381 }
23492382 }
@@ -2388,7 +2421,7 @@ int Model::renderMeshes(gpu::Batch& batch, RenderMode mode, bool translucent, fl · 38 unmodified lines
23882421
23892422
23902423 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) {
23922425 PROFILE_RANGE(__FUNCTION__);
23932426
23942427 auto textureCache = DependencyManager::get<TextureCache>();
@@ -2428,10 +2461,10 @@ int Model::renderMeshesFromList(QVector<int>& list, gpu::Batch& batch, RenderMod · 33 unmodified lines
24282461
24292462 if (args->_viewFrustum) {
24302463
2431− shouldRender = forceRenderSomeMeshes ||
2464+ shouldRender = forceRenderMeshes ||
24322465 args->_viewFrustum->boxInFrustum(_calculatedMeshBoxes.at(i)) != ViewFrustum::OUTSIDE;
24332466
2434− if (shouldRender && !forceRenderSomeMeshes) {
2467+ if (shouldRender && !forceRenderMeshes) {
24352468 float distance = args->_viewFrustum->distanceToCamera(_calculatedMeshBoxes.at(i).calcCenter());
24362469 shouldRender = !_viewState ? false : _viewState->shouldRenderMesh(_calculatedMeshBoxes.at(i).getLargestDimension(),
24372470 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