• <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預編譯依賴庫: ./Tools/Scripts/update-webkit
            3. 修改WebKitLibraries\win\tools\vsprops\common.vsprops(DisableSpecificWarnings=4819), 解決在中文操作系統里編譯與某些英文符號不兼容問題。某些新版本的WebCore\platform\DefaultLocalizationStrategy.cpp中引號也要修改一下。
            
            4. 檢查系統環境變量: 
            WEBKITLIBRARIESDIR  D:\cygwin\WebKit-r100089\WebKitLibraries\win
            WEBKITOUTPUTDIR     D:\cygwin\WebKit-r100089\WebKitBuild
            DXSDK_DIR           D:\cygwin\WebKit-r100089\DXSDK_Feb10
            SystemDrive         D:
            
            其中SystemDrive對應cygwin安裝盤符,DXSDK_DIR是dx9sdk的路徑,還需要安裝QuickTime SDK。
            
            5. 開始命令行編譯:./Tools/Scripts/build-webkit --debug,全部通過之后再用vc2005 ide打開項目并調試,否則某些腳本會有問題。
            6. 安裝Safari,復制相關運行時文件到WEBKITOUTPUTDIR子目錄,運行MiniBrowser
            
            ps1: vc2005需要安裝sp1, 否則stl鏈接會出錯。智能分析造成cpu太卡,可通過改名C:\Program Files\Microsoft Visual Studio 8\VC\vcpackages\feacp.dll來屏蔽。
            ps2: dx9sdk可以用比較老的版本,但鏈接時需要刪除common.vsprops里的/SAFESEH。
            ps3: 編譯Cairo版本: ./Tools/Scripts/build-webkit --debug --wincairo, 需要vista以上系統運行,否則會報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) | 評論 (0)編輯 收藏

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

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

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

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

            jpeg2000
            有小波浮點或整數兩種變換算法, 熵編碼=MQ-Code,中等壓縮比有良好的表現,衍生格式為ecw,用于壓縮衛星圖片。

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

            h264 iframe
            使用單幀內預測技術,圖片越大,越能體現超強的壓縮比。熵編碼=Gobomb-Code

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

            etc1
            android中普遍的壓縮格式。

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

            bc6, bc7
            被微軟強化的dx10壓縮格式,和dxt1一個壓縮比,圖片質量非常好。

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

             

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

            1:100的圖片壓縮效果對比


             

             游戲貼圖壓縮質量對比圖

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

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

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


            原圖如下,目標質量對比圖為中心旋轉5度,重復72次,正好360度恢復原樣。

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

            crysis2 dx9一幀渲染流程:

            1. TestCooperativeLevel()
            2. 設置n-patch細分等級D3DRS_ADAPTIVETESS_Y
            3. GPU同步設置,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 細節(BW)
            10.6 細節(AW)
            10.7 皮膚生成
            10.8 皮膚應用

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

            12. Glow Gen(光暈生成)

            13. HDR Post Proesss
            13.1 Motion Blur, 運動模糊
            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. 繪制調試信息


             

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

            網上開源RSA實現庫:

            openssl   強大的工具集合
            crypto++  過于復雜的封裝,特別是rsa實現模塊。

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

            對于公鑰簽名認證, google android自帶的libmincrypt有超快的實現方法,可惜代碼只是為了一家優化,僅提供e=3的加速。而網上通常的ASN.1證書,都用了e=63357。

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

            當QQ群聊天記錄日積月累,達到一定數量級的時候,要查找某些單一文字,往往會花費10幾秒甚至幾分鐘才有反應。除去磁盤讀取的時間,是否對聊天記錄做一個全局索引也是個重要的優化,這篇文章就是為了優化文本查找速度,介紹一個最簡單的方法。

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

            初始狀態:
            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】

            使用時,給需要查找的字符串建立相同大小的bit索引B,對查找數據"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操作,如果結果為空(完全沒有交集),則可以快速跳過這條記錄,而不用去判斷實際內容中是否包含了查找文本。

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

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

            本人實現中,中文的查找方法相當于兩個單字節的英文,為了最大效率利用空間,用算法把中文每個BYTE都壓縮在196bit之內。

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

            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);// 編譯通過,類型轉換錯誤(僅在在虛擬繼承的情況下),正確的寫法:A* address1 = (A*)((D*)value);
                    B* address2 = (B*)(value);// 編譯通過,類型轉換錯誤,正確的寫法: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();
            }

            代碼運行后,結果為A A C D,顯然B這個類沒有正確轉換。

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

            正因為這種特性的存在,我們在實際使用中,應該盡量避免多重繼承,選擇單一繼承這種模式。JAVA就是如此,最初設計時就只能單一繼承,而多重繼承則演變為純虛接口(interface),這樣就規避了此類問題。但可惜,在C++里,WTL和QT都大量使用這種模型,想在實際項目中完全避免,也很困難。

            要解決,有幾種方法。

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

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

            2. 顯示使用static_cast,當編譯器不能確定轉換類型時,會提示編譯錯誤信息。

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

            3. 使用RTTI解決。


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

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

            posted @ 2011-01-12 15:53 foxriver 閱讀(6371) | 評論 (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變種,優化過后的算法,嚴重依賴相鄰像素之間累積關系,不適合gpu, http://freespace.virgin.net/hugo.elias/graphics/x_motion.htm)
            4. SuperFastBoxBlur(http://incubator.quasimondo.com/processing/superfast_blur.php)

            其中,這四種方法內,除了高斯模糊是O(n)之外,其他都是O(1)效率。也就是說,運算速度和模糊半徑沒有關系,只和圖片大小有關。




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

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

            1. 直接基于O(n*n)的高斯模糊核,速度太慢。圖上方法采用縱向和橫向高斯核分解。
            2. Stack Blur, 比高斯快的方法,并且效果和效率兼備。(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衍生出來的一些方法,Fast Filter Spreading,Linear Filters and their Transposes。

            ---------------------------------------------------
            關于2次Summed Area Table實現。

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

            posted @ 2011-01-11 01:33 foxriver 閱讀(5091) | 評論 (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


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

            posted @ 2010-04-08 11:17 foxriver 閱讀(6189) | 評論 (7)編輯 收藏
            僅列出標題  下一頁

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

            常用鏈接

            留言簿(3)

            隨筆檔案

            文章檔案

            相冊

            1

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            国产成人精品久久亚洲高清不卡| 蜜桃麻豆WWW久久囤产精品| 久久夜色精品国产网站| 久久99国产乱子伦精品免费| 久久久国产精品福利免费| 久久精品国产99久久丝袜| 久久久久亚洲AV无码观看| 2022年国产精品久久久久| 久久国产成人| 精品久久久久中文字幕日本| 精品免费久久久久国产一区| 婷婷综合久久中文字幕蜜桃三电影| 久久九九亚洲精品| 日韩人妻无码精品久久免费一 | 日韩一区二区三区视频久久| 欧美黑人激情性久久| 精品国产91久久久久久久a| 久久久久亚洲av无码专区导航| 久久精品视频91| 日韩精品久久久久久| 日韩人妻无码一区二区三区久久 | 人妻少妇久久中文字幕| 久久精品国产精品亚洲艾草网美妙| 囯产极品美女高潮无套久久久| 国产免费久久精品丫丫| 国产亚洲欧美成人久久片| 色婷婷综合久久久中文字幕| 久久人做人爽一区二区三区 | 91久久精品无码一区二区毛片| 伊人久久久AV老熟妇色| 欧美一区二区久久精品| 亚洲国产高清精品线久久 | 国产午夜精品久久久久免费视| 99精品国产免费久久久久久下载| 国产午夜精品久久久久九九电影| 国产综合久久久久| 99久久国语露脸精品国产| 久久亚洲中文字幕精品有坂深雪 | 99久久精品免费看国产一区二区三区 | 国产精品美女久久久| 99久久中文字幕|