Kaydet (Commit) c726059a authored tarafından David Tardon's avatar David Tardon

tdf#97195 fix crash in diamond shape transition

The setScene() function was a hack from the beginning--it was only
introduced to avoid the need to override displaySlides_() in
DiamondTransition. And it worked until someone started to make false
assumptions about the scene, like that it is unchanging or that both
slides have the same (non-zero) number of elements...

Change-Id: I401cccc4dfbcba0a5f5544d3aac94d1cae027c99
üst a125527a
...@@ -70,11 +70,6 @@ OGLTransitionImpl::~OGLTransitionImpl() ...@@ -70,11 +70,6 @@ OGLTransitionImpl::~OGLTransitionImpl()
{ {
} }
void OGLTransitionImpl::setScene(TransitionScene const& rScene)
{
maScene = rScene;
}
void OGLTransitionImpl::uploadModelViewProjectionMatrices() void OGLTransitionImpl::uploadModelViewProjectionMatrices()
{ {
double EyePos(10.0); double EyePos(10.0);
...@@ -1138,18 +1133,26 @@ public: ...@@ -1138,18 +1133,26 @@ public:
{} {}
private: private:
virtual void prepare( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight ) override; virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override;
Primitives_t makeLeavingSlide(double nTime) const;
}; };
void DiamondTransition::prepare( double nTime, double /* SlideWidth */, double /* SlideHeight */, double /* DispWidth */, double /* DispHeight */ ) void DiamondTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex,
double SlideWidthScale, double SlideHeightScale )
{ {
Primitive Slide1, Slide2; CHECK_GL_ERROR();
applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
Slide1.pushTriangle (glm::vec2 (0,0), glm::vec2 (1,0), glm::vec2 (0,1)); CHECK_GL_ERROR();
Slide1.pushTriangle (glm::vec2 (1,0), glm::vec2 (0,1), glm::vec2 (1,1)); displaySlide( nTime, glLeavingSlideTex, makeLeavingSlide(nTime), SlideWidthScale, SlideHeightScale );
Primitives_t aEnteringSlidePrimitives; displaySlide( nTime, glEnteringSlideTex, getScene().getEnteringSlide(), SlideWidthScale, SlideHeightScale );
aEnteringSlidePrimitives.push_back (Slide1); CHECK_GL_ERROR();
}
Primitives_t DiamondTransition::makeLeavingSlide(double nTime) const
{
Primitive Slide2;
if( nTime >= 0.5 ) { if( nTime >= 0.5 ) {
double m = 1 - nTime; double m = 1 - nTime;
...@@ -1174,13 +1177,20 @@ void DiamondTransition::prepare( double nTime, double /* SlideWidth */, double / ...@@ -1174,13 +1177,20 @@ void DiamondTransition::prepare( double nTime, double /* SlideWidth */, double /
Primitives_t aLeavingSlidePrimitives; Primitives_t aLeavingSlidePrimitives;
aLeavingSlidePrimitives.push_back (Slide2); aLeavingSlidePrimitives.push_back (Slide2);
setScene(TransitionScene(aLeavingSlidePrimitives, aEnteringSlidePrimitives)); return aLeavingSlidePrimitives;
} }
std::shared_ptr<OGLTransitionImpl> std::shared_ptr<OGLTransitionImpl>
makeDiamondTransition(const TransitionSettings& rSettings) makeDiamondTransition(const TransitionSettings& rSettings)
{ {
return std::make_shared<DiamondTransition>(TransitionScene(), rSettings); Primitive Slide1;
Slide1.pushTriangle (glm::vec2 (0,0), glm::vec2 (1,0), glm::vec2 (0,1));
Slide1.pushTriangle (glm::vec2 (1,0), glm::vec2 (0,1), glm::vec2 (1,1));
Primitives_t aEnteringSlidePrimitives;
aEnteringSlidePrimitives.push_back (Slide1);
Primitives_t aLeavingSlidePrimitives;
aLeavingSlidePrimitives.push_back (Slide1);
return std::make_shared<DiamondTransition>(TransitionScene(aLeavingSlidePrimitives, aEnteringSlidePrimitives), rSettings);
} }
} }
......
...@@ -165,8 +165,6 @@ protected: ...@@ -165,8 +165,6 @@ protected:
return maScene; return maScene;
} }
void setScene(TransitionScene const& rScene);
void displaySlide( double nTime, sal_Int32 glSlideTex, const Primitives_t& primitives, double SlideWidthScale, double SlideHeightScale ); void displaySlide( double nTime, sal_Int32 glSlideTex, const Primitives_t& primitives, double SlideWidthScale, double SlideHeightScale );
void displayScene( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight); void displayScene( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight);
void applyOverallOperations( double nTime, double SlideWidthScale, double SlideHeightScale ); void applyOverallOperations( double nTime, double SlideWidthScale, double SlideHeightScale );
...@@ -210,7 +208,7 @@ private: ...@@ -210,7 +208,7 @@ private:
virtual GLuint makeShader() const = 0; virtual GLuint makeShader() const = 0;
private: private:
TransitionScene maScene; const TransitionScene maScene;
const TransitionSettings maSettings; const TransitionSettings maSettings;
/** Calculates the projection and model/view matrices, and upload them. /** Calculates the projection and model/view matrices, and upload them.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment