| @jserv | 19:59 |
| @frid | gogogo |
| @jserv | 20:00 |
| @jserv | ....... buffering ......... |
| @jesse_ | 時間到囉 :) |
| * jesse_ 拍手~ |
| @moto_ | yoyoyo |
| @frid | clap |
| * moto_ 拍手 |
| Vela | :) |
| * AceLan 啪啪啪 |
| @jserv | ..... starts .... |
| @jserv | 各位好,在下是 Jim Huang <jserv @ kaffe.org>,有幸能在這裡與各位朋友 |
| @jserv | 分享一些經驗。當然,小弟只是與各位分享,並不是什麼權威,所以很可能無 |
| @jserv | 法招架,但沒關係,請多討論,說不定在眾人腦力激盪、合力找資料與分析下 |
| @jserv | ,說不定很快就可以釐清問題。 |
| @jserv | 本次 IRC Conference 基本上是 FreeDesktop.org 與 X.org 嶄新發展介紹的 |
| @jserv | 續集,這裡假設與會的朋友已有上一場的經驗與認知,如果沒有,可以自行參 |
| @jserv | 閱過去的 IRC log: |
| @jserv | http://ircconf.debian.org.tw/ |
| @jserv | 感謝各位朋友抽空共襄盛舉,再來要感謝神奇的網路把物理距離遙遠的我們, |
| @jserv | 能夠透過 IRC 作即時的交流,有任何問題或建言,請踴躍提出,謝謝! |
| @jserv | --------------------------------------------------------------------- |
| @jserv | Copright (c) 2004 Jim Huang and Debian@Taiwan IRC Conference |
| @jserv | Attendants. All rights reserved. |
| @jserv | Permitted to redistribute the following IRC log content with |
| @jserv | authors' information (nickname, date, or something identified) |
| @jserv | without modifications. |
| @jserv | For advanced usage (such as COMMERCIAL purpose and publish), |
| @jserv | you MUST contact the original author(s). |
| @jserv | --------------------------------------------------------------------- |
| @jserv | 本次 IRC Conference 大致分兩個部分,前半部討論嶄新的 X Extensions,而 |
| @jserv | 後半部則是簡單介紹一些非 FreeDesktop.org 直接相關,但是頗值得一書的項 |
| @jserv | 目,當然也包含筆者近來進行的一些計畫與實驗。關於嶄新的 X Extensions, |
| @jserv | 筆者規劃了以下流程: |
| @jserv | GL --> DRI/DRM --> X Render Extension --> Font (Xft / Fontconfig) |
| @jserv | \ |
| @jserv | \__ |
| @jserv | \--- Cairo --> Glitz |
| @jserv | |
| @jserv | XDamage + XFixes --> XComposite |
| @jserv | |
| @jserv | Sun Looking Glass --> XEvIE |
| @jserv | XInput Hotplug |
| @jserv | 有鑑於許多朋友反應上次 IRC Conference 的節奏過快,所以本次偏向較少的文 |
| @jserv | 字與較多的討論,還請各位朋友踴躍提問。 |
| @jserv | --------------------------------------------------------------------- |
| -!- _benny_ [~benny@218-175-26-94.dynamic.hinet.net] has joined #debian.tw |
| @jserv | DRI -- Direct Rendering Infrastructure |
| @jserv | DRI 是 XFree86 相當重要的嶄新設計,這在許多層面已經跳脫傳統 Client / |
| @jserv | Server 的架構了。Client / Server 架構下使用相當緩慢的 transport 機制 |
| @jserv | ,從 Client 端將 rendering 指令,送到 Server 端,這在普通的應用來說, |
| @jserv | 已經足夠了,但是對於 3D Graphics 顯然是很大的效能瓶頸 -- 耗費太多時間 |
| @jserv | 在 round-trip (繪圖指令的往返) 通信上 [按1]。於是,能否提供更為直覺、 |
| @jserv | 簡單的設計,讓 client 可以直接與 Graphics Hardward 對話呢? |
| @jserv | [按1] X Window System 的 Transport 瓶頸可以從其架構得知 -- |
| @jserv | http://gallery.debian.org.tw/2004-10-21/x_arch_comparison ] |
| @jserv | 在探討 DRI 之前,筆者要強調 DRI 對於 XFree86 / XOrg 的重要性。較早接 |
| @jserv | 觸 Linux 或 FreeBSD 的朋友都經歷過 XFree86 3.x 系列必須選用特定顯示卡 |
| @jserv | X server 的年代,當時的設計還是僅依循 DDX (Device-Dependent X) 與 DIX |
| @jserv | (Device-Independent X) 的劃分,其硬體加速能力也是有相當的限制。 |
| -!- yungyuc [~yyc@220-134-24-5.HINET-IP.hinet.net] has joined #Debian.tw |
| @jserv | 而在 March 8, 2000 的 XFree86 4.0 版釋出後,有了完全的改觀,一來是整合 |
| @jserv | MetroLink (一家相當著名的商業 X Server 製造商 [按2]) 貢獻的模組化程式 |
| @jserv | 碼,二來就是 DRI 架構的落實,給予更大的彈性與更好的表現。這段發展歷史 |
| @jserv | 變遷,筆者整理成以下的表格: |
| @jserv | 日期 | 重大事件 |
| @jserv | (年/月/日) | |
| @jserv | ----------- ---------------------------------------------------------- |
| @jserv | 1998/8 | 展開 DRI High Level 設計 (評估階段) |
| @jserv | 1998/12 | 展開 DRI Low Level 設計 |
| @jserv | 1999/1 | DRI 實作計畫展開,與 MESA (Free/Open Source Open GL 實作) |
| @jserv | | 計畫整合發展 |
| @jserv | 1999/2/1 | MESA 3.1 採 XFree86 / BSD / MIT 型態授權 |
| @jserv | 1999/2/16 | SGI 將其 GLX (GL Extension) 實作以 open source 授權釋出 |
| @jserv | 1999/5/12 | DRI Low Level 設計文件上線 |
| @jserv | 1999/6 | DRI 1.0 實作釋出 |
| @jserv | 2000/3/8 | XFree86 version 4.0 版釋出 |
| @jserv | 2000/6 | SGI 捐出 GLX 與字型處理技術給 XFree86 |
| @jserv | 2000/10/27 | X Render Extension 首度現身於 XFree86 4.0.1d |
| @jserv | [按2] 筆者已經找不到 MetroLink 公司的網頁了 |
| @jserv | --------------------------------------------------------------------- |
| @jserv | Questions? |
| @jserv | [工商服務時間] |
| _benny_ | LOL |
| @frid | ha |
| @AceLan | yo |
| @jserv | 新酷音的發展網頁已經上線,請多加支持: http://chewing.csie.net/ |
| @jserv | 謝謝! |
| @jserv | --------------------------------------------------------------------- |
| @AceLan | KDE@Taiwan 聚會 04/01/23 請參考網頁 http://kde.linux.org.tw/ |
| @AceLan | 謝謝 |
| @jserv | 直接與硬體溝通的 Graphics Toolkits / Window System 相繼被提出,也有不 |
| @jserv | 錯的效能表現,但是在 X Window System 的設計原則,是希望透過層層的架構 |
| @jserv | ,讓硬體能夠抽象化,是否意味著我們將無法處理 3D Graphics 呢?這是個相 |
| @jserv | 當大的挑戰,一方面要能處理硬體,另一方面要依循 X Window System 的設計 |
| @jserv | 原則,於是 XFree86 Developer 提出 DRI (Direct Rendering Infrastructure) |
| * AceLan 笑得倒在地上打滾。 |
| _benny_ | 啊 |
| @jserv | 的機制。 |
| @jserv | 不同於過去使用 Xlib 來傳遞 rendering request 給 X server 的方式,DRI |
| _benny_ | 來不及 |
| @jserv | 引入一個捷徑,重點在於事先部署好能夠直接與硬體溝通的 Kernel Driver,然 |
| @jserv | 後 DRI 直接將 rendering commands/data 傳遞給該 driver,X Client 在此機 |
| @jserv | 制下,仍是與其他 2D 或 3D X Client 共享 X Resources。那麼,究竟是哪個環 |
| -!- descent [~descent@219-84-137-217-adsl-tpe.static.so-net.net.tw] has quit [EOF From client] |
| @jserv | 節特別了呢? |
| @jserv | X Resources 的處理還是透過 X server 原有的機制,但是真實的 rendering, |
| @jserv | 或者明確來說,對螢幕/輸出裝置的顯示,是直接透過 Kernel-level driver 來 |
| @jserv | 實現的。這意味著,透過 DRI,Graphics driver 的開發者可以將過去開發的 DDX |
| @jserv | driver 移轉到 DRI Kernel Driver、Client DRI Driver library,或者是 X |
| @jserv | server 中,這樣一來,除了效能的優勢,再來是安全性的考量,理論上,User |
| @jserv | --------------------------------------------------------------------- |
| @jserv | Questions? |
| _benny_ | nope |
| * jserv 納悶:「這麼枯燥的文字大家怎麼都看得懂?」 |
| @frid | 看不懂才沒問題..Orz |
| _benny_ | 請問 |
| @jserv | 稍微補充一下 |
| _benny_ | xfree-drm |
| _benny_ | 是否沒有支援 2.6 kernel? |
| * AceLan 在等下次的工商時間 XD |
| @jserv | _benny_: 有的 |
| _benny_ | AceLan: 讓人家先啦6 |
| @AceLan | _benny_: 一起阿 |
| @jserv | _benny_: 但是 Kernel 2.6 的 DRM 明顯比 2.4 series 少許多 |
| -!- Sinsun [HydraIRC@219-84-86-97-adsl-tpe.static.so-net.net.tw] has joined #debian.tw |
| _benny_ | jserv: 啊。。那請問 kernel 內的跟自己弄成 module 的插在那裡 |
| @jserv | _benny_: 因為 Linux Kernel 2.6 採用新的 MMIO 機制 |
| @jserv | _benny_: 好問題,稍後會介紹 |
| _benny_ | ok |
| _benny_ | 請繼續 |
| @jserv | --------------------------------------------------------------------- |
| @jserv | 有了以上的概念,咱們先理解以下關鍵字: |
| @jserv | . RM --> Resource Management |
| @jserv | . 2D --> 2D Commands and Data |
| @jserv | . 3D --> 3D Commands and Data |
| @jserv | . SAREA --> DRM Shared Memory |
| @jserv | 接著就要進入重頭戲 -- XFree86 4.x DRI 運作示意圖: |
| @jserv | http://gallery.debian.org.tw/2004-12-02/dri_gram |
| @jserv | 是的,DRI 的引入後,整個軟體架構變得相當複雜,讓我們抽絲剝繭,揭開這一切 |
| @jserv | 神秘的面紗。 |
| @jserv | --------------------------------------------------------------------- |
| @jserv | 這裡,我們將停頓片刻,讓各位看清楚這複雜的 DRI 架構 |
| @jserv | 呼應上一場 IRC Conference 裡頭的重點: |
| @jserv | 「X Window System 的精髓在於 X Protocol」 |
| @jserv | 由上往下看,在 Xlib 之下的就是 Protocol Engine,為數眾多的 command/data |
| @jserv | 組合將透過網路 (廣義的說法) 派送到 Server,而 X server 處理 X Protocol 則 |
| @jserv | 有對應的 Protocol Decoder,這個部分並沒有涉入多少 Grapghics,就抽象來說, |
| @jserv | 可以視為 Data bus,於是我們稱為 X Transport,這是無法避免的成本,儘管已經 |
| @jserv | 有許多改良的途徑相繼提出,比方說透過 POSIX Shared Memory。 |
| @jserv | 圖-1 中央的流程便是我們熟知的模式,而一旦導入 X11/OpenGL 後,情勢就有很大 |
| @jserv | 的轉變。 |
| @jserv | --------------------------------------------------------------------- |
| -!- descent [descent2@219-84-137-217-adsl-tpe.static.so-net.net.tw] has joined #debian.tw |
| @jserv | 再度補充,Transport 的實作幾乎都是商業 X server 的賣點 |
| @jserv | 以 Sun 的 X Window System 來說,其 X11 Transport 的設計就領先同業有相當大的距離 |
| @jserv | 這一方面是針對 Sparc 作了最佳化,另一方面是獲得 Solaris 作業系統的整合 |
| @jserv | 但無論如何,我們可以發現另一個瓶頸 |
| @jserv | 就是 Rendering 的處理 |
| @jserv | 我們的重點將置放於 X11/OpenGL 的展現 |
| @jserv | Direct rendering program (3D): |
| @jserv | Direct rendering (3D data) -> 3D data -> Graphics Hardware |
| @jserv | Direct rendering program (2D): |
| @jserv | X Protocol Encode -> Protocol Decode -> DIX -> |
| @jserv | XAA -> DDX Driver -> Graphics Hardware |
| @jserv | |
| @jserv | Indirect rendering program (2D): |
| @jserv | X Protocol Encode -> Protocol Decode -> DIX -> |
| @jserv | XAA -> DDX Driver -> Graphics Hardware |
| @jserv | Indirect rendering program (3D): |
| @jserv | X Protocol Decode -> GLX -> Mesa (including SW rasterizer) -> |
| @jserv | DDX Driver -> Graphics Hardware |
| @jserv | --------------------------------------------------------------------- |
| @jserv | Questions |
| @jserv | 回應剛剛 _benny_ 提到的問題 |
| -!- SchizShia [C@61-230-80-229.dynamic.hinet.net] has joined #debian.tw |
| _benny_ | 有點難懂 |
| _benny_ | XD |
| @jserv | 在過去 XFree86 3.x 系列的實作,DDX driver 有很多部分是處理底層 device routines |
| @jserv | 我們都知道作業系統在做 content switching 是無法避免的成本消耗 |
| _benny_ | 嗯 |
| @jserv | DDX driver 都帶有許多 magic 成分在 |
| @frid | magic |
| @jserv | 除了 XFree86 4.x 的 DRI 之外,有個稱為 Utah GLX 的架構 |
| @jserv | 在觀念上是相當接近的,但是實作的技術有很大的落差 |
| @jserv | DRI 特別之處是需要 Kernel Level 的整合 |
| -!- how [~how@59-104-242-123.adsl.dynamic.seed.net.tw] has joined #debian.tw |
| @jserv | 現在的問題在於能否降低非必要的 latency |
| _benny_ | true |
| @jserv | [工商服務時間] |
| @AceLan | Qt Quarterly 中文翻譯計畫 歡迎大家一起參與 - http://kde.linux.org.tw/index.php?Qt%20Quarterly%28Traditional%20Chinese%29 |
| SchizShia | ... |
| @frid | ha |
| -!- tedyu [~tedyu@79-208.dorm.ncu.edu.tw] has joined #debian.tw |
| * AceLan 貪婪地舔了舔 _benny_ 的臉。 |
| @jserv | 請支持 Qt Quarterly 中文翻譯計畫 :-) |
| _benny_ | 歡迎各位參加 GOT 的聚會 http://wiki.gentoo.org.tw/index.php/GentooUserParty2004-1 也有 jserv 的演講喔!! |
| _benny_ | 可惡, AceLan 打好再那邊等 |
| * AceLan 笑得倒在地上打滾。 |
| _benny_ | 聚會日期是 1/15 |
| @jserv | 對了,有個好消息 |
| @frid | trigger |
| @jserv | 感謝 courage 兄的貢獻,現在成果已經進駐 svn.csie.net,請見: |
| @jserv | http://sdl-im.csie.net/ |
| @jserv | 這個專案的目標就是希望能夠提供 SDL 下的輸入法解決方案,目前 MS-IME |
| @jserv | 與 XIM 都已經初步支援了,希望最後這些成果可以整合到 SDL 官方 release |
| @jserv | 有興趣參與者,請聯絡 courage 兄或我,謝謝! |
| @jserv | 以往 SDL 的遊戲無法使用輸入法的窘境已經克服了! |
| @frid | cool |
| _benny_ | 廣告打完了 |
| @jserv | back |
| @jserv | --------------------------------------------------------------------- |
| * _benny_ 趁機非踢 AceLan |
| @jserv | 再回到上圖 |
| @jserv | 使用 MMIO: (Memory-mapped I/O) |
| @jserv | . OpenGL Renderer --> Graphics Hardware |
| @jserv | . DDX Driver --> Graphics Hardware |
| @jserv | 使用 SHM: (Shared Memory IPC) |
| @jserv | . DRM Library --> SAREA |
| @jserv | 使用 DMA: |
| @jserv | . DRM Driver --> Graphics Hardware |
| @jserv | 這裡是非常難懂的一段落,必須有足夠的 H/W Graphics Devices 知識才能徹底理解 |
| @jserv | 我試著用很簡單的話帶過 |
| @jserv | 為何要分如此多層次? |
| @jserv | 我們都知道 C/S 架構下的衝擊非常的大,DRI 架構的提出,就是提供許多緩衝的設計 |
| @jserv | 讓 SHM / MMIO / DMA 等基礎建立一系列 Hardware Acceleration 的可能性 |
| @jserv | --------------------------------------------------------------------- |
| @jserv | Questions? |
| * jserv 的網路卡住了 :( |
| @frid | !! |
| kanru | orz |
| SchizShia | ... |
| @jserv | 各位,小弟要換個 AP |
| @jserv | 造成不便請多見諒 |
| @frid | cheer jserv |
| @jserv | [工商服務時間] |
| _benny_ | 歡迎各位參加 GOT 的聚會 http://wiki.gentoo.org.tw/index.php/GentooUserParty2004-1 也有 jserv 的演講喔!! |
| _benny_ | 歡迎各位參加 GOT 的聚會 http://wiki.gentoo.org.tw/index.php/GentooUserParty2004-1 也有 jserv 的演講喔!! |
| _benny_ | 歡迎各位參加 GOT 的聚會 http://wiki.gentoo.org.tw/index.php/GentooUserParty2004-1 也有 jserv 的演講喔!! |
| _benny_ | 哈哈哈 |
| SchizShia | cheer jserv XD |
| _benny_ | 要被踢了 |
| kanru | XD |
| @frid | 哈哈 |
| @frid | 鬧場 |
| @AceLan | @_@ |
| @AceLan | KDE@Taiwan 聚會 04/01/23 請參考網頁 http://kde.linux.org.tw/ |
| @AceLan | KDE@Taiwan 聚會 04/01/23 請參考網頁 http://kde.linux.org.tw/ |
| @AceLan | KDE@Taiwan 聚會 04/01/23 請參考網頁 http://kde.linux.org.tw/ |
| _benny_ | 哈哈哈 |
| @AceLan | 也有 jserv 的演講喔!! |
| @frid | 哈 |
| * _benny_ 飛舔 AceLan |
| @frid | jserv 變成日本av 女優了 |
| @frid | 有他才有人潮 |
| @AceLan | jserv 超搶手的 |
| _benny_ | AceLan: 看在你也是 sony sucker 的份上,我就饒了你 :p |
| * AceLan 「嘿嘿嘿....」地奸笑了幾聲。 |
| @jserv | useless :( |
| @jserv | 好吧,繼續 |
| @frid | @_@ |
| * AceLan 狠狠的咬了 _benny_ 一口,把他咬的哇哇大叫...真爽 真爽 |
| * kanru hold jserv |
| _benny_ | 咬拆開變成 口交... |
| * AceLan 趁機偷咬 _benny_ :p |
| _benny_ | 原來。。。 |
| _benny_ | jserv: 繼續吧:p |
| @frid | 把他口交的哇哇大叫...真爽 真爽 |
| @jserv | 先跳過 DRI/DRM 複雜的設計,我們來探討 XInput Hotplug |
| * AceLan 撲通地跌了一跤。 |
| @jserv | --------------------------------------------------------------------- |
| @Tyson | .... |
| @jserv | XInput Hotplug 是個相當複雜的議題,但是對 Desktop 需求又是 |
| @jserv | 相當重要。試想,當我們將 USB 介面的手寫版插入時,X Window |
| @jserv | 可否自動偵測該 device,並且驅動其功能?Linux Kernel 可以提 |
| @jserv | 供 HAL 資訊,但是目前的 XFree86-based 實作在 XInput Hotplug |
| @jserv | 的不完善導致相當多問題。 |
| @jserv | |
| @jserv | XOrg hacker 著手處理這議題,整理各方意見放在 wiki page 中: |
| @jserv | |
| @jserv | http://xorg.freedesktop.org/wiki/XInputHotplug |
| @jserv | 就目前的設計來說,X server (XOrg) 並不支援 input devices 的 Hotplug,這 |
| @jserv | 表示說,你無法在不更動設定檔以及重新啟動 X server 的前提下,動態的新增或 |
| @jserv | 移除任何 input devices。然而,在 Linux Kernel 2.4 以來,Hotplug 的實作已 |
| @jserv | 經有相當卓越的設計,並且提出抽象化 (abstraction) 的途徑,可以很容易加入 |
| @jserv | input devices 的 hotplugging,包含鍵盤、滑鼠、搖桿,甚至是其他特殊的裝置。 |
| @jserv | XInputHotplug 的目標就是希望能夠銜接 Linux Kernel 或是底層 Kernel 提供的 |
| @jserv | Hotplug 機制,做到真正不需要更改設定檔,而能動態處理任何 input devices 的 |
| @jserv | 支援。 |
| @jserv | --------------------------------------------------------------------- |
| @jserv | Questions? |
| * jserv 繼續卡 :( |
| @frid | 所以在純文字下有hotplug 在X 夏不行.Orz |
| @jserv | frid: 這是好問題,XInput Hotplug 要實現必須很多方面配合 |
| @frid | jserv : 這後面會提到嗎? |
| @jserv | frid: Linux Kernel 2.4 系列以後,許多 character devices 的架構也獨立為 input device |
| descent | jserv, ex os kernel ?? |
| @jserv | frid: XOrg 也是朝這個方向前進 |
| @frid | jserv : nod! |
| @jserv | descent: 嗯 |
| @jserv | frid: 詳細的資訊與實作方式,在該 wiki 有介紹到 |
| -!- alecc [~alecc@218-163-2-216.dynamic.hinet.net] has joined #debian.tw |
| @jserv | --------------------------------------------------------------------- |
| @jserv | .. |
| @jserv | 敗 :( |
| _benny_ | :( |
| @frid | 無言.? Orz |
| @jserv | 網路又卡住了,真抱歉 :( |
| * frid 幫jserv 槌搥背 |
| descent | 改用有線如何 |
| @jserv | 接著,我們來看 XRender extension |
| @jserv | 就目前來說,Xft / Fontconfig / Xrender 這三者已經密切的整合在一起 |
| _benny_ | 酷 |
| @jserv | 但是,Xrender 對 Graphics Design 確有其意義在 |
| _benny_ | 重點來了 XD |
| @jserv | 引述我之前的筆記: |
| @jserv | <% |
| @jserv | OSD 在 X11 下的實現 |
| @jserv | Jim Huang <jserv@kaffe.org> |
| @jserv | 最後更新:Dec 12, 2004 |
| @jserv | [動機] |
| @jserv | 因為需要發展一套全功能的 Media Player,目前採用的 codebase 是 Xine,在 |
| @jserv | xine-ui 設計了一套 xitk,能夠處理 OSD (On-Screen Display),但是這不適合 |
| @jserv | 通用性處理,所以筆者試著參考 XOSD[1] 這套實作,在追蹤後,發現很難在視覺 |
| @jserv | 效果與效能上有所突破,是此依循分析結果,紀錄 OSD 在 X11 下的實作心得, |
| @jserv | 以及效能衝擊的瓶頸。 |
| @jserv | [現有的問題] |
| @jserv | X Window System 是個 Client-Server 的架構,在此架構下的效能衝擊因素之一 |
| @jserv | 就是大量的資料傳輸,當然,多數的情況下,只是少量資料的傳遞,比方說將某個 |
| @jserv | 視窗 Window 移動到座標軸 [x,y] 之處一類的操作,然而,只要圖片或 |
| @jserv | 影像涉入後,效能的衝擊就相當明顯。 |
| @jserv | 有許多途徑相繼被提出,比方說透過 shared memory (亦即 SHM extension), |
| @jserv | 但是為了一般性,或者在不依賴 extension 的前提下,我們應該儘可能避免資料 |
| @jserv | 傳遞。 |
| -!- hat1 [~hata@210-85-125-2.cm.dynamic.apol.com.tw] has joined #debian.tw |
| @jserv | X 有兩種互補的型態:Pixmap 與 Image。就 X client 的觀點,Pixmap 就是個整 |
| @jserv | 數型態的 handle,而 Image 則是一個巨大的 struct,事實上,Pixmap 是存在於 |
| @jserv | X server 端的圖形資料,而 Image 是存在於 X client 的資料。這兩者可以轉換 |
| @jserv | ,但是效能成本就相當不小了,在半透明 (translucent) 視窗的實現中,這是很 |
| @jserv | 嚴重的效能衝擊,而另外一個議題就是,我們無法在不對 Screen 作 polling 的 |
| @jserv | 前提下,得知 Window 下資料是否更動過,甚至就算當我們發現 Screen 已經被更 |
| @jserv | 動了,Window 本身卻對我們想取得的 Screen 資料一無所知。是此,過去 X11 許 |
| @jserv | 多半透明實作來說,意味著效能上的衝擊,因為必須訴諸許多 polling 與大量資 |
| @jserv | 料傳輸。 |
| @jserv | 在未引入 XFree86 4.x 提出的 Xrender extension 之前,半透明 效果是透過這 |
| @jserv | 樣的方式實作的:先捕捉我們 Window 所在的 Screen 的 snapshot,然後在 X |
| @jserv | client 端施加 Alpha composition,以達到我們想要的效果。這樣會有兩個效能 |
| @jserv | 疑慮: |
| @jserv | (1) snapshot 需要取得 X client 的圖形資料 (緩慢的資料傳輸) |
| -!- asho [~asho@220-135-210-115.HINET-IP.hinet.net] has joined #debian.tw |
| -!- mode/#debian.tw [+o asho] by AceLan |
| @jserv | (2) 在 Alpha composition 後,圖形資料必須被傳回 (再度緩慢的資料傳輸) |
| @jserv | -------------------------------------- |
| @jserv | 先提到這,大家可以想見周旋在 Client<-->Server 之間的資料傳輸量是何等的大 |
| _benny_ | 所以這就是現階段的透明的問題囉? |
| @jserv | 在筆者初期設計 Media Player 的 OSD 支援時,並沒有考慮到這些議題 |
| @jserv | 往往造成效能的落差 |
| @jserv | _benny_: Got it |
| @jserv | _benny_: 這也是「真透明」與「假透明」的分野! |
| _benny_ | 真透明在 xorg 還是太慢了 :( |
| descent | jserv, 為何是 假透明 |
| @frid | agree |
| @jserv | _benny_: no, it's resulted from improper driver |
| _benny_ | 假透明就是 xchat/*term 那種只看的到背景的 |
| _benny_ | 而無法看看到在背後app |
| @jserv | descent: 假的透明度是用上述的作法,慢慢畫出來得 |
| @jserv | 好,回到 Xrender,看看怎麼解決問題 |
| @jserv | --------------------------------------------------------- |
| @jserv | [改善的方式] |
| @jserv | Xrender 一開始被提出的訴求是為了支援 anti-aliased 字型。在字體邊框的 |
| @jserv | pixel rendering 相當類似 composition,簡單來說,這類的狀況就是我們的繪 |
| @jserv | 圖呈現跟背景有關,所以 Xrender 還提供一些與 Glyphs 有關的資料型態,這 |
| @jserv | 是通用性的 composition 處理。而上述半透明效果實作遇到的問題,可以透過 |
| @jserv | 很明顯的解法處理,就是將 composition 轉交給 X server 處理,這基本上就 |
| @jserv | 是 Xrender extension 所作的項目,Xrender 提供另一個資料型態:Picture, |
| @jserv | 類似 Pixmap 的整數型態 handle,但是具備 Alpha channel。 |
| @jserv | --------------------------------------------------------- |
| @jserv | glyph:字或字體,是指字的實體圖像 |
| @jserv | character --> 字的抽象描述 |
| @jserv | --------------------------------------------------------- |
| @jserv | Xrender 在 X server 端繪製 text,所以真正取得這些處理過的 pixel 需要 |
| @jserv | 透過 socket 傳輸這些特化的資料。 |
| @jserv | shape functions (使用 bitmask) 處理 X server 端的 bitmap,如果我們讓 |
| @jserv | Xrender 在一個 bitmap 上作顯示,這樣的話,所需的過程就簡化為: |
| @jserv | Screen --> Image (slow) |
| @jserv | Image --> Pixmap (slow) --------+ |
| @jserv | | Xrender |
| @jserv | (medium) Pixmap <------+ |
| @jserv | \ |
| @jserv | \ | |
| @jserv | \| |
| @jserv | shape function (fast) |
| -!- yurenju [~yurenju@wshlab2.ee.kuas.edu.tw] has joined #debian.tw |
| @jserv | --------------------------------------------------------- |
| @jserv | 於是乎,我們將 two-way roundtrip 降到可接受的 one-way roundtrip |
| @jserv | [實作議題] |
| @jserv | |
| @jserv | 我們可以針對 1-bit transparency 使用 Shape extension,移去所有沒有涵蓋於 |
| @jserv | 我們要顯示的文字以外的 Window,然後,複製桌面背景到剩餘的 Window,最後透 |
| @jserv | 過 Xft 來描繪字形,這有無法避免的 round-trip,需要將這些 Window 「碎片」 |
| @jserv | 傳遞給 X client,除非有個直接使用 Pixmap 的 XGetImage() 與 XCopyArea() 函 |
| @jserv | 示。這樣一來,理論上已經可以在 X client 端完成所有的 composition。 |
| @jserv | |
| @jserv | [1] http://www.ignavus.net/software.html |
| @jserv | --------------------------------------------------------- |
| @jserv | Questions? |
| @jserv | 在大家思考的同時,小弟來介紹一些有趣的新專案 |
| @jserv | http://jserv.sayya.org/wm/gotwm.png |
| @frid | A_A |
| @jserv | 這是小弟最近為 GOT (Gentoo Taiwan) 撰寫的一個 Window Manager |
| * _benny_ 躲在 jserv 背後得意 |
| yurenju | 背景是 Gentoo Taiwan 耶… ^^ |
| @jserv | 左上角就是所謂的 OSD (On-Screen Display) |
| kanru | XD |
| @jserv | GotWM 在 OSD 的實作上,並沒有用到 Xrender extension |
| @jserv | 相反的,還是只用 xosd library |
| @jserv | 因為其變化性太小 |
| @jserv | 只是跟底圖作 differing |
| _benny_ | 原來 xosd 是 lib,我一直以為只要下個參數就可以顯示了 |
| @jserv | 然而,如果是在 video player 上設計 OSD ,就會面臨 rendering 的效能衝擊 |
| @jserv | 這是需要留意的 |
| @jserv | --------------------------------------------------------- |
| * jserv 發現今天很冷 :( |
| @frid | 我覺得昨天比較冷@_@ |
| descent | 我覺得明天會很冷 |
| @jserv | 同時,剛剛的 screenshots 的右下角 |
| SBT | 我回來了,Log 看完了 :p |
| @jserv | 那是小弟最近開發的一個 Web Browser |
| @jserv | 稱為 kBrowser |
| @frid | 用qt寫的? |
| @jserv | frid: 用 GTK+/DirectFB 來實作 |
| @jserv | . based on khtml |
| @jserv | http://developer.kde.org/documentation/library/kdeqt/kde3arch/khtml/ |
| @jserv | . Merged from Apple's WebCore |
| @jserv | |
| @jserv | . Toolkit: GTKlite (精簡版本的 GTK+ 2.4) |
| @jserv | - GTKlite 運作於 KDrive |
| @jserv | - KDrive 的 KAA 將會大幅改寫 |
| @jserv | * 重新 profiling |
| @jserv | - Reference Implementation is scheduled in 2005 Q2. |
| @jserv | GTKlite 也需要設計相容於 GTK+/DirectFB,而 Web Browser 本身設計 |
| @jserv | 不直接接觸到 low level drawing,在 source level 上要更換這兩個 |
| @jserv | 架構的衝擊可以大幅降低。 |
| @jserv | |
| @jserv | Flash plugin 在 DirectFB 架構下需要 Rootless X server 作 overlay |
| @jserv | |
| @jserv | +------------------------------+ |
| @jserv | | MIME |\ |
| @jserv | |application/x-shockwave-flash | \ |
| @jserv | +------------------------------+ \ |
| @jserv | \ |
| @jserv | Create X session -------+ |
| @jserv | | |
| @jserv | X sandbox env ----------+ |
| @jserv | --------------------------------------------------------- |
| -!- enrico [~enrico@218-164-132-100.dynamic.hinet.net] has joined #debian.tw |
| @jserv | 再者,筆者昨天整理 XOrg repostory |
| @jserv | 將 Cygwin/X 透過 MinGW 移植成功,當然,這是因為有許多現成的 patch |
| @jserv | 現在,這個 X server 可以 natively 的在 Win32 上面跑 |
| @jserv | 不需要依賴 Cygwin 的 UNIX Compatibility Layer |
| @jserv | 請參考: |
| @jserv | http://jserv.sayya.org/freedesktop/xmingw-20041230.zip |
| @jserv | |
| @jserv | 字型檔也一併提供,所以只要解開後啟動 run.bat 即可。(DISPLAY=:0) |
| @jserv | |
| @jserv | ps: 這是小弟自己維護的 branch,有任何問題請不要直接回報給 XOrg |
| @jserv | --------------------------------------------------------- |
| @jserv | mailing-list,Feel free to contact me. |
| @jserv | 還有,筆者最近也開始維護另一個有趣的計畫 |
| @frid | cool |
| @jserv | 稱為 Xorz :-) |
| @jserv | > Xorz 是一個模組化處理的 Xorg 分支,並且整合 XDirectFB 與尚未被 |
| @jserv | > Xorg 採納的實驗性 patch,有很多有趣的新特徵 :-) |
| @jserv | > 感謝 zonble 的 "Orz" 歌,讓我聯想 Xorz 當作 Project Name。 |
| @jserv | |
| @jserv | Xorz 是 "Xorg Zazen" 的縮寫,可以視為淬練中的 Xorg branch,而為何要 |
| @jserv | 發展 Xorz 呢?簡單來說,有以下動機: |
| @jserv | |
| @jserv | 1. Xorg 單一 development tree 造就非常巨大難懂的 tarball 與 building |
| @jserv | process,造成許多 packaging 的困擾,version control 的工具處理如此 |
| @jserv | 巨大的 repository 也吃不消。(可以試著用 svk 來 mirror XOrg 看看要多 |
| @jserv | 久,svn diff 的時間也很令人厭倦) |
| @jserv | 2. Xorg 在某些角度來說,因為必須顧及許多平台差異,所以相當保守,儘管 |
| @jserv | FreeDesktop.org 上有許多卓越的 patch,至今還無法完全整合 |
| @jserv | 3. XOrg 並未徹底與 Linux 作最佳的整合與調整 |
| @jserv | 4. XOrg 在 Embedded System 應用上有許多限制 |
| @jserv | 從今年九月份開始,我試著 hack Xserver 與 Xlibs 實作,陸續有些心得,並 |
| @jserv | 且認為 XOrg 在 Embedded Linux 上必須有更好的基礎建設,於是我試著維護 |
| @jserv | 自己的 branch,當時是參考 keithp 的 KDrive。 |
| @jserv | |
| @jserv | 後來發現 KDrive 架構並未能解決多數的狀況,比方說 XvMC 的處理就需要大幅 |
| @jserv | 加強,所以後來試著整合 XOrg 的設計,但是周旋於 XAA 與 KAA,著實耗費很多 |
| @jserv | 心力,也吃力不討好。 |
| @jserv | |
| @jserv | 所以比較務實的作法是參考 Daniel Stone 的 Debrix,並且加強 Embedded Linux |
| @jserv | 上 DRI 的設計,同時 UNIX 一項「美德」 -- 將所有的設定檔以純文字形式存取, |
| @jserv | 卻屢屢在 Embedded Linux 或 Desktop 整合的應用來說,顯得累贅且繁複,而在 |
| @jserv | 拜讀 [Why Linux Needs to be Elektrified] 一文後,得到許多啟示。 |
| @jserv | --------------------------------------------------------- |
| @jserv | http://elektra.sourceforge.net/ |
| @jserv | 初期的目標是: |
| @jserv | 1. 整合 XDirectFB |
| @jserv | 2. Elektra 化 XOrg |
| @jserv | 3. 模組化 |
| @jserv | 4. 強化 DRI 支援 |
| @jserv | --------------------------------------------------------- |
| @jserv | 最後這些成果都會回到 Xorg 總部的,但是筆者希望有更多的台灣朋友參與 FreeDesktop 的開發 |
| @jserv | :-) |
| @jserv | ok. 廣告時間結束 |
| -!- PowerOp [~PowerOp@219-84-58-7-adsl-tpe.dynamic.so-net.net.tw] has joined #debian.tw |
| @jserv | 接著簡單介紹 Composite Extension |
| @jserv | 相信很多朋友都看過 Sun Project Looking Glass 的成果 |
| @jserv | 一定對裡頭的設計有相當的好奇 |
| @jserv | 而 MacOS X 種種華麗的效果也不在話下 |
| @jserv | 而,X Window System 的設計下,有無可能達到類似的效果呢? |
| @jserv | X 中的 Window Manager 是個很好的發揮題材 |
| @jserv | 也有所謂的 3D Workspace 套件現身 |
| @jserv | 但是這並未能根本的、透明化的,以及高度的通透整合起來 |
| @jserv | 所以,keithp 開始思考這個議題 |
| @jserv | Composite Extension 必須搭配另外兩個 extensions |
| @jserv | Xfixes / XDamage / Composite Extension |
| @jserv | Xfixes 的命名非常有意思 |
| @jserv | "fixes" 什麼呢? |
| -!- yuwei [yuwei@218-164-142-128.dynamic.hinet.net] has joined #debian.tw |
| @jserv | 因為我們必須對現有的 Window 作重構的動作 |
| @jserv | 比方說陰影、透明化 |
| @jserv | 甚至扭轉的特校 |
| @jserv | 在 keithp 的想法中,XDamage extension 就是用以作碎片的切割 |
| @jserv | Programmer 可以依據特定的邏輯將該 Display / Screen 作處理 |
| @jserv | Xfixes 接著將這些「碎片」再給予調整,比方說作外框、Alpha blending |
| @jserv | 等處理 |
| @jserv | 最後,Composite extension 作個最後的呈現 |
| @jserv | 需要注意的是,Composite extension 在 XFree86 4.3 以前就存在了,但是 Xorg X11R6.8 則是整合這三個 extensions |
| @jserv | 同時,我們也可以發現當今 3D Desktop/Workspace 的趨勢已經不再是發展炫麗的特校 |
| @jserv | 已經有太多基礎建設很完備了 |
| @jserv | 問題在於「如何快速、無痛的移轉現有的操作環境?」 |
| @jserv | -------------------------------------------------------- |
| @jserv | Questions? |
| @frid | 請問有Sun Project Looking Glass的url 嗎?..Orz |
| SBT | 可以問 Xming 的問題嗎? |
| @jserv | frid: 這裡有展示:http://jserv.sayya.org/freedesktop/lg3d-demo.mov |
| @jserv | SBT: 請說 :-) |
| @frid | jserv : bow |
| @jserv | frid: Goolge:// Sun Project Looking Glass <-- 第一個link |
| @jserv | s/Goolge/Google/ |
| SBT | 剛剛抓來跑了起來,想用 win32 下的 imagemagick display 作測試 |
| -!- d2207197 [~joseph@220-135-237-215.HINET-IP.hinet.net] has joined #debian.tw |
| @jserv | SBT: 嗯,遇到什麼問題呢? |
| SBT | 出現 ColorIsNotKnownToServer (black) 的錯誤訊息 ... |
| @jserv | SBT: 嗯,因為還沒徹底 porting 好 |
| @jserv | SBT: known issue |
| @jserv | SBT: 但是基本的 Window 應該可以出來吧? |
| SBT | imagemagick 出現這個 exception 之後就死了 :p |
| SBT | 我換別支程式試試看 ... |
| @jserv | 在繼續下個主題之前,我們來看看其他展示 |
| @jserv | http://jserv.sayya.org/embedded/eem.avi |
| @jserv | 這是 Enlightenment for Embedded 的畫面 |
| SBT | 靠,好帥 XD |
| @jserv | 實際上,也可以運作在 e17-on-DirectFB 上 |
| @jserv | 喔,提到這麼多次 DirectFB,這裡有之前作的簡報可參考 |
| @jserv | 標題:DirectFB 在 Embedded Linux 上的應用 |
| @jserv | 作者:Jim Huang (黃敬群) <jserv@kaffe.org> |
| @jserv | 最後更新日期:Nov 22, 2004 |
| @jserv | 下載: |
| @jserv | http://jserv.sayya.org/embedded/directfb-intro.ppt |
| @jserv | (Microsoft PowerPoint 格式) |
| @jserv | http://jserv.sayya.org/embedded/directfb-intro.html |
| @jserv | (Shockware Flash 格式,800x600) |
| @jserv | ----------------------------------------------------- |
| @jserv | Project Looking Glass 作為一個重要的 3D Desktop 基礎建設 |
| @jserv | 其必須考量的議題非常的多 |
| @jserv | 姑且撇開 Java3D 的整合不論 |
| @jserv | 很快的,開發小組就面臨許多新的挑戰,於是他們提出 XEvIE 的 extension |
| @jserv | XEvie 對以下的應用是相當關鍵性的: |
| @jserv | |
| @jserv | . 3D window systems (such as Project Looking Glass and Croquet). |
| @jserv | . handwriting recognition |
| @jserv | . multi-level event redirection. |
| @jserv | 3D --> 2D 的轉換,在 rendering 方面,有發展完備的硬體 projecting |
| @jserv | 但是整體的操作是否能配合呢? |
| @jserv | 這是很大的問題 |
| @jserv | 在剛剛列出的動畫中,我們可以看到 Sun 的那位 Project Manager 神色自如的操作著夢幻的桌面 |
| @jserv | 儘管真實映象的環境是 2D TFT |
| @jserv | 這是怎麼做到的呢? |
| @jserv | 答案就是透過 XEvIE |
| -!- XS4-3065 [d2f40e52@webchat.xs4all.nl] has joined #debian.tw |
| -!- XS4-3065 [d2f40e52@webchat.xs4all.nl] has quit [Kill line active: Open Proxy found. Visit the website openrbl.org/lookup?i=210.2] |
| @jserv | XEvIE 原本是附著於 Xext library 下,但是後來成為新的 extension,在 Xorg X11R6.8.1 現身 |
| @jserv | 這個想法就是能夠一般性的「擷取」、「攔截」 user events |
| @jserv | 然後可以動態的加入自己的轉換 policy |
| @jserv | 比方說 Sun Project Looking Glass 就設計了很多 Universe |
| -!- asho [~asho@220-135-210-115.HINET-IP.hinet.net] has quit ["Client exiting"] |
| @jserv | 這些 Universe (宇宙系) 表示 3D 操作,可以讓使用者翻轉、取物、位移 |
| @jserv | 然後最終又對應到真實的座標上 |
| -!- treeboy [~treeboy@140.127.113.60] has quit ["leaving"] |
| @jserv | 整個設計是通透性的,所以不需要修改任何一個 X Client |
| -!- yurenju [~yurenju@wshlab2.ee.kuas.edu.tw] has quit ["Lost terminal"] |
| @jserv | 這是很重要的革命 |
| @jserv | ----------------------------------------------- |
| @jserv | Questions? |
| @jserv | [工商服務時間] |
| @jserv | 因為小弟最近又回到 tty 與 framebuffer 的生活中,所以像樣的中文終端機是很重要的 |
| @jserv | JMCCE 的網頁在 AndrewLee 與 ycheng 兩位的協助下,終於回來了 |
| @jserv | 但是 JMCCE 也整整兩年沒有維護了 |
| @jserv | 相當可惜 |
| @jserv | 所以,小弟趁此機會想找些朋友繼續維護,有意者請討論,謝謝! |
| @jserv | -------------------------------------------- |
| -!- yurenju [~yurenju@wshlab2.ee.kuas.edu.tw] has joined #debian.tw |
| descent | gpm 的支援 |
| @jserv | 嗯,時間也到尾聲了,開放發問與討論,謝謝! |
| -!- tedyu [~tedyu@79-208.dorm.ncu.edu.tw] has quit ["leaving"] |
| @frid | 神奇! |
| @jserv | 如果沒有問題,那今年度的 IRC Conference 就順利落幕了,感謝各位! |
| @frid | clap! |
| Ma1 | 之前提到DRI現在已經和kernel層有相關的實作 |
| Ma1 | --> 是不是現有必須將dri的module編入kernel中才能發揮dri的功能? |
| Ma1 | (拍拍手 ^^) |
| @jserv | 驚! gcin 也提供 GTK+ 2 的 IM Module 了! |
| @jserv | Ma1: 是的 |
| SBT | 再問 Xming! |
| -!- jserv changed the topic of #debian.tw to: 2004 年度 IRC Conference 圓滿落幕,感謝各位參與 |
| @jserv | SBT: 請說 |
| SBT | 現在似乎沒辦法接受別台機器的 client 用 TCP/IP 連入? |
| @jserv | SBT: 因為加了 -ac 的參數 |
| @lloyd_ | kevinwatt: ping... |
| @jserv | SBT: 請修改 run.bat |
| @kevinwatt | lloyd_: pong |
| -!- jengwei [~jengwei@61-230-90-151.dynamic.hinet.net] has quit ["using sirc version 2.211+KSIRC/1.3.11"] |
| @lloyd_ | kevinwatt: 該做 log. :-) |
| @jserv | SBT: 把 -ac 拿掉就可以了,但是 xhost.exe 我還沒準備好 |
| @kevinwatt | lloyd_: @.@; |
| SBT | 了解! thx :) |
| @frid | 初步log http://frid.gentoo-tw.org/ircconference.txt |
| @lloyd_ | jserv: 大感謝.. |
| @jserv | SBT: 在 Xorg X11R6.8.2 應該就可以上線了 #Native Win32 Xorg!!! |
| @jserv | lloyd_: 客氣了 #這次沒什麼準備,工作太忙了 :( |
| @jserv | kanru: 所以 Xorg X11R6.8.2 就可以驅動你的 nVidia 顯示卡了 :p |
| -!- how [~how@59-104-242-123.adsl.dynamic.seed.net.tw] has quit ["離開"] |
| @jserv | kanru: 光靠 nv driver 就行了 |
| -!- yuwei is now known as yuwei_awa |
| -!- yungyuc [~yyc@220-134-24-5.HINET-IP.hinet.net] has quit [""] |
| kanru | jserv: ya.. 效能超棒 :D |
| * jserv 檢討:Xft/Fontconfig 沒有講、Xrender 說不清楚、DRI/DRM 需要更多解釋、XEvIE 需要圖表、Composite extension 太快帶過 |
| * jserv 考慮 IRC Conference 2005 :p |
| @kevinwatt | jserv: 上吧~ |
| d2207197 | jserv: Go Go Go |
| @jserv | kevinwatt: hmmm... 不過打字實在好累 :( |
| * kevinwatt 叭~~ |
| descent | GentooUserParty2004-1再補充也可以 |
| @jserv | ccc |