大坡3D软件开发

自主操作系统和CPU--用软件来改变世界

第二人生的源码分析(四十八)接收服务器回应的纹理图片头数据

前面介绍了怎么样发送纹理下载请求到服务器,那么在第二人生里又是怎么样接收纹理图片的呢?接着就来讨论这个问题,它的代码如下: 这是一个静态成员函数,主要为了给网络消息系统回调使用的。#001 // static#002 void LLViewerImageList::receiveImageHead...

2008-04-29 22:11:00

阅读数 3002

评论数 0

第二人生的源码分析(四十七)发送下载纹理图片请求

这里接着上一次获取纹理图片线程,继续分析发送纹理图片请求到服务器。代码如下:#001 void LLTextureFetch::sendRequestListToSimulators()#002 {#003      const S32 IMAGES_PER_REQUEST = 50;#004  ...

2008-04-27 22:33:00

阅读数 2800

评论数 0

第二人生的源码分析(四十六)获取纹理图片的线程

纹理图片对于3D程序来说比较重要的数据,如果没有纹理图片,就没有亮丽的外表,就没有丰富多彩的世界。在第二人生里,纹理图片不是随着程序一起发布的,而是不断地从服务器上下载的,这点是不像其它游戏,把所有图片全部预先下载好。下面就来分析一下纹理下载线程的工作过程。先从程序:LLAppViewer::ge...

2008-04-26 22:56:00

阅读数 1939

评论数 0

第二人生的源码分析(四十五)图像解压线程

前面介绍虚拟文件系统的线程,其实它是单一个线程来处理所有消息的,还有类LLLFSThread也是一样。在第二人生显示的软件里,图片是占了绝大部份数据,那么从服务器上下载的数据,都是压缩的图片,这样的图片大小就比较小一些,对于网络通讯就需要不太多带宽了,看到程序显示速度明显加快。下面就来分析一下这个...

2008-04-25 22:09:00

阅读数 2153

评论数 0

第二人生的源码分析(四十四)虚拟文件系统的请求处理

在虚拟文件系统的消息队列里,主要就是LLVFSThread::Request类的请求,Request类是嵌套类,定义在LLVFSThread类里面。它主要实现对类LLVFS的封装访问,让操作更加方便一些,当然它是继续QueuedRequest类的,这样才可以添加到消息队列里去,否则不能添加到这个消...

2008-04-23 22:32:00

阅读数 4259

评论数 2

第二人生的源码分析(四十三)虚拟文件系统线程

由于第二人生是一个3D显示的软件,因此它就需要不断地从服务器下载大量数据,比如纹理图片,不同的角色是使用不同的纹理图片来实现不同的衣服外表的。当显示这些角色时,就使用从服务器下载的纹理图片。如果显示的人物角色比较多,比如有30个人时,这些纹理图片就需要保存到磁盘里。那么怎么样保存到磁盘里呢?保存到...

2008-04-22 21:19:00

阅读数 3271

评论数 5

第二人生的源码分析(四十二)实现消息处理的线程类

第二人生里使用线程循环来处理消息,这样的结构就比较清晰。比如有一个写文件的请求,就可以把这个请求放到线程队列里,然后唤醒线程,让线程处理这个请求。那么在第二人生里是怎么样构造消息循环呢?又是怎么样执行其它线程发过来的请求呢?带着这两个问题来分析下面这几段代码。#001 void LLQueuedT...

2008-04-21 21:43:00

阅读数 3215

评论数 0

第二人生的源码分析(四十一)使用Apache运行库线程

对于跨平台的应用程序设计,考虑的东西一般都需要比较多,比如线程的设计,在Windows平台和Linux平台就是不一样的API,要适应这两种平台,就需要把这两种API接口通过封装成统一的编程接口,做这样工作的任务也是比较艰难的,因为需要不断地在两个系统上测试。由于Apache基金软件里有这样的共享库...

2008-04-20 11:28:00

阅读数 2765

评论数 0

第二人生的源码分析(四十)创建多个工作线程

多线程的程序是比较常见的,更何况是网络程序。随着多核CPU的发展,想提高程序的性能,只能靠多线程工作了。下面就带你看看第二人生是怎么创建多线程工作的,每个线程又是做什么样的工作。由于线程类是主动类,线程的工作结构就是程序的工作结构了,写一个好的程序,往往就是线程类的结构安排,也就是整个程序的架构实...

2008-04-18 23:26:00

阅读数 2516

评论数 0

第二人生的源码分析(三十九)关闭WinXP的错误报告功能

