<?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/"
	>

<channel>
	<title>ATEGPU</title>
	<atom:link href="http://www.ategpu.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ategpu.com</link>
	<description>Embedded GPU With OpenGL ES API</description>
	<pubDate>Sun, 21 Feb 2010 02:01:56 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>emacs 上手之－－基本概念</title>
		<link>http://www.ategpu.com/2010/02/21/emacs-%e4%b8%8a%e6%89%8b%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5.html</link>
		<comments>http://www.ategpu.com/2010/02/21/emacs-%e4%b8%8a%e6%89%8b%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5.html#comments</comments>
		<pubDate>Sun, 21 Feb 2010 02:01:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[News]]></category>

		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2010/02/21/emacs-%e4%b8%8a%e6%89%8b%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5.html</guid>
		<description><![CDATA[emacs的配置文件，叫作.emacs，是个隐藏文件，存在于当前用户的根目录下面，也就是~/.emacs emacs的配置文件采用了elisp作为配置文件的语言，来源于强大的lisp语言。下面我简单说一点emacs配置文件怎么写。虽然内容不多，也很肤浅，但是知道了这些，至少在编写自己的配置文件的时候，不会那么无序了。 在配置文件里面，引号(;)开头表示注释，比如下面这行 ; this is the emacs config file 下面我来举一些例子，简单说说配置文件。 (setq transient-mark-mode t) 这行的意思是，给变量transient-mark-mode设置值为true。也可以简写为下面的样子 (transient-mark-mode) 但是我用22版本的emacs的时候，会出现warning，指出不建议我用简写的形式。因此，还是建议大家写成第一种形式，即： (setq transient-mark-mode t) 前面的setq，是系统的关键字，表示给后面的变量赋值。t表示true，nil表示false。如果要关闭这个功能，就设置为nil。 这个变量transient-mark-mode，表示是否开启一个辅模式。这个辅模式可以高亮显示被选中的文本。如果不打开这个选项，也就是说不 进行设置（默认的是关闭），或者设置为nil，那么你选中的文本就没有任何变化。说白了，就是你根本看不到自己选中了哪些文本！！ 好了，继续。 (setq load-path (cons (expand-file-name &#8220;~/.emacs.d&#8221;) load-path)) 这 一行，表示设置load-path。这个load-path就是emacs的自定义库的加载路径。load-path (cons (expand-file-name &#8220;~/.emacs.d&#8221;) load-path)是一句lisp语言，意思就是说，在原有的load-path的前面，追加路径~/.emacs.d。以后，我们只要把要加载的库 （即.el文件）放到.emacs.d目录下面，emacs就会自动加载它了。 再看这两行 (require &#8216;template) (template-initialize) 这个是加载模版的时候做的。 (require &#8216;template)表示调用template， (template-initialize)表示调用了一个名称为template-initialize的方法。通过这两行，emacs就能加载模版了。后面很多库的配置都跟这很类似。 下面仔细说说add-hook。 比如我们要编辑c++的代码文件，emacs会调用c++的主模式。但是这个模式里面的一些设定跟全局的设 定不一样，我想进行一些个性化的设置。比如，我想输入分号（；）的时候，emacs会自动换行，并且让下一行跟上面一行对齐。比如缩进的长度，我想设置为 4个空格的长度（当然了，你要是想很个性的设置为5个也可以）。这个时候，就得用到add-hook了，它可以对指定的主模式进行个性化的修改。看下面的 内容： ;;set c program style (add-hook [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2010/02/21/emacs-%e4%b8%8a%e6%89%8b%e4%b9%8b%ef%bc%8d%ef%bc%8d%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Emacs基本快捷键</title>
		<link>http://www.ategpu.com/2010/02/21/emacs%e5%9f%ba%e6%9c%ac%e5%bf%ab%e6%8d%b7%e9%94%ae.html</link>
		<comments>http://www.ategpu.com/2010/02/21/emacs%e5%9f%ba%e6%9c%ac%e5%bf%ab%e6%8d%b7%e9%94%ae.html#comments</comments>
		<pubDate>Sun, 21 Feb 2010 01:50:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[News]]></category>

		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2010/02/21/emacs%e5%9f%ba%e6%9c%ac%e5%bf%ab%e6%8d%b7%e9%94%ae.html</guid>
		<description><![CDATA[

C-x C-c : 退出Emacs
C-x C-f : 打开一个文件，如果文件不存在，则创建一个文件
C-g : 取消未完成的命令

 编辑

C-z (redefined): Undo；原来C-z是挂起Emacs（然后用fg命令调出）；C-x u 是默认的命令； 移动一下光标，再C-z就可以redo
M-d : 删除光标后的词语

 移动光标

C-v : 向前翻页
M-v : 向后翻页
M-r : 将光标移动到屏幕中间那行
C-a : 移到行首
M-a : 移到句首，从行首到句首之间可能有空格
C-e : 移到行尾
M-e : 移到句尾
M-{ : 向上移动一段
M-} : 向下移动一段
C-right : 向前移动一个单词
C-left : 向后移动一个单词
C-up : 向前移动一段
C-down : 向后移动一段
M-&#60; : 移到整个文本开头
M-&#62; : 移到整个文本末尾
C-u 数字 命令 : 执行多次(数字表示次数)该命令；&#8221;M-数字 命令&#8221; 也可以
M-x goto-line [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2010/02/21/emacs%e5%9f%ba%e6%9c%ac%e5%bf%ab%e6%8d%b7%e9%94%ae.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>radix-4 sd multiplier</title>
		<link>http://www.ategpu.com/2010/01/27/radix-4-sd-multiplier.html</link>
		<comments>http://www.ategpu.com/2010/01/27/radix-4-sd-multiplier.html#comments</comments>
		<pubDate>Wed, 27 Jan 2010 15:18:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[opengl es]]></category>

		<category><![CDATA[multiplier]]></category>

		<category><![CDATA[radix-4]]></category>

		<category><![CDATA[sd]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/?p=520</guid>
		<description><![CDATA[好久没有更新了，今天研究了一下radix-4 sd multiplier。共享一个课程，讲的不错，希望对大家有帮助。我的sfu架构设计明天应该就结束了，可以开始systemc coding了。
http://ece.gmu.edu/~dhwang/ece645/spring2008/
]]></description>
		<wfw:commentRss>http://www.ategpu.com/2010/01/27/radix-4-sd-multiplier.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>AT-EGPU中的VERTEX SHADER的指令</title>
		<link>http://www.ategpu.com/2010/01/18/at-egpu%e4%b8%ad%e7%9a%84vertex-shader%e7%9a%84%e6%8c%87%e4%bb%a4.html</link>
		<comments>http://www.ategpu.com/2010/01/18/at-egpu%e4%b8%ad%e7%9a%84vertex-shader%e7%9a%84%e6%8c%87%e4%bb%a4.html#comments</comments>
		<pubDate>Mon, 18 Jan 2010 05:30:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[opengl es]]></category>

		<category><![CDATA[OpenGL ES]]></category>

		<category><![CDATA[vertex shader]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2010/01/18/at-egpu%e4%b8%ad%e7%9a%84vertex-shader%e7%9a%84%e6%8c%87%e4%bb%a4.html</guid>
		<description><![CDATA[
AT-EGPU中的VERTEX SHADER的指令





目前设计的VERTEX SHADER，因为只支持gles1.1，所以数据结构都选用顶点格式。现在设计指令长度64bit。 分三类SIMD指令 1） mov,add,sub,max,min,sge,slt,seq,lsl,asr.zero,xor,or,and,nop,end 2） mul,mad,dp2,dp3,dp4,trfm 3） rcp,rsq,pow2,log2 指令应该还会添加别的，以快速实现clipping操作。 指令结构如下： opcode&#124;adr mode&#124;write mask&#124; swizzle&#124;neg&#124;dst &#124;src0 bank&#124;src1 bank&#124;src2 bank&#124;DstSat&#124;SRC0 ADR&#124;SRC1 ADR&#124;SRC2 ADR&#124;reserver&#124; 5bit &#124;2bits &#124;4bit &#124;16bit &#124;3bit&#124;6bit&#124;2bit &#124;2bit &#124;2bit &#124;1bit &#124;4 or 8bit &#124;4 or 8bit &#124;4 or 8bit &#124;5bit &#124; 目前还差rcp,rsq,pow2,log2指令的实现。准备采用查表实现。现在研究&#60;digital arithmatic&#62;这本书，还有一些paper，看选用哪种结构更合理。



]]></description>
		<wfw:commentRss>http://www.ategpu.com/2010/01/18/at-egpu%e4%b8%ad%e7%9a%84vertex-shader%e7%9a%84%e6%8c%87%e4%bb%a4.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Real Time Rendering Course</title>
		<link>http://www.ategpu.com/2009/12/24/real-time-rendering-course.html</link>
		<comments>http://www.ategpu.com/2009/12/24/real-time-rendering-course.html#comments</comments>
		<pubDate>Thu, 24 Dec 2009 12:24:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[OpenGL]]></category>

		<category><![CDATA[Real Time Rendering]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/?p=516</guid>
		<description><![CDATA[Real Time Rendering Course
http://cggmwww.csie.nctu.edu.tw/courses/rtr/2007/#CourseSchedule
]]></description>
		<wfw:commentRss>http://www.ategpu.com/2009/12/24/real-time-rendering-course.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Linux学习笔记：vi,sed,Bash中的文本替换</title>
		<link>http://www.ategpu.com/2009/12/09/linux%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%9avisedbash%e4%b8%ad%e7%9a%84%e6%96%87%e6%9c%ac%e6%9b%bf%e6%8d%a2.html</link>
		<comments>http://www.ategpu.com/2009/12/09/linux%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%9avisedbash%e4%b8%ad%e7%9a%84%e6%96%87%e6%9c%ac%e6%9b%bf%e6%8d%a2.html#comments</comments>
		<pubDate>Wed, 09 Dec 2009 03:56:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[News]]></category>

		<category><![CDATA[vi sed bash]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2009/12/09/linux%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%9avisedbash%e4%b8%ad%e7%9a%84%e6%96%87%e6%9c%ac%e6%9b%bf%e6%8d%a2.html</guid>
		<description><![CDATA[非常实用，转载！
平时工作的时候写不同部分的代码所要遵循的code rule也是不同的，一共有三套code rule，从命名规则，缩进到宏定义限制都相差不少。我有的时候会弄混，发现使用vi和sed可以很快地处理这类问题，把这几天所用过的命令总结了一下，以后也有个参考。
vi用来处理单个文件很合适，并且可以随时undo；sed适合处理多个文件，如果使用了-i选项处理之前最好做备份。
本文中提到的命令均以&#8221;"括起来，实际使用中是不需要输入&#8221;"的。本文中提到的命令都经过测试，但也许还存在问题，可以e-mai我。
使用vi打开一个文本文件时，如果不是以UNIX LF方式结尾，而是以DOS的 CR/LF结尾，会在屏幕的最后以行提示[DOS]字样。使用winCVS的默认设置所抓的code是以CR/LF结尾的，如果是Bash脚本，直接执行的话会报error。
在vi中执行命令前记得使用ESC切换到一般模式。
在vi中使用&#8221;:%! col -bx&#8221;可以去掉CR，或者&#8221;:%s/^M$//g&#8221;。&#8221;^M&#8220;是回车，vi中输入这种特殊字符需要先ctrl+v，然后按下相应的键，这里是回车键。末尾的g表示替换所有的，否则只替换一次。
vi基本的字符串替换如下：
&#8220;:%s/oldstring/newstring/g&#8221; 这个是在全文替换oldstring为newstring，如
&#8220;:%s/^ *//g&#8221; 这条命令去掉所有的行首空格
&#8220;:%s/\t/ /g&#8221; 这条命令把所有的TAB键换成4个空格
也可以指定行（%表示全文），如
&#8220;:123,456 s/old/new/g&#8221; 表示把123到456之间的old替换成new，注意s前有个空格，如果没加这个空格，vi将只显示匹配的结果，但不做替换。（奇怪的是&#8221;:123,456y&#8221;命令不需要加空格）
&#8220;:,$ s/old/new/g&#8221; 表示在当前行到结尾行之间替换
&#8220;:1, s/old/new/g&#8221; 表示从开头当当前行。
&#8220;:g/match/s/old/new/g&#8221; 表示在每个包含match的行中使用new替换old
vi中在编辑模式下输入&#8221;:&#8221;，可以使用上下方向键来选择历史命令。
也可以在命令中使用正则表达式，比如
&#8220;:%s/a[b&#124;c&#124;d]e/afe/g&#8221; 将把匹配&#8221;a[b&#124;c&#124;d]e&#8221;的字符串如&#8221;abe&#8221;"ace&#8221;&#8220;ade&#8221;替换成afe
正则表达式就不详述了，以后有时间再总结吧。
对于多个命令，可以放到一个文件中，如：
vi a.c b.c c.c -s viscript
viscript可以这样写：
:%s/\t/ /g
:w
:next

:%s/\t/ /g
:w
:next

:%s/\t/ /g
:wq
这很显然不是明智的做法，这里只是举个例子。还是用sed处理多个文件吧。


sed单行命令可以和find, xargs结合起来，完成对多个文件的文本替换。如
find . -name &#8220;*.[ch]&#8221; -exec sed -i &#8217;s/\t/ /g&#8217; {} \;
或者 find . -name &#8220;*.[c&#124;h]&#8221; &#124; xargs sed -i &#8217;s/\t/ /g&#8217;
都可以把当前目录下的.c .h文件中的TAB替换成4个空格。
sed提供的域提取功能可以进行比较复杂的替换如
&#8220;sed &#8217;s/\(\/\/*\)\(.*\)/\/\*\2\*\//&#8216; test.c&#8221;
将把test.c中所有的如&#8221;//comment&#8221; &#8220;int a; //comment&#8221; [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2009/12/09/linux%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%9avisedbash%e4%b8%ad%e7%9a%84%e6%96%87%e6%9c%ac%e6%9b%bf%e6%8d%a2.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>recovery ubuntu in winxp</title>
		<link>http://www.ategpu.com/2009/10/28/recovery-ubuntu-in-winxp.html</link>
		<comments>http://www.ategpu.com/2009/10/28/recovery-ubuntu-in-winxp.html#comments</comments>
		<pubDate>Wed, 28 Oct 2009 15:28:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/?p=513</guid>
		<description><![CDATA[由于重装的xp，所以准备恢复一下ubuntu。网上找了一圈，方法都不太适合我。
后面发现了一个超简单的方法恢复引导，现在做记录如下。
下载个grub for dos，把grldr这个文件复制到c:\
然后编辑c:\boot.ini (去掉只读属性)
如果看见timeout=0, 就改为timeout=15
把
C:\GRLDR=&#8221;GRUB for DOS Menu&#8221;
加入c:\boot.ini 的最后一行
新建一个文本文件名为c:\menu.lst, 内容为
color black/cyan yellow/cyan
timeout 15
default 0
title Ubuntu
find &#8211;set-root /boot/vmlinuz-2.6.24-19-generic
kernel /boot/vmlinuz-2.6.24-19-generic root=UUID=b8a285d9-f33e-4d9c-b72c-2c11175add9e ro quiet splash
initrd /boot/initrd.img-2.6.24-19-generic
这时候你启动windows XP的时候就可以选择grub for dos。
这里最关键的是ubuntu的版本号，和UUID的修改，当然我们不可能记住这些东西。所以我下载了一个windows可以查看linux的文件的工具，explore2fs。用这个工具去boot\grub下到处menu.list，呵呵里面就有我们需要的版本号和UUID了，直接复制过来。
新的内容如下
title Ubuntu
find &#8211;set-root /boot/vmlinuz-2.6.24-16-generic
kernel /boot/vmlinuz-2.6.24-16-generic root=UUID=d88e794a-24bb-4a07-aa69-bc0b26218fdd ro quiet splash
initrd /boot/initrd.img-2.6.24-16-generic
呵呵，直接重启，然后选中grub for dos，再选中Ubuntu 。呵呵顺利启动ubuntu．
转载请注明出处！
]]></description>
		<wfw:commentRss>http://www.ategpu.com/2009/10/28/recovery-ubuntu-in-winxp.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>第3次的vincent研究完成，milestone</title>
		<link>http://www.ategpu.com/2009/10/27/vincent_milestone.html</link>
		<comments>http://www.ategpu.com/2009/10/27/vincent_milestone.html#comments</comments>
		<pubDate>Tue, 27 Oct 2009 15:02:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[opengl es]]></category>

		<category><![CDATA[milestone]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/?p=511</guid>
		<description><![CDATA[第3次的vincent研究完成，milestone.
记录一下，不容易，终于分析清楚了，应该可以开始测试了。历时3个月，每周一致周四晚上在实验室研究，花费了不少时间。辛苦终于要开始收获了，下面应该进度会更快的。
]]></description>
		<wfw:commentRss>http://www.ategpu.com/2009/10/27/vincent_milestone.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>OpenGL讲座稿_5. DirectX与OpenGL</title>
		<link>http://www.ategpu.com/2009/10/21/opengl%e8%ae%b2%e5%ba%a7%e7%a8%bf_5-directx%e4%b8%8eopengl.html</link>
		<comments>http://www.ategpu.com/2009/10/21/opengl%e8%ae%b2%e5%ba%a7%e7%a8%bf_5-directx%e4%b8%8eopengl.html#comments</comments>
		<pubDate>Wed, 21 Oct 2009 01:57:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[OpenGL]]></category>

		<category><![CDATA[history]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2009/10/21/opengl%e8%ae%b2%e5%ba%a7%e7%a8%bf_5-directx%e4%b8%8eopengl.html</guid>
		<description><![CDATA[DirectX是用途极为广泛的API，它并不局限于显示领域。目前的 DirectX中包含有Direct Graphics(Direct 3D + Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件，它提供了一整套的多媒体接口方案。但由于DirectX版本的更新主要在3D图形技术上，因此DirectX给人一种图形 API的感觉。
微软发布DirectX的初衷是为了弥补Windows系统对图形管理的不利，但第一代DirectX并未成功，因为当时OpenGL支持者众多，而初出茅庐的DirectX 1则显得稚嫩许多。
第二代DirectX在2D图形方面做了改进，加入了一些2D动态效果，采用了Direct3D的技术。3D应用程序接口采用&#8221;平滑模拟&#8221;和&#8221;RGB模拟&#8221; 两种模拟方式对3D图形进行加速计算。同时也采用了更加友好的用户设置程序并更正了应用程序接口的许多问题。整个DirectX的设计架构基本确定，它也是如今的DirectX的雏形。
1997年3D概念进入游戏界，DirectX 3推出了。DirectX 3版本是DirectX 2的简单升级版。
微软没有推出DirectX 4版本，直接推出了DirectX 5。DirectX 5对D3D的内容做了彻底修改，并且使游戏开发商们移植到他们的应用程序接口中更容易、更方便。除此之外，许多应用程序接口的细节部分也得到了改进。加入了雾化效果、Alpha混合等3D特效，使3D游戏中的空间感和真实感得以增强，还加入了S3的纹理压缩技术。同时，DirectX 5在其它各组件方面也有加强。
DirectX 6推出时，已被绝大多数厂商认可并成为实际上的主打游戏API。在这一版本的DirectX中，加入了双线性过滤、三线性过滤等优化3D图像质量的技术，游戏中的3D技术逐渐走入成熟阶段。
DirectX 7的推出伴随着产生了一个GPU的概念，同时在DirectX 7加入了硬件几何转换与光源处理(T&#38;L)技术。虽然OpenGL中已有相关技术，但此前从未在民用级硬件中出现。GPU实际上是一组图形函数的集合，而这些函数由硬件实现，主要用于处理3D游戏中物体移动时的坐标转换及光源处理。硬件T&#38;L的出现一定程度上将CPU解放出来。这一方面提高了整个系统的工作效率，另一方面则让显卡在一定程度上摆脱了CPU的束缚。
DirectX 8的出现全面赶超OpenGL。在DirectX 8中，硬件T&#38;L被Vertex Shader和Pixel Shader取代。VS和PS单元的灵活性更大，它使GPU真正成为了可编程的处理器。这意味着程序员可通过它们实现3D场景构建的难度大大降低。VS和 PS在游戏中带来的最大改变就在于水面的效果。
DirectX 8中的Shader单元还是个简单尝试， DirectX 9中的Shader则成为了标准配置。除了版本升级到2.0外，DirectX 9中PS单元的渲染精度已达到浮点精度，传统的硬件T&#38;L单元也被取消。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多，新的VertexShader标准增加了流程控制，更多的常量，每个程序的着色指令增加到了1024条。尽管新的PixelShader(象素着色引擎) 还不支持流程控制，但最大指令数增加到了160条。在DirectX9里,顶点着色编程比以前复杂得多，新的VertexShader标准增加了流程控制，更多的常量，每个程序的VertexShader指令增加到了1024条。尽管新的象素着色还不支持流程控制，但最大指令数增加到了160条。 DirectX9真正关键的特性是64位RGBA色彩(每种颜色信道16位整数)和128位浮点精度(每种颜色信道32位浮点数)。颜色精度的巨大增加将带来让人震惊的视觉效果和图像质量。
预计在2005 年推出的DirectX10将完全放弃GPU当中的固定渲染模式，并且支持GPU行为的完全自由化，即GPU不在明确划分像素着色和顶点着色单元，并且支持多种任务，如2D/3D/视频加速等等任务的自由分配。DirectX10将加入Shader4.0技术，并首度实现RayTracing光线追踪，将位移贴图Displacement作为标准之一。
DirectX 与OpenGL相比的优点：OpenGL仅专注于图形(特别是3D图形)的处理，并且有部分图像处理能力。而DirectX则主要针对游戏而设计的，不仅有图形方面的处理，还包含了图像、声音和音乐、输入设备等等。因此从开发游戏的角度来说，DirectX拥有绝对的优势。另一方面，OpenGL由(由多个成员组成的)ARB进行管理和维护，因此功能的增加和版本的升级受到如知识产权(IP)争议等诸多因素的限制。而DirectX是由Microsoft 独立开发和维护的，本身不存在知识产权的争议问题，升级和维护方面也能够得到Microsoft的积极支持，从双方版本的发展历程就可见一斑。
DirectX 与OpenGL相比的缺点：OpenGL由于其&#8221;开放性&#8221;而能够得到众多软硬件厂商的支持，同时它是跨硬件平台、跨操作系统、跨语言的，通用性非常广。而 DirectX则是&#8221;专为Windows下的游戏程序设计&#8221;的，在中低端民用平台上具有比较好的优势，但从整个图形处理领域来说，实力则与OpenGL相差很多。
from: http://kwun.blogbus.com/logs/19051218.html
]]></description>
		<wfw:commentRss>http://www.ategpu.com/2009/10/21/opengl%e8%ae%b2%e5%ba%a7%e7%a8%bf_5-directx%e4%b8%8eopengl.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>OpenGL讲座稿_4. OpenGL2.0</title>
		<link>http://www.ategpu.com/2009/10/21/opengl%e8%ae%b2%e5%ba%a7%e7%a8%bf_4-opengl20.html</link>
		<comments>http://www.ategpu.com/2009/10/21/opengl%e8%ae%b2%e5%ba%a7%e7%a8%bf_4-opengl20.html#comments</comments>
		<pubDate>Wed, 21 Oct 2009 01:56:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[OpenGL]]></category>

		<category><![CDATA[Hisitory]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2009/10/21/opengl%e8%ae%b2%e5%ba%a7%e7%a8%bf_4-opengl20.html</guid>
		<description><![CDATA[至OpenGL 1.3为止，OpenGL的发展几乎处于停滞不前的状态，主要的进展是OpenGL扩展指令的推出。这些扩展指令是一些绘图功能、视频及绘图的整合工具，组成了一个混乱的扩展指令组，其中许多都是为专用应用程序而设计的，对大多数需要一致性开发平台的ISV(独立软件开发商，Independent Software Vender)来说并不实用。ARB也已经发现为何无法将OpenGL往前推进的几个原因，包括知识产权(IP)争论的潜伏危机。希望参与ARB(委员会的策划)并提供技术、但也同时也想保护各自IP的厂商大感挫折。
在 2001年9月的ARB会议上，3Dlabs展示了他们的OpenGL 2.0版本(在过去，SGI是ARB事实上的领导者、与下一代扩展指令的发起人。由于SGI明智的将其资源投注在公司的重整上，3Dlabs因而逐渐地在会议中扮演起更为主动的角色，并着手通过教育上的努力，为即将于九月份会议上提出的OpenGL 2.0做准备。)。ARB接受了3Dlabs的提议进行OpenGL 2.0架构的开发，他们也描绘出一个清楚的发展路线。由于已经相当明确，因此OpenGL的主要且近期的目标，就在于启动并开发硬件的可编程能力。然而 OpenGL在其它地方也需要进行更新。OpenGL是在1992被开发出来的，当时的硬件较低级、且在内存管理上并不是那么注重。现在该团体被赋予在 OpenGL中加上内存管理，以便支持高级像素处理的责任。此外，OpenGL还需要和DirectX在材质压缩、也就是ARB所谓的像素封装上进行竞争或合作。接着，嵌入式绘图对OpenGL来说也是非常关键的一项需求。
最后，OpenML的开发兼推行商Khronos Group，则希望将OpenML加入OpenGL的共同发展项目中，以开发结合视频功能与高级绘图能力的产品。此外，包含3Dlabs、Sun(升阳)、Intel、 Discreet、Evans、Sutherland、Pinnacle、RealViz与SGI在内的OpenML组织，对嵌入式设备也有意涉足。他们希望藉由建立互连网设备上的多媒体标准，可以在PDA游戏的移植上有所突破，提供真正的绘图、视频和互动能力。
要开发高级OpenGL标准最先要做的一步，就是回头整合与OpenGL 1.3间的兼容性，同时藉由在一些必备功能、如顶点与像素处理及内存管理上，与DirectX共同合作以维持均势。在第一阶段，OpenGL将会向下保留对Open GL 1.3的完整兼容性。为了达成这一目标，OpenGL 2.0将由OpenGL 1.3现有的功能、搭配完全兼容的新功能所组成。这个好处在于它也将开始对在ARB停滞不前时期，数量不断增加、纠缠不清的扩展指令做一彻底精简。此外，硬件可编程能力的实现，将提供一个更好的方法以整合现有的扩展指令。
下一步就是合成一个提供开发者更多精简API的&#8221;纯OpenGL 2.0&#8243;。这可通过将特定OpenGL功能规范为&#8221;旧式&#8221;功能，并指导开发商采用更具有弹性的可编程功能、而扬弃固定不变的函数性功能来达成(图略)。
2004 年9月7日发布OpenGL2.0。主版本号的升级代表这一版本支持高级可编程着色器(high-level programmable shaders)。而从各个版本的升级时间来看，也会发现ARB对OpenGL2.0的推进态度是非常积极的(1.3之前为每三年做一次版本升级，之后为每年一次升级)。
可编程能力是OpenGL2.0里的一个关键词，这表示它是设计来供应用程序存取运用的。为使其符合大部分应用程序与用户的标准，绘图可编程能力通过一种被CPU所采用的可编程能力、类似高级程序设计语言的方式加入的。它将提供一个丰富的，独立于硬件的功能集，并专为在OpenGL架构下使用所设计。
- 可编程顶点处理将会是最常被谈论到的功能。它将取代坐标转换、材质应用程序及照明，并且允许进行随机个别顶点运算。
- 可编程片段处理将取代材质存取、材质应用及雾化功能，以及随机个别片段运算这一开发者企盼已久的功能。
- 可编程图像格式将取代固定格式的封装和解封装运算，在自OpenGL传送或接收像素数据时，将允许类型与格式进行任意组合。
个想法是为了藉由提供可编程能力、与丰富且常效性的功能来取代复杂度，以减少对现有及未来扩展指令的需求。
新API的特色包括：
- 阴影语言。一种独立于硬件的OpenGL2.0阴影语言，与OpenGL1.3有紧密的整合。现有的状态机又增加了可编程单元，将可增设 OpenGL1.3固定式的替代功能。新的着色器可自动纪录现有的OpenGL状态(例如进行一个简单的光源转换而无须覆写参数管理)。它以C为架构，加上容易理解的向量和矩阵类型，同时整合了一些Renderman功能。这套语言会虚拟资源管线，因此对大多数的程序设计师来说便不用去考虑资源管理。将来也会有相同形式、供顶点着色与片段着色之用的语言，并加上一些特别内建的功能和数据限定。
- 顶点处理。其功能在于照明、材质和几何图形的弹性。顶点程序取代部分的OpenGL管线如顶点转换、正规转换、正规化和尺寸重设、光照、彩色材质应用程序、色彩强化、材质坐标产生以及材质坐标转换。顶点着色并不取代下列功能：透视投影与视觉坐标对应、柱状及用户剪裁、隐面消除、原始组合、双面照明选择、多重模式处理、多边形平移及多边形模式。
- 片段处理器。其功能为材质存取、插值计算与像素运算弹性。OpenGL2.0增加了片段处理器能力，将取代下列功能：内插值顶点数据运算、像素缩放、材质存取、缩放和偏向、材质应用、色表查找、雾化、旋绕以及OpenGL管线中的色彩矩阵部分。片段着色不取代下列功能：OpenGL的阴影模型、直方图、覆盖度、极值、像素所有权测试、像素封装和解封装、剪裁、点刻、alpha测试、深度测试、模印测试、alpha混色、逻辑运算、抖动及平面屏蔽。
- 封装和解封装运算。封装和解封装运算的目的在于将&#8221;应用像素&#8221;转换成一致性的像素群数据流。在数据传送到解封装处理器前先运用未封装储存模式。解封装处理器与 应用-&#62;OpenGL 的传输有关，而封装处理器则负责 OpenGL-&#62;应用的传输这部分，两者都跟复制运算没有关系。绘图子系统内的复制只使用片段处理器。
- 数据移动与内存管理。为了增进性能，数据移动量必需减至最低。视觉处理的主要数据为：顶点数据(色彩、正规、位置、用户定义等)以及图像数据(材质、图像、像素缓冲区)。建立与管理OpenGL对象的机制大体上就是定位、连结与通过相同接口控制对象，并运用顶点数组、图像、材质、着色、显示清单以及像素缓冲区。OpenGL2.0提供更好的内存管理，并提供应用程序对数据移动的控制能力、更好的顶点处理能力、将数据抓进OpenGL的更有效方法以及 OpenGL对象的直接存取。此外，内存管理功能能够消除为增进数据流量而产生的数据备份，从而大幅提升性能。
- 异步OpenGL。加入了异步运算，具有一般化的时间控制能力，提供了更好的并行化和同步化能力。这将有助于增进平行化和运算时机的控制。
- Glsync。一种新的OpenGL数据类型，用于提供统一的同步化机制。
此外增加了许多额外的功能及能力如：
- FlushStream。OpenGL2.0之前的规格在数据暂存上允许过多的自由度。清除功能被滥用且迫使驱动程序对此做最优化。真正的清除功能是用在当应用程序已经下完渲染指令后才做的。暂存的渲染工作应该和应用程序在处理其它事项时并行运行，在到Glsync上等待前，必需要确定暂存起来的命令会被加以处理。FlushStream就用于解决这一问题。
- 异步数据链路。可在数据复制前提供回传功能，并在数据进行连结时允许主机并行处理。执行线程在OpenGL读数据时可以做其它事。这可以避免内存内容在OpenGL存取完成前被修改，不过这在可以安全修改内存内容时需要加以通知。
- 后台命令流。藉由后台命令流功能，另一个命令流可以下达异步连结的指令，给比优先级较低的渲染工作执行。
- 场消隐通知。让OpenGL可以对视频输出和程序代码进行同步化。
from: http://kwun.blogbus.com/logs/19051080.html
]]></description>
		<wfw:commentRss>http://www.ategpu.com/2009/10/21/opengl%e8%ae%b2%e5%ba%a7%e7%a8%bf_4-opengl20.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
