<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>My Pool &#187; ui</title>
	<atom:link href="http://www.hlouis.com/tag/ui/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hlouis.com</link>
	<description>Help, I can&#039;t swimming......</description>
	<lastBuildDate>Tue, 04 May 2010 15:27:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CEGUI Font module Hack</title>
		<link>http://www.hlouis.com/develop/cegui-font-module-hack/</link>
		<comments>http://www.hlouis.com/develop/cegui-font-module-hack/#comments</comments>
		<pubDate>Tue, 04 May 2010 15:27:10 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://www.hlouis.com/develop/cegui-font-module-hack/</guid>
		<description><![CDATA[不知道这种修改算不算得上Hack，为了能让CEGUI在亚洲系字体上能有更好的表现，需要将他的字体模块的缓冲机制（主要是Freetype字体类型）做一个比较大的修改，主要修改的内容如下：
初始化时间过长
CEGUI在初始化的时候，会便利一个字体中所有的Glyph，并在d_cp_map容器中初始化所有的FontGlyph对象。这个在英文字体下没有什么问题，因为一个字体中大约只有几百Glyph，但是在中文字体中这个值一般是65535个，所以初始化的时间过长。准备废除这个初始化的过程。
CEGUI使用一个bitmap，d_glyphPageLoaded作为一个codepoint有没有载入的标志，在这里废弃这个变量，直接使用d_cp_map容器中有没有对应的FontGlyph对象作为这个codepoint有没有载入的标志。
字体缓冲的贴图占用过多
CEGUI中的字体缓冲有一个算法，就是把字体中的Glyph分页，每个页是256个文字，一旦要渲染一个文字的时候，就把这个文字前后一共256个Glyph都渲染到一张贴图上。对于英文字体来说这样不是问题，一个字体最多渲染5到6张贴图就完事了，而且采用这种策略渲染好的贴图就不需要修改了。但是对于中文字体来说这不是一个好的策略，中文字体中文字个数繁多，而且不是采用使用频率在字体中排列的，你渲染的一个文字的前后255个文字说不定在整个过程中就不会使用得到，如果讨论在极端情况下，一个中文字体一共需要65535/256=256张贴图才可以完整的渲染完，这样我们可怜的显存里面就全部都是文字了，明显不可以接受。
计划使用一个简单的缓冲机制，就是一开始设定好一个字体可以使用多少张缓冲贴图，和每张贴图的尺寸（这里暂定512*512）。这样的策略实现起来比较简单，相对来说修改的代码量也不是很大，缺点是：

CEGUI的贴图接口中并没有锁定或修改已存在的贴图内容，需要自己实现。
原始的贴图生成之后不需要修改了，现在需要经常修改，会有一定的效率损失。

]]></description>
			<content:encoded><![CDATA[<p>不知道这种修改算不算得上Hack，为了能让CEGUI在亚洲系字体上能有更好的表现，需要将他的字体模块的缓冲机制（主要是Freetype字体类型）做一个比较大的修改，主要修改的内容如下：</p>
<h2><strong>初始化时间过长</strong></h2>
<p>CEGUI在初始化的时候，会便利一个字体中所有的Glyph，并在d_cp_map容器中初始化所有的FontGlyph对象。这个在英文字体下没有什么问题，因为一个字体中大约只有几百Glyph，但是在中文字体中这个值一般是65535个，所以初始化的时间过长。准备废除这个初始化的过程。</p>
<p>CEGUI使用一个bitmap，d_glyphPageLoaded作为一个codepoint有没有载入的标志，在这里废弃这个变量，直接使用d_cp_map容器中有没有对应的FontGlyph对象作为这个codepoint有没有载入的标志。</p>
<h2><strong>字体缓冲的贴图占用过多</strong></h2>
<p>CEGUI中的字体缓冲有一个算法，就是把字体中的Glyph分页，每个页是256个文字，一旦要渲染一个文字的时候，就把这个文字前后一共256个Glyph都渲染到一张贴图上。对于英文字体来说这样不是问题，一个字体最多渲染5到6张贴图就完事了，而且采用这种策略渲染好的贴图就不需要修改了。但是对于中文字体来说这不是一个好的策略，中文字体中文字个数繁多，而且不是采用使用频率在字体中排列的，你渲染的一个文字的前后255个文字说不定在整个过程中就不会使用得到，如果讨论在极端情况下，一个中文字体一共需要65535/256=256张贴图才可以完整的渲染完，这样我们可怜的显存里面就全部都是文字了，明显不可以接受。</p>
<p>计划使用一个简单的缓冲机制，就是一开始设定好一个字体可以使用多少张缓冲贴图，和每张贴图的尺寸（这里暂定512*512）。这样的策略实现起来比较简单，相对来说修改的代码量也不是很大，缺点是：</p>
<ol>
<li>CEGUI的贴图接口中并没有锁定或修改已存在的贴图内容，需要自己实现。</li>
<li>原始的贴图生成之后不需要修改了，现在需要经常修改，会有一定的效率损失。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.hlouis.com/develop/cegui-font-module-hack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

