热文蔡军生先生第二人生的源码分析(七十一)实现闪屏窗口
现在的电子信息技术发展得很快,特别像 CPU这样的硬件,已经进入到多核时代,运行程序的速度比以前快了很多,但人类的需求是无止境的,因此写的程序也越来越大,越来越复杂,导致程序的
现在的电子信息技术发展得很快,特别像 CPU这样的硬件,已经进入到多核时代,运行程序的速度比以前快了很多,但人类的需求是无止境的,因此写的程序也越来越大,越来越复杂,导致程序的
前面已经介绍使用 expat库来分析XML数据,那么在第二人生里是怎么样分析XML配置文件的呢?现在就来分析这方面的问题,先来看看第二人生分析配置文件调用关系,如下: 1.
LLXmlTreeParser类是继承类 LLXmlParser,主要实现创建树节点,并且把树节点保存起来,这样就可以方便外面查找XML里的数据。下面先来分析这个类的声明:
前面介绍了什么是 expat库,也介绍怎么使用它来打开XML文件进行分析,接着下来就来分析第二人生里是怎么样使用它。详细的函数代码如下: \001 // static \0
当第二人生登录时,它是通过 HTTP请求来发送数据到服务器的,为了方便使用前面介绍的libcurl库,那么再提供一个HTTP特别请求类来实现这个功能。通过这个类LLCurlEa
从前面看到类 Easy是封装了一个请求,但往往需要传送多个请求的情况,这样就需要实现多个请求能同时工作的类,在第二人生里是把这部份功能放在类Multi里的,同样它也是LLCur
从上一节里可以看到,在类 LLCurl声明里主要声明嵌套类Easy,最后通过嵌套类Easy来实现libcurl功能,下面就来仔细地分析它。它的类声明如下: \001 clas
通过上面介绍了 libcurl库的功能,那么在第二人生里到底是怎么样使用它的呢?又是怎么样封装它,才会更好用呢?下面就来分析一下它的类声明: \001 // For what
网络发展得很快,越来越多网络传送协议出现,不管是什么样的开发人员面对这些协议都是比较困难的工作,往往在一个程序里就有多种不同协议的需求。像 WEB流行的今天,如果没有使用HTT
上面已经介绍到第二人生里是使用FreeType来显示字体的,因此需要使用一个类来封装这些操作,这类就叫做LLFont。在这个类里基本的任务,就是: 1)初始化FreeType
对于第二人生来说是跨平台运行的,那么显示文字就成为一个问题了。特别在3D环境里显示文字,更加是比较困难的问题。因为在图形界面里显示的字体,都是图片,并且每个字是一个图片,可以随
我们都知道显示卡有一片内存叫做显存,顾名思义,显存就是显示内容的存储器。意思就是说所有显示到显示器的内容都需要放到这片内存里,然后显示卡再作DAC的动作,最后才能从屏幕里看到输
前面介绍了JPEG2000的图片格式,下面介绍LLImageTGA类的格式。TGA(Tagged Graphics)文件是由美国Truevision公司为其显示卡开发的一种图像
前面介绍了图片的基类,现在来介绍一下图片的格式化表示LLImageFormatted类。那么为什么需要设计这个格式化类呢?而不是直接从图片的基类继承到JPEG2000或者TGA
目前网络带宽比起以前是快了很多,但对于3D这样大型程序来说,还是远远不够的。特别像第二人生这样逼真的画面,需要实时传送更多真实细节的图片,既然网络的带宽不够,又需要显示这么逼真
这次来讨论一下图片的基类LLImageBase,从前一篇里已经看到它的继承关系,仅在引用类LLThreadSafeRefCount之后,而在JPEG2000和TGA类之前。那么
从前面已经看到可以从服务器下载纹理图片,那么下载这些纹理图片,又是什么样的格式呢?在第二人生里,主要有三种格式:JPEG2000、TGA、RAW。虽然对应只有三种格式,但Ope
其实掌握MappedByteBuffer并不难,只要记住“三方三法三特性”(我自己总结的,呵呵~~不要扔鸡蛋哦。。。)这句话就可以轻松搞定!MappedByteBuffer 只
from:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0349bc/Chdfgjej.htm
前面介绍了怎么样发送纹理下载请求到服务器,那么在第二人生里又是怎么样接收纹理图片的呢?接着就来讨论这个问题,它的代码如下: 这是一个静态成员函数,主要为了给网络消息系统
这里接着上一次获取纹理图片线程,继续分析发送纹理图片请求到服务器。代码如下: \001 void LLTextureFetch::sendRequestListToSimul
前面介绍虚拟文件系统的线程,其实它是单一个线程来处理所有消息的,还有类LLLFSThread也是一样。在第二人生显示的软件里,图片是占了绝大部份数据,那么从服务器上下载的数据,
第二人生里使用线程循环来处理消息,这样的结构就比较清晰。比如有一个写文件的请求,就可以把这个请求放到线程队列里,然后唤醒线程,让线程处理这个请求。那么在第二人生里是怎么样构造消
由于第二人生是一个3D显示的软件,因此它就需要不断地从服务器下载大量数据,比如纹理图片,不同的角色是使用不同的纹理图片来实现不同的衣服外表的。当显示这些角色时,就使用从服务器下
消息解包已经看得比较多了,现在就来分析一下怎么样打包一个消息包。上面已经介绍了通过UDP发送消息包给服务器,这里主要介绍打包的过程,它的代码如下: \001 void giv
这种灵活的通讯消息结构到底是怎么样实现的呢?下面就来仔细地分析它实现的代码,如下: \001 // Read file and build message templates
下面的代码是实现数据包的有效性检验,先调用函数validateMessage来检验接收数据缓冲区里是否有效的数据包,然后调用getMessageName函数来查看是否属于这个环
从UDP接收到数据后,就会组装成一个完整的数据包,然后检验整个数据包是否有效,并且还处理收到回应的UDP包标识,这样构造一个完整的可靠性连接。具体处理代码如下: \001 B
转jdk的原文 public class ThreadPoolExecutorextends AbstractExecutorService一个 ExecutorServic
fork 创建一个新的进程,新创建的进程是子进程,它是对父进程以后代码的一个复制,通常用来做多进程的服务器,也可以在子进程中运行独立的代码。 用getpid可以判断当前是子
Java虚拟机在执行Java程序的过程中会把它所管理的内存区域分为若干个不同的数据区域。这些区域都有各自的用途,有的区域随虚拟机进程启动而存在,有的区域则依赖用户线程启动和结束