在Windows XP系统里,如果一个程序出错了,就会产生一个程序错误报告,并且可以发送到微软去。对于用户自己开发的程序出错,并不需要发送到微软去,因为那样做是没有什么作用的,毕竟微软不会帮我们改正程序的,那么怎么样来修改出错时不发送到弹出程序出错报告呢?现在就来看看第二人生里是怎么样实现的吧。它...

2008-04-17 22:57:00

阅读数 4028

评论数 2

第二人生的源码分析(三十八)构造一个消息包并发送

消息解包已经看得比较多了,现在就来分析一下怎么样打包一个消息包。上面已经介绍了通过UDP发送消息包给服务器,这里主要介绍打包的过程,它的代码如下:#001 void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amo...

2008-04-16 22:57:00

阅读数 3689

评论数 0

第二人生的源码分析(三十七)消息处理的完整流程

虽然上面介绍了这么多消息处理:从网络接收到数据,再从数据解释到数据获取,但没有一个清晰的流程,下面就来详细地分析这个数据流程是怎么样调用的。具体调用流程如下:1.        LLAppViewer::idle()      空闲时处理函数。2.        LLAppViewer::idle...

2008-04-15 23:29:00

阅读数 3423

评论数 0

第二人生的源码分析(三十六)获取消息包里每一个字段

上面介绍了怎么样构造消息模板,并用它来灵活地生成各种各样需要传送数据的数据结构,现在就来分析一下使用模板怎么样去分析缓冲区里的数据,然后获取消息各个字段数据,这样才可以让别的程序使用起来。#001 BOOL LLTemplateMessageReader::readMessage(const U8...

2008-04-14 21:53:00

阅读数 3090

评论数 0

第二人生的源码分析(三十五)分析消息模板文件

这种灵活的通讯消息结构到底是怎么样实现的呢?下面就来仔细地分析它实现的代码,如下:#001 // Read file and build message templates#002 void LLMessageSystem::loadTemplateFile(const char* filenam...

2008-04-12 23:27:00

阅读数 3240

评论数 2

第二人生的源码分析(三十四)读取通讯的消息模板

在开发通讯的软件里,要让通讯的两端程序相互对话,其实就跟人与人的交流是一样的,要使用共同语言,而不能一个人说英语,一个人说汉语。由于通讯两端是分别在不同的程序里,那么就需要定出一套相互认同的语言—协议定义。而定义协议的办法有很多种,比如直接写成C结构,这样的方式最直接了,但它有点不灵活。又有采用X...

2008-04-11 23:21:00

阅读数 2505

评论数 0

第二人生的源码分析(三十三)消息解包的实现

下面的代码是实现数据包的有效性检验,先调用函数validateMessage来检验接收数据缓冲区里是否有效的数据包,然后调用getMessageName函数来查看是否属于这个环路的数据包,最后判断数据包是否值得信任的或者是否禁止接收的数据。#159                    // Us...

2008-04-10 22:22:00

阅读数 3696

评论数 0

第二人生的源码分析(三十二)消息解包的实现

从UDP接收到数据后,就会组装成一个完整的数据包,然后检验整个数据包是否有效,并且还处理收到回应的UDP包标识,这样构造一个完整的可靠性连接。具体处理代码如下:#001 BOOL LLMessageSystem::checkMessages( S64 frame_count )#002 {#003...

2008-04-09 23:23:00

阅读数 6351

评论数 5

第二人生的源码分析(三十一)接收数据的流量控制

数据接收回来后,本来就应立即处理掉,这样是比较简单的想法。但由于网络带宽有限,这时就需要限制UDP接收数据的速度。下面就来分析这种需求的实现,它的代码如下:#001 S32 LLPacketRing::receivePacket (S32 socket, char *datap)#002 {#00...

2008-04-08 21:52:00

阅读数 3714

评论数 2

第二人生的源码分析(三十)UDP接收数据和Windows网络关闭

从上面的协议就知道,有发送数据,就肯定有接收数据;有初始化,就肯定有结束。跟人的生命是一样的,有始就有终。那么第二人生里是怎么样接收数据呢?又是怎么样关闭Windows网络呢?通过下面的代码就可以学会怎么样使用UDP接收数据,并且关闭网络,回收资源给Windows系统。 下面的代码先判断是否创建了...

2008-04-07 22:30:00

阅读数 7516

评论数 0

第二人生的源码分析(二十九)Windows网络初始化

上面已经介绍怎么样通过网络发送数据了,但心里又有一个问题,就是网络是怎么样进行初始化,才能发送数据呢?怎么样创建Windows下的UDP协议的呢?现在就来分析这段初始化的代码。#001 S32 start_net(S32& socket_out, int& nPort) #002 ...

2008-04-04 23:58:00

阅读数 2941

评论数 0

提示
确定要删除当前文章?
取消 删除