• <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>
            隨筆 - 505  文章 - 1034  trackbacks - 0
            <2008年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345


            子曾經曰過:編程無他,唯手熟爾!

            常用鏈接

            留言簿(94)

            隨筆分類(649)

            隨筆檔案(505)

            相冊

            BCB

            Crytek

            • crymod
            • Crytek's Offical Modding Portal

            Game Industry

            OGRE

            other

            Programmers

            Qt

            WOW Stuff

            搜索

            •  

            積分與排名

            • 積分 - 911346
            • 排名 - 14

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            位置Microsoft Platform SDK for Windows Server 2003 R2\Samples\Multimedia\DirectShow\Players\Texture3D9\
            看名字就知道是把dshow解碼出來的數據渲染到紋理上,但是這目錄里面沒有.proj項目文件,只有Makefile,為了方便,我們根據Makefile自己創建項目文件


            附加包含目錄: ..\..\BaseClasses;..\..\Common
            鏈接 
                     附加庫目錄:  ..\..\BaseClasses\XP32_DEBUG
                     附加依賴項: d3dx9.lib d3d9.lib winmm.lib strmbasd.lib shell32.lib

            這個strmbasd.lib不是安裝了platform sdk就有了,要我們自己生成,如何生成呢?

            選這個(Debug)的,進Samples目錄,然后nmake,要比較長時間,出去遛個彎回來就好了

            看到這樣的畫面應該就是生成好了。

            特殊項目配置:
                     使用多字節字符集              用unicode的話有函數鏈接的時候找不到【重劍注:因為鏈接的strmbasd.lib不是unicode的,看這個玩玩DirectShow--(4)Platform SDK生成Unicode版本的strmbasd.lib
                     多線程調試(/MTd)              不用這個就一堆link2005的錯誤
            截圖:

            核心源碼:
                    hr = g_pd3dDevice->CreateTexture(uintWidth, uintHeight, 1D3DUSAGE_DYNAMIC,
                                                     D3DFMT_X8R8G8B8,D3DPOOL_DEFAULT,
                                                     
            &g_pTexture, NULL);


                     Using Dynamic Textures

                      更新texture數據的部分

            HRESULT CTextureRenderer::DoRenderSample( IMediaSample * pSample )
            {
                BYTE  
            *pBmpBuffer, *pTxtBuffer; // Bitmap buffer, texture buffer
                LONG  lTxtPitch;                // Pitch of bitmap, texture

                BYTE  
            * pbS = NULL;
                DWORD 
            * pdwS = NULL;
                DWORD 
            * pdwD = NULL;
                UINT row, col, dwordWidth;

                CheckPointer(pSample,E_POINTER);
                CheckPointer(g_pTexture,E_UNEXPECTED);

                
            // Get the video bitmap buffer
                pSample->GetPointer( &pBmpBuffer );

                
            // Lock the Texture
                D3DLOCKED_RECT d3dlr;
                
            if( m_bUseDynamicTextures )
                {
                    
            if( FAILED(g_pTexture->LockRect(0&d3dlr, 0, D3DLOCK_DISCARD)))
                        
            return E_FAIL;
                }
                
            else
                {
                    
            if (FAILED(g_pTexture->LockRect(0&d3dlr, 00)))
                        
            return E_FAIL;
                }
                
            // Get the texture buffer & pitch
                pTxtBuffer = static_cast<byte *>(d3dlr.pBits);
                lTxtPitch 
            =
             d3dlr.Pitch;


                
            // Copy the bits

                
            if (g_TextureFormat == D3DFMT_X8R8G8B8)
                {
                    
            // Instead of copying data bytewise, we use DWORD alignment here.
                    
            // We also unroll loop by copying 4 pixels at once.
                    
            //
                    
            // original BYTE array is [b0][g0][r0][b1][g1][r1][b2][g2][r2][b3][g3][r3]
                    
            //
                    
            // aligned DWORD array is     [b1 r0 g0 b0][g2 b2 r1 g1][r3 g3 b3 r2]
                    
            //
                    
            // We want to transform it to [ff r0 g0 b0][ff r1 g1 b1][ff r2 g2 b2][ff r3 b3 g3]
                    
            // below, bitwise operations do exactly this.

                    dwordWidth 
            = m_lVidWidth / 4// aligned width of the row, in DWORDS
                                                  
            // (pixel by 3 bytes over sizeof(DWORD))

                    
            for( row = 0; row< (UINT)m_lVidHeight; row++)
                    {
                        pdwS 
            = ( DWORD*)pBmpBuffer;
                        pdwD 
            = ( DWORD*)pTxtBuffer;

                        
            for( col = 0; col < dwordWidth; col ++ )
                        {
                            pdwD[
            0=  pdwS[0| 0xFF000000;
                            pdwD[
            1= ((pdwS[1]<<8)  | 0xFF000000| (pdwS[0]>>24);
                            pdwD[
            2= ((pdwS[2]<<16| 0xFF000000| (pdwS[1]>>16);
                            pdwD[
            3= 0xFF000000 | (pdwS[2]>>8);
                            pdwD 
            +=4;
                            pdwS 
            +=3;
                        }

                        
            // we might have remaining (misaligned) bytes here
                        pbS = (BYTE*) pdwS;
                        
            for( col = 0; col < (UINT)m_lVidWidth % 4; col++)
                        {
                            
            *pdwD = 0xFF000000     |
                                    (pbS[
            2<< 16|
                                    (pbS[
            1<<  8|
                                    (pbS[
            0]);
                            pdwD
            ++;
                            pbS 
            += 3;
                        }

                        pBmpBuffer  
            += m_lVidPitch;
                        pTxtBuffer 
            += lTxtPitch;
                    }
            // for rows
                }

                
            if (g_TextureFormat == D3DFMT_A1R5G5B5)
                {
                    
            for(int y = 0; y < m_lVidHeight; y++ )
                    {
                        BYTE 
            *pBmpBufferOld = pBmpBuffer;
                        BYTE 
            *pTxtBufferOld = pTxtBuffer;

                        
            for (int x = 0; x < m_lVidWidth; x++)
                        {
                            
            *(WORD *)pTxtBuffer = (WORD)
                                (
            0x8000 +
                                ((pBmpBuffer[
            2& 0xF8<< 7+
                                ((pBmpBuffer[
            1& 0xF8<< 2+
                                (pBmpBuffer[
            0>> 3));

                            pTxtBuffer 
            += 2;
                            pBmpBuffer 
            += 3;
                        }

                        pBmpBuffer 
            = pBmpBufferOld + m_lVidPitch;
                        pTxtBuffer 
            = pTxtBufferOld + lTxtPitch;
                    }
                }

                
            // Unlock the Texture
                if (FAILED(g_pTexture->UnlockRect(0)))
                    
            return E_FAIL;

                
            return S_OK;
            }


             2009-1-9 這個例子用到了platform sdk中的BaseClasses,用到引擎中的時候麻煩多多,我搞了幾天,愣是編譯不過!我日!考慮放棄dshow,用xvid

            在游戲中播放過場電影

            posted on 2008-12-23 00:23 七星重劍 閱讀(1861) 評論(0)  編輯 收藏 引用 所屬分類: Game GraphicsIDE -- visual c++
            久久狠狠爱亚洲综合影院| 久久夜色精品国产| 久久A级毛片免费观看| 久久AAAA片一区二区| 一本一本久久A久久综合精品| 久久亚洲私人国产精品vA| 激情伊人五月天久久综合| 亚洲第一永久AV网站久久精品男人的天堂AV| 一级A毛片免费观看久久精品| 国产产无码乱码精品久久鸭| 久久精品国产亚洲精品2020| 色综合合久久天天综合绕视看| 少妇无套内谢久久久久| 色综合久久天天综合| 无码人妻少妇久久中文字幕| 无码专区久久综合久中文字幕| 香蕉久久AⅤ一区二区三区| 午夜欧美精品久久久久久久| 97久久超碰成人精品网站| 久久久久久毛片免费播放| 精品久久久久中文字幕一区| 一本色道久久HEZYO无码| 久久精品国产亚洲av瑜伽| 国产精品美女久久久久AV福利| 久久久精品午夜免费不卡| 久久乐国产综合亚洲精品| 精品无码久久久久久国产| 青草国产精品久久久久久| 久久亚洲熟女cc98cm| 91精品免费久久久久久久久| 国产精品亚洲美女久久久| 久久久久亚洲AV无码麻豆| 久久久久亚洲AV片无码下载蜜桃| 久久精品国产秦先生| 亚洲国产精品一区二区久久| 精品久久久久久久久免费影院 | 免费一级欧美大片久久网| 欧美黑人激情性久久| 97精品伊人久久久大香线蕉| 欧美激情精品久久久久久久九九九 | a级成人毛片久久|