Skip to content

Commit 6397372

Browse files
newnonminggo
authored andcommitted
before draw event (cocos2d#17669)
1 parent afcffc7 commit 6397372

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

cocos/base/CCDirector.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ const char *Director::EVENT_AFTER_VISIT = "director_after_visit";
9292
const char *Director::EVENT_BEFORE_UPDATE = "director_before_update";
9393
const char *Director::EVENT_AFTER_UPDATE = "director_after_update";
9494
const char *Director::EVENT_RESET = "director_reset";
95+
const char *Director::EVENT_BEFORE_DRAW = "director_before_draw";
9596

9697
Director* Director::getInstance()
9798
{
@@ -162,6 +163,8 @@ bool Director::init(void)
162163
_eventDispatcher = new (std::nothrow) EventDispatcher();
163164
_eventAfterDraw = new (std::nothrow) EventCustom(EVENT_AFTER_DRAW);
164165
_eventAfterDraw->setUserData(this);
166+
_eventBeforeDraw = new (std::nothrow) EventCustom(EVENT_BEFORE_DRAW);
167+
_eventBeforeDraw->setUserData(this);
165168
_eventAfterVisit = new (std::nothrow) EventCustom(EVENT_AFTER_VISIT);
166169
_eventAfterVisit->setUserData(this);
167170
_eventBeforeUpdate = new (std::nothrow) EventCustom(EVENT_BEFORE_UPDATE);
@@ -198,6 +201,7 @@ Director::~Director(void)
198201
delete _eventBeforeUpdate;
199202
delete _eventAfterUpdate;
200203
delete _eventAfterDraw;
204+
delete _eventBeforeDraw;
201205
delete _eventAfterVisit;
202206
delete _eventProjectionChanged;
203207
delete _eventResetDirector;
@@ -281,6 +285,9 @@ void Director::drawScene()
281285

282286
_renderer->clear();
283287
experimental::FrameBuffer::clearAllFBOs();
288+
289+
_eventDispatcher->dispatchEvent(_eventBeforeDraw);
290+
284291
/* to avoid flickr, nextScene MUST be here: after tick and before draw.
285292
* FIXME: Which bug is this one. It seems that it can't be reproduced with v0.9
286293
*/

cocos/base/CCDirector.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ class CC_DLL Director : public Ref
109109
static const char* EVENT_AFTER_VISIT;
110110
/** Director will trigger an event after a scene is drawn, the data is sent to GPU. */
111111
static const char* EVENT_AFTER_DRAW;
112+
/** Director will trigger an event before a scene is drawn, right after clear. */
113+
static const char* EVENT_BEFORE_DRAW;
112114

113115
/**
114116
* @brief Possible OpenGL projections used by director
@@ -616,7 +618,7 @@ class CC_DLL Director : public Ref
616618
@since v3.0
617619
*/
618620
EventDispatcher* _eventDispatcher;
619-
EventCustom *_eventProjectionChanged, *_eventAfterDraw, *_eventAfterVisit, *_eventBeforeUpdate, *_eventAfterUpdate, *_eventResetDirector;
621+
EventCustom *_eventProjectionChanged, *_eventAfterDraw, *_eventBeforeDraw, *_eventAfterVisit, *_eventBeforeUpdate, *_eventAfterUpdate, *_eventResetDirector;
620622

621623
/* delta time since last tick to main loop */
622624
float _deltaTime;

0 commit comments

Comments
 (0)