fancy2D 源码解析 1 TestCpp
2015-07-13 19:40
597 查看
fancy2D 源码解析 1 TestCpp
--------------------
如果你成功编译了项目并成功运行的话,单步执行,一切一定是从TestCpp工程中的Main.cpp开始的
--------------------
引用的项
引用了fancy2D的大量头文件与C++标准库。作者同时提醒用户“如果需要引入fcyStream则必须在f2d之前引入”。
--------------------
main函数
接着从main函数开始看起
乍一看,什么?!main函数竟然如此简短?!没错,就是这么简短,接下来我们就来细细品味一下这一代码块。
--------------------
注释的代码
在这12行代码中,一共有3行被注释的代码。
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
众所周知,WIN32的mian函数,在使用WinMain时并不会产生一个控制台窗口,而fancy2D中有大量自己定义的异常输出,故作者使用了main函数。若不需要控制台窗口了只需要将行注释放到int main()那行即可,十分方便。
_CrtSetBreakAlloc(5351);
在5351内存被分配时中断。大约是比较严重的问题,作者将次行代码注释而不是删除。
_CrtSetBreakAlloc的用法可参考:https://msdn.microsoft.com/en-us/library/4wth1ha5.aspx
system("pause");
众所周知,在次以上的代码运行完毕后暂停,而不是控制台的关闭。
--------------------
_CrtSetDbgFlag
我第一次看这代码时吃了个闭门羹,竟不知_CrtSetDbgFlag为何物,做什么用。
这个函数大致上可以解释为内存泄漏的检测
详细用法:https://msdn.microsoft.com/en-us/library/aa246761%28v=vs.60%29.aspx
_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)一句用来获取当前的状态,并用位操作符 | 添加_CRTDBG_LEAK_CHECK_DF状态,最终设置状态。
注:#ifdef _DEBUG使用的原因
由于_CrtSetDbgFlag只能在debug模式下使用,故作者定义在_DEBUG定义的情况(即debug模式下)下调用此函数。
--------------------
MyApp tApp
在Main.cpp中定义类的对象,因为一切都在MyApp类的构造函数中办好了,故只需这句语句。
--------------------
MyApp类
注:由于MyApp全部代码较长,不贴了。
MyApp公共继承自f2dEngineEventListener,其目的是为了重写接口OnUpdate与OnRender。
大部分成员从字面意思就能知道是做什么的,然而这里有两处我乍一看也没弄懂的来分析一下。
--------------------
fcyRefPointer
这是fancy2D中定义的引用计数模板类,点击f12可以查看定义。
在这个模板类的定义中,作者重载了指针操作的一些操作符,与基本的引用计数方法。
注:这个类是线程安全的
--------------------
fuiResProviderImpl
fancy2D UI控件资源提供类
--------------------
showSelfInfo
打印fancy2D版本信息,本机cpu信息,显卡名称,分辨率,抗锯齿等级。通过阅读代码就可知。
--------------------
至此,TestCpp还剩下MyApp重写的OnUpdate与OnRender与其构造函数。
今天累了,昨晚没睡好。╯︿╰明天继续吧
未完待续
--------------------
如果你成功编译了项目并成功运行的话,单步执行,一切一定是从TestCpp工程中的Main.cpp开始的
--------------------
引用的项
// 如果需要引入fcyStream则必须在f2d之前引入 #include <fcyIO/fcyStream.h> #include <fcyFile/fcyModelMeshFile.h> #include <fcyFile/fcyModelMeshExporter.h> #include <fcyOS/fcyDebug.h> #include <fcyOS/fcyMultiThread.h> // UI库 #include <fcyUIBase/fuiPage.h> #include <fcyUIBase/fuiFactory.h> #include <fcyUIBase/fuiPropBlock.h> // f2d头文件 #include <f2d.h> #include <iostream> #include <string> #include <vector> using namespace std;
引用了fancy2D的大量头文件与C++标准库。作者同时提醒用户“如果需要引入fcyStream则必须在f2d之前引入”。
--------------------
main函数
接着从main函数开始看起
//int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) int main() { #ifdef _DEBUG _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF); // _CrtSetBreakAlloc(5351); <pre name="code" class="cpp">#endif MyApp tApp; // system("pause"); return 0; }
乍一看,什么?!main函数竟然如此简短?!没错,就是这么简短,接下来我们就来细细品味一下这一代码块。
--------------------
注释的代码
在这12行代码中,一共有3行被注释的代码。
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
众所周知,WIN32的mian函数,在使用WinMain时并不会产生一个控制台窗口,而fancy2D中有大量自己定义的异常输出,故作者使用了main函数。若不需要控制台窗口了只需要将行注释放到int main()那行即可,十分方便。
_CrtSetBreakAlloc(5351);
在5351内存被分配时中断。大约是比较严重的问题,作者将次行代码注释而不是删除。
_CrtSetBreakAlloc的用法可参考:https://msdn.microsoft.com/en-us/library/4wth1ha5.aspx
system("pause");
众所周知,在次以上的代码运行完毕后暂停,而不是控制台的关闭。
--------------------
_CrtSetDbgFlag
我第一次看这代码时吃了个闭门羹,竟不知_CrtSetDbgFlag为何物,做什么用。
这个函数大致上可以解释为内存泄漏的检测
详细用法:https://msdn.microsoft.com/en-us/library/aa246761%28v=vs.60%29.aspx
_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)一句用来获取当前的状态,并用位操作符 | 添加_CRTDBG_LEAK_CHECK_DF状态,最终设置状态。
注:#ifdef _DEBUG使用的原因
由于_CrtSetDbgFlag只能在debug模式下使用,故作者定义在_DEBUG定义的情况(即debug模式下)下调用此函数。
--------------------
MyApp tApp
在Main.cpp中定义类的对象,因为一切都在MyApp类的构造函数中办好了,故只需这句语句。
--------------------
MyApp类
注:由于MyApp全部代码较长,不贴了。
MyApp公共继承自f2dEngineEventListener,其目的是为了重写接口OnUpdate与OnRender。
private: // 必要组件 fcyRefPointer<f2dEngine> m_pEngine; f2dFileSys* m_pFileSys; f2dRenderer* m_pRenderer; f2dRenderDevice* m_pDev; f2dSoundSys* m_pSoundSys; // 渲染器 fcyRefPointer<f2dGraphics2D> m_pGraph2D; // 测试用 fuiResProviderImpl tProvider; fcyRefPointer<fuiPage> m_pRootUIPage; fcyRefPointer<f2dGeometryRenderer> m_pGRender;成员如上所示。
大部分成员从字面意思就能知道是做什么的,然而这里有两处我乍一看也没弄懂的来分析一下。
--------------------
fcyRefPointer
这是fancy2D中定义的引用计数模板类,点击f12可以查看定义。
在这个模板类的定义中,作者重载了指针操作的一些操作符,与基本的引用计数方法。
注:这个类是线程安全的
--------------------
fuiResProviderImpl
fancy2D UI控件资源提供类
--------------------
showSelfInfo
打印fancy2D版本信息,本机cpu信息,显卡名称,分辨率,抗锯齿等级。通过阅读代码就可知。
--------------------
至此,TestCpp还剩下MyApp重写的OnUpdate与OnRender与其构造函数。
今天累了,昨晚没睡好。╯︿╰明天继续吧
未完待续
相关文章推荐
- Android利用网络编程HttpClient批量上传(一个)
- Server.UrlEncode、HttpUtility.UrlDecode的区别
- HTTP 协议详解
- Android网络请求框架Volley的使用
- Exchange2003升级到2010的注意事项 推荐
- android https通信跟服务器配置说明
- [ccf 4] 网络延时
- HTTP协议详解
- spring tool suite 设置 http://127.0.0.1:8080报404错误
- 计算机网络面试题
- 网络图片不能自适应屏幕尺寸
- 18-NetworkRequest网络请求数据类
- 隐藏注解里的http方法过滤器
- 15-网络-NSURLConnection
- 14-网络-NSURLSession
- Hessian or Burlap in Spring via Http
- 解决https无法缓存的问题
- 计算机网络之网络体系结构
- HDU 4888 Redraw Beautiful Drawings(网络流求矩阵的解)
- Android网络编程之Http请求服务器数据(POST方式)