History

Don't bother using a callback to render the eye vectors; just rely on the post-lighting call to Avatar::render, like everything else. This should fix the crash that Philip was seeing (presumably due to avatars' being deleted during the draw process).

Andrzej Kapolka committed 12 years ago

Commit 9855fbc1 parent a701bce4 files · +31 −38Browse files

Unified · Split

4 files
  1. interface/src/avatar/Avatar.cpp +11 −13
  2. interface/src/avatar/Head.cpp +7 −8
  3. interface/src/avatar/Head.h +2 −4
  4. interface/src/avatar/MyAvatar.cpp +11 −13
interface/src/avatar/Avatar.cpp+11−13
@@ -520,20 +520,18 @@ void Avatar::renderBody(RenderMode renderMode, bool postLighting, float glowLeve · 519 unmodified lines
520520 renderAttachments(renderMode);
521521 }
522522 }
523− if (!postLighting) {
524− getHead()->render(1.0f, modelRenderMode);
523+ getHead()->render(1.0f, modelRenderMode, postLighting);
525524
526− if (Menu::getInstance()->isOptionChecked(MenuOption::StringHair)) {
527− // Render Hair
528− glPushMatrix();
529− glm::vec3 headPosition = getHead()->getPosition();
530− glTranslatef(headPosition.x, headPosition.y, headPosition.z);
531− const glm::quat& rotation = getHead()->getFinalOrientationInWorldFrame();
532− glm::vec3 axis = glm::axis(rotation);
533− glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z);
534− _hair.render();
535− glPopMatrix();
536− }
525+ if (!postLighting && Menu::getInstance()->isOptionChecked(MenuOption::StringHair)) {
526+ // Render Hair
527+ glPushMatrix();
528+ glm::vec3 headPosition = getHead()->getPosition();
529+ glTranslatef(headPosition.x, headPosition.y, headPosition.z);
530+ const glm::quat& rotation = getHead()->getFinalOrientationInWorldFrame();
531+ glm::vec3 axis = glm::axis(rotation);
532+ glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z);
533+ _hair.render();
534+ glPopMatrix();
537535 }
538536 }
539537
interface/src/avatar/Head.cpp+7−8
@@ -211,17 +211,16 @@ void Head::relaxLean(float deltaTime) { · 210 unmodified lines
211211 _deltaLeanForward *= relaxationFactor;
212212 }
213213
214−void Head::render(float alpha, Model::RenderMode mode) {
215− _faceModel.render(alpha, mode);
216− if (_renderLookatVectors && mode != Model::SHADOW_RENDER_MODE) {
217− Application::getInstance()->getDeferredLightingEffect()->addPostLightingRenderable(this);
214+void Head::render(float alpha, Model::RenderMode mode, bool postLighting) {
215+ if (postLighting) {
216+ if (_renderLookatVectors) {
217+ renderLookatVectors(_leftEyePosition, _rightEyePosition, getCorrectedLookAtPosition());
218+ }
219+ } else {
220+ _faceModel.render(alpha, mode);
218221 }
219222 }
220223
221−void Head::renderPostLighting() {
222− renderLookatVectors(_leftEyePosition, _rightEyePosition, getCorrectedLookAtPosition());
223−}
224−
225224 void Head::setScale (float scale) {
226225 if (_scale == scale) {
227226 return;
interface/src/avatar/Head.h+2−4
@@ -23,7 +23,6 @@ · 22 unmodified lines
2323 #include "FaceModel.h"
2424 #include "InterfaceConfig.h"
2525 #include "world.h"
26−#include "renderer/DeferredLightingEffect.h"
2726
2827 enum eyeContactTargets {
2928 LEFT_EYE,
@@ -36,15 +35,14 @@ const float EYE_EAR_GAP = 0.08f; · 6 unmodified lines
3635 class Avatar;
3736 class ProgramObject;
3837
39−class Head : public HeadData, public PostLightingRenderable {
38+class Head : public HeadData {
4039 public:
4140 Head(Avatar* owningAvatar);
4241
4342 void init();
4443 void reset();
4544 void simulate(float deltaTime, bool isMine, bool billboard = false);
46− void render(float alpha, Model::RenderMode mode);
47− virtual void renderPostLighting();
45+ void render(float alpha, Model::RenderMode mode, bool postLighting);
4846 void setScale(float scale);
4947 void setPosition(glm::vec3 position) { _position = position; }
5048 void setAverageLoudness(float averageLoudness) { _averageLoudness = averageLoudness; }
interface/src/avatar/MyAvatar.cpp+11−13
@@ -1147,20 +1147,18 @@ void MyAvatar::renderBody(RenderMode renderMode, bool postLighting, float glowLe · 1146 unmodified lines
11471147 const Camera *camera = Application::getInstance()->getCamera();
11481148 const glm::vec3 cameraPos = camera->getPosition() + (camera->getRotation() * glm::vec3(0.0f, 0.0f, 1.0f)) * camera->getDistance();
11491149 if (shouldRenderHead(cameraPos, renderMode)) {
1150− if (!postLighting) {
1151− getHead()->render(1.0f, modelRenderMode);
1150+ getHead()->render(1.0f, modelRenderMode, postLighting);
11521151
1153− if (Menu::getInstance()->isOptionChecked(MenuOption::StringHair)) {
1154− // Render Hair
1155− glPushMatrix();
1156− glm::vec3 headPosition = getHead()->getPosition();
1157− glTranslatef(headPosition.x, headPosition.y, headPosition.z);
1158− const glm::quat& rotation = getHead()->getFinalOrientationInWorldFrame();
1159− glm::vec3 axis = glm::axis(rotation);
1160− glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z);
1161− _hair.render();
1162− glPopMatrix();
1163− }
1152+ if (!postLighting && Menu::getInstance()->isOptionChecked(MenuOption::StringHair)) {
1153+ // Render Hair
1154+ glPushMatrix();
1155+ glm::vec3 headPosition = getHead()->getPosition();
1156+ glTranslatef(headPosition.x, headPosition.y, headPosition.z);
1157+ const glm::quat& rotation = getHead()->getFinalOrientationInWorldFrame();
1158+ glm::vec3 axis = glm::axis(rotation);
1159+ glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z);
1160+ _hair.render();
1161+ glPopMatrix();
11641162 }
11651163 }
11661164 if (postLighting) {