透過 OpenGL 作 WebKit 網頁描繪

2021-04-24 05:27:33 字數 2711 閱讀 5025

之前的文章 [

webkit + clutter:以 3d 技術給予網頁瀏覽的新體驗

] 提過 [

webkit

] 開始採用 [

cairo

] 的向量繪圖處理能力,後者允許發揮硬體的 opengl 加速,我們也見到將 webkit 描繪的網頁對映到 2d su***ce 的 3d 展示,不過那時候是透過 gtk+/cairo 先進行描繪,然後透過 [

clutter

] 對 2.5d 場景作進一步處理。現在,[

openedhand

] 的 [

iain holmes

] 著手將 webkit 整個移植到 clutter,也就是新增 clutter platform,免除剛剛繁瑣的對應,讓這一切都能透過 clutter,直接驅動硬體 opengl 加速,目前還在開發中,但是給我們頗大的想像空間。

這個 clutter/webkit 實驗性的分支維護於 iain 的 git tree [

webkit

],待發展成熟後,會比照 gtk+/webkit 的模式,整合回 webkit 專案。我做了一些調整,讓 svn trunk 的 clutter 與 clutter-cairo 得以銜接,可取得這份打包好的 tarball [

webkit-clutter-snap-20080410.tar.bz2

],先執行 autogen.sh,然後傳遞 '--disable-gtk' '--enable-clutter' 等引數給 configure script,隨後再依據一般的建構程式即可。clutter/webkit 的 api 設計相當簡潔漂亮,以下示範如何建立乙個純 opengl 繪製、webkit 為基礎的網頁瀏覽器: [

test-webkit.c

]

#include

#include

static webkitadjustment *hadj, *vadj;

int main (int argc, char **argv)

程式列表最多的地方,主要是 clutter 的布局操作,先建立 clutteractor,給予適當的尺寸與屬性,再來建立 webkitwebview 的物件,將之放入剛剛的 clutter 容器中 (clutter 底層採用 gobject/glib),最後呼叫關鍵的 webkit_web_view_open() 函式,這樣,乙個網頁瀏覽器就完成了,重點是,這個 clutter 容器可任意置放於其他 2.5d 畫面中,要作絢麗的特效也是相當容易。以 google maps 來驗證目前開發的進度:

現在網頁字型的描繪,是透過 pango/freetype,並透過 glx backend 作顯示。

感謝 iain 的指導,協助排除許多技術問題,看來好戲正要上場了!

由 jserv 發表於 april 11, 2008 10:32 am 迴響

為什麼你的snap執行configure需要clutter0.7?但我看最新的clutter是0.6嘛

由 wenhsuan

發表於 april 20, 2008 06:04 pm

@wenhsuan,

svn head 的 clutter 版本為 0.7

由 jserv

發表於 april 20, 2008 07:57 pm

嗯,我看到了,正想來這裡說一聲

由 wenhsuan

發表於 april 20, 2008 08:22 pm

我把clutter和webkit make&make install後,再編譯你的test_webkit.c檔案,出現了error: expected 『=』, 『,』, 『;』, 『asm』 or 『__attribute__』 before ******錯誤,很怪異,你遇到過這種問題嗎?

由 wenhsuan

發表於 april 21, 2008 10:01 pm

@wenhsuan: 應該是 pkg-config 的設定沒處理好,而且你將關鍵的部份 mask 掉了,看不出所以然

由 jserv

發表於 april 21, 2008 10:52 pm

jserv大大, 可否給出test-webkit.c的編譯引數.

由 drip-shui

發表於 september 24, 2008 10:49 am

* build instructions:

* # gcc -o test-webkit /

* test-webkit2.c /

* `pkg-config --cflags --libs webkit-clutter-1.0 /

* cairo pangocairo clutter-cairo-0.7`

for clutter 0.7

在 clutter 0.8 後,請修改為 clutter-cairo-0.8

由 jserv

發表於 september 24, 2008 05:17 pm

我的實做是clutter-0.8, webkit-clutter-1.0

#!/bin/sh

libs=`pkg-config --libs clutter-0.8 webkit-clutter-1.0`

incs=`pkg-config --cflags clutter-0.8 webkit-clutter-1.0`

pkg_config_path="/usr/lib /usr/local/lib"

gcc -o test-webkit test-webkit2.c $ $

透過IT看人性

在逛lotus中文網的時候看到 dragonws 總結的東西覺得很又用,所以節選過來讓警示一下自己。人總會犯錯的 為什麼在修改程式結構的同時,又向系統新增新的功能時,總是會一波三折?問題就出在這裡。人總是健忘的 人的記憶能力的弱勢在軟體程式設計時往往暴露無遺。剛剛寫完乙個很複雜的function或m...

IT評彈 透過IT看人性

我曾經作為專案組成員在team leader的指揮下奮勇編碼,也曾作為leader帶領成員艱苦作戰。很有意思的是,在不同專案中,能看到許多共同的有關人性的東西。總結了好久,現一一列出來。自以為是 在軟體開發過程中,通常有這樣的場景在不斷重演 組長問道,小王你負責的那個模組做好了嗎?小王回答道,已經好...

透過表象看本質!?

做了這麼多年學生,一直不知道該如何搞科研。直到有一天,我在興致勃勃的調 調整著引數,看著結果。就在這時,導師也蠻有興致的走過看,並發問,這結果說明了什麼?為什麼不能?那什麼方法能?這些方法有什麼異同?導師連珠炮式問了下去。留下傻傻的我在一邊,我還沒調研過。那就去調研一下,只是這樣的看是不能幫你解決你...