• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            foxriver
            Keep It Simple and Stupid.
            posts - 12,  comments - 39,  trackbacks - 0
            1. 解壓http://builds.nightly.webkit.org/files/trunk/src/WebKit-r100089.tar.bz2到cygwin目錄下
            2. 下載win32預(yù)編譯依賴庫: ./Tools/Scripts/update-webkit
            3. 修改WebKitLibraries\win\tools\vsprops\common.vsprops(DisableSpecificWarnings=4819), 解決在中文操作系統(tǒng)里編譯與某些英文符號(hào)不兼容問題。某些新版本的WebCore\platform\DefaultLocalizationStrategy.cpp中引號(hào)也要修改一下。
            
            4. 檢查系統(tǒng)環(huán)境變量: 
            WEBKITLIBRARIESDIR  D:\cygwin\WebKit-r100089\WebKitLibraries\win
            WEBKITOUTPUTDIR     D:\cygwin\WebKit-r100089\WebKitBuild
            DXSDK_DIR           D:\cygwin\WebKit-r100089\DXSDK_Feb10
            SystemDrive         D:
            
            其中SystemDrive對(duì)應(yīng)cygwin安裝盤符,DXSDK_DIR是dx9sdk的路徑,還需要安裝QuickTime SDK。
            
            5. 開始命令行編譯:./Tools/Scripts/build-webkit --debug,全部通過之后再用vc2005 ide打開項(xiàng)目并調(diào)試,否則某些腳本會(huì)有問題。
            6. 安裝Safari,復(fù)制相關(guān)運(yùn)行時(shí)文件到WEBKITOUTPUTDIR子目錄,運(yùn)行MiniBrowser
            
            ps1: vc2005需要安裝sp1, 否則stl鏈接會(huì)出錯(cuò)。智能分析造成cpu太卡,可通過改名C:\Program Files\Microsoft Visual Studio 8\VC\vcpackages\feacp.dll來屏蔽。
            ps2: dx9sdk可以用比較老的版本,但鏈接時(shí)需要?jiǎng)h除common.vsprops里的/SAFESEH。
            ps3: 編譯Cairo版本: ./Tools/Scripts/build-webkit --debug --wincairo, 需要vista以上系統(tǒng)運(yùn)行,否則會(huì)報(bào)WSAPoll找不到。
            
            
            
            
            http://www.cnblogs.com/coffeestone/archive/2011/01/10/1931872.html
            http://blog.csdn.net/elfylin/article/details/6769747
            
            
            posted @ 2011-12-31 00:55 foxriver 閱讀(1597) | 評(píng)論 (0)編輯 收藏

            目前官方ffmpeg的最新版本為0.9, 我們就以此為例:

            1. 下載最新git版本的源代碼(http://ffmpeg.zeranoe.com/builds/, 本例下載的是2011-12-12版本)
            2. 放到MSYS環(huán)境里配置,生成config.h文件。mingw gcc是能順利編譯通過整個(gè)項(xiàng)目的,并生成最新版的ffmpeg。
            3. 建立vc6工程,把相關(guān)代碼都加入到工程中。由于在vc生成的obj都在一個(gè)目錄下,所以需要修改文件名,讓其不重名。
            4. 安裝intel compiler 11編譯器,單獨(dú)提取其icl.exe及相關(guān)include目錄,替換掉vc6自帶的cl.exe, 在工程設(shè)置里加上/Qstd=c99,用于支持C99語法。
            5. 安裝intel compiler 10編譯器,單獨(dú)提取lib目錄,因?yàn)榇税姹菊{(diào)試庫的結(jié)構(gòu)能完美支持vc6的調(diào)試信息。
            6. 在vc6的options里設(shè)置include/exe/lib查找目錄,指向intel編譯器。
            7. 開始修改代碼,添加C99的相關(guān)linux頭文件, 用于支持vc6, (unistd.h, stdint.h, inttypes.h, getopt.h)
            8. 添加C99和linux的相關(guān)實(shí)現(xiàn)代碼,ffmpeg需要用到: getopt_long, strtoll, gettimeofday, atoll, usleep等
            9. 修改windows的相關(guān)兼容代碼,GetWindowLongPtr -> GetWindowLong, GWLP_USERDATA
            10. 去除硬件加速libavcodec代碼,和依賴庫代碼。選擇所需要的模塊,修改相關(guān)的allcodec.c, alldevices.c, allfilters.c, allformats.c
            11. 加上鏈接庫,sdl.lib, winmm.lib, dxguid.lib, wsock32.lib
            12. 在os_support.c里,把<winsock2.h>移動(dòng)到文件最前面。
            13. 如果是ffmpeg, 已經(jīng)能順利編譯了。如果是ffplay,還需要編譯靜態(tài)sdl, 并鏈接。
            14. 等等,音頻運(yùn)行不正確?有雪花聲?因?yàn)檫€需要替換所有文件里的<math.h>為<mathimf.h>, 默認(rèn)的rint等數(shù)學(xué)函數(shù)和gcc不兼容。
            15. ok, 大功告成,純C版本完美運(yùn)行。
            16. 由于ffmpeg0.9在c文件里,添加了一些intel compiler不支持的mmx語法,所以編譯mmx/sse加速版本時(shí),一小部分.c文件需要依賴mingw gcc編譯成.o文件,再通過vc6的lib.exe工具轉(zhuǎn)換成lib,讓vc6鏈接上。當(dāng)然還要加上yasm編譯的很多匯編obj.
            17. 有興趣的,可以繼續(xù)以此方法編譯x264庫,官方最新代碼MMX版也可以順利通過。

            posted @ 2011-12-17 02:09 foxriver 閱讀(2646) | 評(píng)論 (0)編輯 收藏

            普通jpeg
            8x8塊編碼DCT,熵編碼=Huffman,

            jpeg2000
            有小波浮點(diǎn)或整數(shù)兩種變換算法, 熵編碼=MQ-Code,中等壓縮比有良好的表現(xiàn),衍生格式為ecw,用于壓縮衛(wèi)星圖片。

            jpeg-xr
            john carmack在rage資源中使用的格式,他推薦的一般都不會(huì)差。微軟定義的開源算法,比jpeg2000有所進(jìn)化,主要改進(jìn)有DCT塊的層次保存格式,塊之間后期接縫處理。有無損和有損模式,適合長(zhǎng)期保存游戲貼圖。

            h264 iframe
            使用單幀內(nèi)預(yù)測(cè)技術(shù),圖片越大,越能體現(xiàn)超強(qiáng)的壓縮比。熵編碼=Gobomb-Code

            其他一些游戲壓縮格式:
            pvrtx
            iphone壓縮格式, 效果比較理想,不開源。

            etc1
            android中普遍的壓縮格式。

            dxt1, dxt3, dxt5
            早期的經(jīng)典格式, 采用塊狀分割,恒定壓縮比,適合二次壓縮。

            bc6, bc7
            被微軟強(qiáng)化的dx10壓縮格式,和dxt1一個(gè)壓縮比,圖片質(zhì)量非常好。

            其他非游戲壓縮格式:
            1. 圖片掃描文件二值壓縮格式, JB2(djvu), JBIG2(pdf), TIFF C4
            2. 數(shù)碼相機(jī)里RAW壓縮格式, 用于近無損壓縮,大部分廠商都有自己的定義:Epson ERF, SGI Log24, Nikon NEF, Kodak DCR, Pentax PEF等

             

            -------------------------

            1:100的圖片壓縮效果對(duì)比


             

             游戲貼圖壓縮質(zhì)量對(duì)比圖

            posted @ 2011-12-06 01:57 foxriver 閱讀(4961) | 評(píng)論 (0)編輯 收藏

            所有涉及圖片放大縮小,旋轉(zhuǎn)或圖片扭曲的操作,都會(huì)有Resample. 而插值算法,就是為了減少走樣而。其中又分卷積和后置濾波。

            1. 卷積,通常在源圖片空間采樣,但有時(shí)候warp算法復(fù)雜(比如RBF徑向基函數(shù)),造成像素在源圖片空間縱橫比例不同,往往用后置濾波更簡(jiǎn)單。以下對(duì)比是1:1對(duì)象空間的旋轉(zhuǎn)變換。


            原圖如下,目標(biāo)質(zhì)量對(duì)比圖為中心旋轉(zhuǎn)5度,重復(fù)72次,正好360度恢復(fù)原樣。

            posted @ 2011-03-21 01:01 foxriver 閱讀(2226) | 評(píng)論 (4)編輯 收藏

            crysis2 dx9一幀渲染流程:

            1. TestCooperativeLevel()
            2. 設(shè)置n-patch細(xì)分等級(jí)D3DRS_ADAPTIVETESS_Y
            3. GPU同步設(shè)置,Query9::GetData(), Query9::Issue()
            4. ShadowMap
            5. ZPass, 生成GBuffer信息。
            6. Depth_DownScale
            7. SSAO
            8. Scattering List

            9. Deferred Lighting
            9.1 Irradiance Volume Evaluate
            9.2.1 Visares
            9.2.2 Outdoor
            9.3   Deferred CubeMaps
            9.4   Deferred Lights
            9.5   SSAO_BLUR
            9.6   Deferred Lights
            9.6.1 ShadowMap Pool

            10. 不透明物體繪制。
            10.1 General(BW)
            10.2 地形(BW)
            10.3 General(AW)
            10.4 地形(AW)
            10.5 細(xì)節(jié)(BW)
            10.6 細(xì)節(jié)(AW)
            10.7 皮膚生成
            10.8 皮膚應(yīng)用

            11. 半透明物體繪制。
            11.1 霧

            12. Glow Gen(光暈生成)

            13. HDR Post Proesss
            13.1 Motion Blur, 運(yùn)動(dòng)模糊
            13.1.1 Motion Vector Gen
            13.1.2 Motion Vector Dilate
            13.1.3 Motion Vector Apply
            13.1.4 Motion Vector Apply Pass 2

            13.2 HalfRes downsample
            13.3 QuarterRes downsample
            13.4 BrightPass
            13.5 Bloom and Flares
            13.5.1 TexBlur 16Taps
            13.5.2 TexBlur Gaussian
            13.5.3 TexBlur Gaussian
            13.5.4 HDR flares

            13.6 Sunshafts生成
            13.7 MergeColorCharts
            13.8 CombineColorGradingWithColorChart
            13.9 ToneMapping

            14. Post Effects
            14.1 MSAA
            14.2 3D HUD

            15. 刷新繪制
            16. 繪制界面
            17. 繪制調(diào)試信息


             

            posted @ 2011-02-18 02:51 foxriver 閱讀(2310) | 評(píng)論 (0)編輯 收藏

            網(wǎng)上開源RSA實(shí)現(xiàn)庫:

            openssl   強(qiáng)大的工具集合
            crypto++  過于復(fù)雜的封裝,特別是rsa實(shí)現(xiàn)模塊。

            速度上有優(yōu)勢(shì)的:XySSL, CyaSSL(都使用的LibTomMath)
            邏輯上有優(yōu)勢(shì)的:axcrypto, raknet
            還有一些大數(shù)庫: vlong,WinNTL

            對(duì)于公鑰簽名認(rèn)證, google android自帶的libmincrypt有超快的實(shí)現(xiàn)方法,可惜代碼只是為了一家優(yōu)化,僅提供e=3的加速。而網(wǎng)上通常的ASN.1證書,都用了e=63357。

            posted @ 2011-02-10 07:11 foxriver 閱讀(1722) | 評(píng)論 (0)編輯 收藏

            當(dāng)QQ群聊天記錄日積月累,達(dá)到一定數(shù)量級(jí)的時(shí)候,要查找某些單一文字,往往會(huì)花費(fèi)10幾秒甚至幾分鐘才有反應(yīng)。除去磁盤讀取的時(shí)間,是否對(duì)聊天記錄做一個(gè)全局索引也是個(gè)重要的優(yōu)化,這篇文章就是為了優(yōu)化文本查找速度,介紹一個(gè)最簡(jiǎn)單的方法。

            試著把QQ每條聊天記錄看成SQL里單一記錄,對(duì)單條記錄做全文索引。這里用的方法是bit位快速匹配。假設(shè)一條聊天記錄是"test", 轉(zhuǎn)換成16進(jìn)制,就是"74 65 73 74", 對(duì)單條記錄,定義196位bit空間(占用24字節(jié)),定義為數(shù)組A, 然后按bit層(注意不是字節(jié))做or操作:  (A = A or N, 把A的第N個(gè)bit設(shè)置為1)

            初始狀態(tài):
            A = 0;        // 【0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00】

            A = A or 0x74; // 【0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00】
            A = A or 0x65; // 【0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00】
            A = A or 0x73; // 【0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00】
            A = A or 0x74; // 【0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00】

            使用時(shí),給需要查找的字符串建立相同大小的bit索引B,對(duì)查找數(shù)據(jù)"es"做相同處理:

            B = 0;
            B = B or 0x65; // 【0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00】
            B = B or 0x73; // 【0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00】

            然后把A和B做and操作,如果結(jié)果為空(完全沒有交集),則可以快速跳過這條記錄,而不用去判斷實(shí)際內(nèi)容中是否包含了查找文本。

            if (B & A)
            {
              // 兩者索引存在交集,有一定的可能性,處理進(jìn)一步文字查找操作。
            }
            else
            {
              // 兩者不可能有包含關(guān)系,直接跳過本條記錄內(nèi)容,判斷數(shù)據(jù)庫下一條記錄。
            }

            原理很簡(jiǎn)單,就是求兩者的交集,但往往簡(jiǎn)單的索引,能帶來意想不到的速度提升。實(shí)際測(cè)試中,只要輸入的查找文本比較短小,大約30%~60%上下浮動(dòng)的數(shù)據(jù)都能直接略過,大大節(jié)省了查找總耗時(shí)。

            本人實(shí)現(xiàn)中,中文的查找方法相當(dāng)于兩個(gè)單字節(jié)的英文,為了最大效率利用空間,用算法把中文每個(gè)BYTE都?jí)嚎s在196bit之內(nèi)。

            posted @ 2011-01-14 01:22 foxriver 閱讀(2210) | 評(píng)論 (6)編輯 收藏
            算是對(duì)多重繼承里,類型轉(zhuǎn)換所做一個(gè)筆記。先看如下代碼:

            class A
            {
            public:
                 A() { m_data 
            = 'A';}
                
            ~A() {}
                
            char m_data;
            };

            class B
            {
            public:
                 B() { m_data 
            = 'B';}
                
            ~B() {}
                
            char m_data;
            };

            class C : public A, public B
            {
            public:
                 C() { m_data 
            = 'C';}
                
            ~C() {}
                
            char m_data;
            };

            class D : public C
            {
            public:
                 D() { m_data 
            = 'D';}
                
            ~D() {}

                
            void test()
                {
                    DWORD value 
            = (DWORD)this;

                    A
            * address1 = (A*)(value);// 編譯通過,類型轉(zhuǎn)換錯(cuò)誤(僅在在虛擬繼承的情況下),正確的寫法:A* address1 = (A*)((D*)value);
                    B* address2 = (B*)(value);// 編譯通過,類型轉(zhuǎn)換錯(cuò)誤,正確的寫法:B* address2 = (B*)((D*)value);
                    C* address3 = (C*)(value);
                    D* address4 = (D*)(value);

                    printf(
            "%c %c %c %c", address1->m_data, address2->m_data, address3->m_data, address4->m_data);
                }

                
            char m_data;
            };

            void main()
            {
              D d;
              d.test();
            }

            代碼運(yùn)行后,結(jié)果為A A C D,顯然B這個(gè)類沒有正確轉(zhuǎn)換。

            A和B都是D的父類,為什么A* address1 = (A*)value這句轉(zhuǎn)換正確,而B* address2 = (B*)(value)出錯(cuò)呢?這就是多重繼承的不可判斷性。

            正因?yàn)檫@種特性的存在,我們?cè)趯?shí)際使用中,應(yīng)該盡量避免多重繼承,選擇單一繼承這種模式。JAVA就是如此,最初設(shè)計(jì)時(shí)就只能單一繼承,而多重繼承則演變?yōu)榧兲摻涌?interface),這樣就規(guī)避了此類問題。但可惜,在C++里,WTL和QT都大量使用這種模型,想在實(shí)際項(xiàng)目中完全避免,也很困難。

            要解決,有幾種方法。

            1. 把B* address2 = (B*)(value)這行,改寫為B* address2 = (B*)((D*)value); 這樣就能直觀的傳達(dá)給編譯器,B正確的偏移量。

            最終輸出A B C D,正是我們想要的結(jié)果。

            2. 顯示使用static_cast,當(dāng)編譯器不能確定轉(zhuǎn)換類型時(shí),會(huì)提示編譯錯(cuò)誤信息。

            例如:
            B* address2 = static_cast<B*>(value); // 編譯失敗。
            B* adddres2 = static_cast<B*>((D*)value); // 編譯成功,并且結(jié)果正確。

            3. 使用RTTI解決。


            --------------------------------------------------

            看似問題解決了,可如果一旦改寫為虛擬繼承(class C : virtual  public A, virtual public B)這種形式,A運(yùn)行時(shí)還是會(huì)出錯(cuò),必須寫成A* address1 = (A*)((D*)value);。如程序里用到了多重繼承,一定要小心+謹(jǐn)慎。

            posted @ 2011-01-12 15:53 foxriver 閱讀(6371) | 評(píng)論 (10)編輯 收藏

            加入比較的4種方法有:

            1. 快速高斯模糊。
            2. 二次Summed Area Table Blur(適合gpu, 常用于DOF,http://www.gamasutra.com/view/feature/3102/four_tricks_for_fast_blurring_in_.php)
            3. Alpha Blur(motionblur變種,優(yōu)化過后的算法,嚴(yán)重依賴相鄰像素之間累積關(guān)系,不適合gpu, http://freespace.virgin.net/hugo.elias/graphics/x_motion.htm)
            4. SuperFastBoxBlur(http://incubator.quasimondo.com/processing/superfast_blur.php)

            其中,這四種方法內(nèi),除了高斯模糊是O(n)之外,其他都是O(1)效率。也就是說,運(yùn)算速度和模糊半徑?jīng)]有關(guān)系,只和圖片大小有關(guān)。




            圖上時(shí)間僅供參考,除了AlphaBlur代碼優(yōu)化過,其它方法僅僅是基本實(shí)現(xiàn)原理。SuperFastBoxBlur和SummedAreaTable實(shí)際使用中,要比圖上更快些。

            以下方法沒有列入比較范圍

            1. 直接基于O(n*n)的高斯模糊核,速度太慢。圖上方法采用縱向和橫向高斯核分解。
            2. Stack Blur, 比高斯快的方法,并且效果和效率兼?zhèn)洹?http://www.codeproject.com/KB/graphics/blurringwithcuda.aspx)
            3. FFT gaussian blur
            4. High-Dimensional Gaussian Filtering (bilateral)
            5. constant time filters - heat diffusion.(Kass, 2006)
            6. constant time filters - SVD, singular value decomposition (Gotsman 1994)
            7. SAT衍生出來的一些方法,F(xiàn)ast Filter Spreading,Linear Filters and their Transposes。

            ---------------------------------------------------
            關(guān)于2次Summed Area Table實(shí)現(xiàn)。

            一次SAT采樣4個(gè)點(diǎn),二次SAT則需要9個(gè)點(diǎn),三次需要16個(gè)點(diǎn),以此類推。并且乘上對(duì)應(yīng)的Weight Function,除以(面積^n, n = 幾次). 詳細(xì)公式見:Filtering By Repeated Integration

            posted @ 2011-01-11 01:33 foxriver 閱讀(5091) | 評(píng)論 (0)編輯 收藏

            #ifndef __file_h__
            extern const char table1[];
            #else
            const char table1[] = "\x30\xB8\xD1\xB8\x10\x68\x3D\xBC\x09\x04\x31\x94\x5C\x91\xAF\x6C";
            #endif

            #ifndef __file_h__
            #define __file_h__

            .........function


            #endif


            --------------------
            用以上技巧的前提是,這個(gè).H必須被不同的CPP包含兩次以上。

            posted @ 2010-04-08 11:17 foxriver 閱讀(6188) | 評(píng)論 (7)編輯 收藏
            僅列出標(biāo)題  下一頁

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(3)

            隨筆檔案

            文章檔案

            相冊(cè)

            1

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            日本福利片国产午夜久久| 精品久久久久久国产潘金莲| 无码AV波多野结衣久久| 亚洲精品无码专区久久同性男| 伊人久久大香线焦综合四虎| 韩国三级大全久久网站| 国产精品久久久久影院色| 国产亚洲色婷婷久久99精品| 97久久久精品综合88久久| 久久国产高潮流白浆免费观看| 色婷婷综合久久久久中文| 少妇久久久久久久久久| 俺来也俺去啦久久综合网| 久久精品www| 精品国产乱码久久久久久浪潮| 精品久久久久久无码国产| 久久亚洲欧洲国产综合| 久久国产AVJUST麻豆| 久久精品无码一区二区三区日韩 | 91精品久久久久久无码| 日韩精品国产自在久久现线拍 | 99久久99久久精品国产片果冻| 青青青青久久精品国产h| 久久精品一区二区影院| 狠狠色丁香婷婷久久综合五月| 久久久精品国产免大香伊| 精品永久久福利一区二区| 国产精品久久久久一区二区三区 | 伊人久久大香线蕉综合热线| 一本久久知道综合久久| 久久精品国产福利国产秒| 久久伊人影视| 2022年国产精品久久久久| 国产亚州精品女人久久久久久| 久久99这里只有精品国产| 久久精品国产影库免费看| 久久综合伊人77777| 久久超碰97人人做人人爱| 理论片午午伦夜理片久久| 精品免费tv久久久久久久| 久久伊人五月丁香狠狠色|