diff --git a/src/modules/graphic/ssggraph/grcam.h b/src/modules/graphic/ssggraph/grcam.h index 43171406..4bb72950 100644 --- a/src/modules/graphic/ssggraph/grcam.h +++ b/src/modules/graphic/ssggraph/grcam.h @@ -176,6 +176,13 @@ class cGrPerspCamera : public cGrCamera float getFogStart(void) { return fogstart; } float getFogEnd(void) { return fogend; } + /** called in cGrScreen::camDraw() before anything else. Can be used to setup any state + * before any rendering takes place. */ + virtual void beforeDraw() {} + /** called in cGrScreen::camDraw() after everything else. The counterpart to + * cGrPerspCamera::beforeDraw(). */ + virtual void afterDraw() {} + cGrPerspCamera *next(void) { return (cGrPerspCamera *)cGrCamera::next(); } diff --git a/src/modules/graphic/ssggraph/grscreen.cpp b/src/modules/graphic/ssggraph/grscreen.cpp index c6d10903..2183cdce 100644 --- a/src/modules/graphic/ssggraph/grscreen.cpp +++ b/src/modules/graphic/ssggraph/grscreen.cpp @@ -233,6 +233,10 @@ compareCars(const void *car1, const void *car2) void cGrScreen::camDraw(tSituation *s) { + GfProfStartProfile("dispCam->beforeDraw*"); + dispCam->beforeDraw(); + GfProfStopProfile("dispCam->beforeDraw*"); + glDisable(GL_COLOR_MATERIAL); GfProfStartProfile("dispCam->update*"); @@ -300,6 +304,10 @@ void cGrScreen::camDraw(tSituation *s) curCar->_roll * SG_RADIANS_TO_DEGREES, 0.0, curCar->_speed_x); } else grRain.drawPrecipitation(grTrack->local.rain, 1.0, 0.0, 0.0, 0.0, 0.0); + + GfProfStartProfile("dispCam->afterDraw*"); + dispCam->afterDraw(); + GfProfStopProfile("dispCam->afterDraw*"); }