x结构学习(五)CCEGLViewProtocol、CCEGLView

1、CCEGLViewProtocol:Cocos2d-x和openGL间的接口,桥梁

class CC_DLL CCEGLViewProtocol{public:CCEGLViewProtocol();virtual ~CCEGLViewProtocol();virtual void end() = 0;//销毁,子类必须继承virtual bool isOpenGLReady() = 0; //获得GL渲染系统是否已经准备好virtual void swapBuffers() = 0; //缓冲区交换virtual void setIMEKeyboardState(bool bOpen) = 0; //设置输入法状态virtual const CCSize& getFrameSize() const;//窗体大小virtual void setFrameSize(float width, float height);virtual CCSize getVisibleSize() const;//openGL视口可见区域virtual CCPoint getVisibleOrigin() const;virtual void setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy);virtual void setTouchDelegate(EGLTouchDelegate * pDelegate); //设置触摸委派virtual void setViewPortInPoints(float x , float y , float w , float h); //设置openGL视口矩形virtual void setScissorInPoints(float x , float y , float w , float h); //设置裁剪矩形virtual bool isScissorEnabled();//裁剪相关virtual CCRect getScissorRect();virtual void setViewName(const char* pszViewName); //视窗名字const char* getViewName();virtual void handleTouchesBegin(int num, int ids[], float xs[], float ys[]);//触摸事件处理virtual void handleTouchesMove(int num, int ids[], float xs[], float ys[]);virtual void handleTouchesEnd(int num, int ids[], float xs[], float ys[]);virtual void handleTouchesCancel(int num, int ids[], float xs[], float ys[]);const CCRect& getViewPortRect() const;//获取openGL视口矩形float getScaleX() const;//获得缩放因子float getScaleY() const;private:void getSetOfTouchesEndOrCancel(CCSet& set, int num, int ids[], float xs[], float ys[]);protected:EGLTouchDelegate* m_pDelegate;CCSize m_obScreenSize;CCSize m_obDesignResolutionSize;CCRect m_obViewPortRect;char m_szViewName[50];float m_fScaleX;float m_fScaleY;ResolutionPolicy m_eResolutionPolicy;};2、CCEGLView:继承自CCEGLViewProtocol,处理openGL方面的工作class CC_DLL CCEGLView : public CCEGLViewProtocol{public:CCEGLView();virtual ~CCEGLView();virtual bool isOpenGLReady();//以下6个均为重载函数virtual void end();virtual void swapBuffers();virtual void setFrameSize(float width, float height);virtual void setEditorFrameSize(float width, float height,HWND hWnd);virtual void setIMEKeyboardState(bool bOpen);void setMenuResource(LPCWSTR menu);//设置菜单资源void setWndProc(CUSTOM_WND_PROC proc);//设置消息处理函数protected:virtual bool Create();public:bool initGL();//初始化openGLvoid destroyGL();//销毁openGLvirtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); //消息处理函数HWND getHWnd();//Win32平台,窗体句柄virtual void resize(int width, int height);void setFrameZoomFactor(float fZoomFactor);float getFrameZoomFactor();virtual void centerWindow();typedef void (*LPFN_ACCELEROMETER_KEYHOOK)( UINT message,WPARAM wParam, LPARAM lParam );void setAccelerometerKeyHook( LPFN_ACCELEROMETER_KEYHOOK lpfnAccelerometerKeyHook );virtual void setViewPortInPoints(float x , float y , float w , float h);virtual void setScissorInPoints(float x , float y , float w , float h);static CCEGLView* sharedOpenGLView();//获得实例句柄protected:static CCEGLView* s_pEglView;bool m_bCaptured;HWND m_hWnd;HDC m_hDC;HGLRC m_hRC;LPFN_ACCELEROMETER_KEYHOOK m_lpfnAccelerometerKeyHook;bool m_bSupportTouch;LPCWSTR m_menu;CUSTOM_WND_PROC m_wndproc;float m_fFrameZoomFactor;};typedef LRESULT (*CUSTOM_WND_PROC)(UINT message, WPARAM wParam, LPARAM lParam, BOOL* pProcessed);

,最可怕的敌人,就是没有坚强的信念。

x结构学习(五)CCEGLViewProtocol、CCEGLView

相关文章:

你感兴趣的文章:

标签云: