//------------------------------------------------------------------------ void RenderingEngine::drawFrame() { assert (mV != NULL && "mV not set before rendering starts!"); assert (mP != NULL && "mP not set before rendering starts!"); glDepthMask(GL_TRUE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /////////////////////////////////////////// // 1. Draw front to back while (!mFrontToBack.empty()) { mDraw(mFrontToBack.top().renderingPackage, *mV, *mP); mFrontToBack.pop(); } /////////////////////////////////////////// // 2. Draw the skybox (early depth testing) if any if (mSkyBox) { mDrawSkyBox(); } /////////////////////////////////////////// // 3. Draw back to front while (!mBackToFront.empty()) { mDraw(mBackToFront.top().renderingPackage, *mV, *mP); mBackToFront.pop(); } /////////////////////////////////////////// // 4. Draw the HUD glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); for (auto hudElem : mHUDSystem.getHUDElements()) { for (auto rp : hudElem->mEntity->getRenderingComponent()->getRenderingPackages()) { mDraw(rp, mHUDSystem.mV, mHUDSystem.mP); //mDraw(rp, *mV, *mP); } } glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST); }
BOOPSI_DISPATCHER(IPTR, classdispatcher, cl, obj, msg) { mybug(0,("Class Dispatcher!\n")); switch (msg->MethodID) { case OM_NEW: return mNew(cl,obj,(APTR)msg); case OM_DISPOSE: return mDispose(cl,obj,(APTR)msg); case MUIM_Setup: return mSetup(cl,obj,(APTR)msg); case MUIM_Cleanup: return mCleanup(cl,obj,(APTR)msg); case OM_SET: return mSet(cl,obj,(APTR)msg); case OM_GET: return mGet(cl,obj,(APTR)msg); case MUIM_AskMinMax: return mAskMinMax(cl,obj,(APTR)msg); case MUIM_Hide: return mHide(cl,obj,(APTR)msg); case MUIM_Show: return mShow(cl,obj,(APTR)msg); case MUIM_Draw: return mDraw(cl,obj,(APTR)msg); // case MUIM_Action_HandlePsdEvents: // return mPsdEventHandler(cl,obj,(APTR)msg); case MUIM_Action_HandleTmrEvents: return mTmrEventHandler(cl,obj,(APTR)msg); default: return DoSuperMethodA(cl,obj,msg); } return 0; }