• <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++
            久久精品国产亚洲αv忘忧草| 久久精品99久久香蕉国产色戒| 91精品久久久久久无码| 国产激情久久久久影院老熟女免费| 亚洲午夜久久影院| 狠狠色丁香婷婷久久综合| 国产精品久久一区二区三区| 狠狠色综合久久久久尤物| 伊人久久大香线蕉亚洲五月天| 97精品伊人久久大香线蕉app| 久久国产V一级毛多内射| 久久综合给合久久国产免费| 国产福利电影一区二区三区久久久久成人精品综合 | 久久高清一级毛片| 性欧美大战久久久久久久久| 久久久精品无码专区不卡| 亚洲国产美女精品久久久久∴| 国内精品久久久久国产盗摄| 72种姿势欧美久久久久大黄蕉 | 97久久国产露脸精品国产| 国产精品99久久久久久猫咪| 久久久久免费看成人影片| 亚洲欧洲中文日韩久久AV乱码| 99久久国产综合精品成人影院| 久久丫忘忧草产品| 伊人精品久久久久7777| 久久久黄片| 久久午夜福利电影| 久久精品国产亚洲一区二区三区| 久久成人影院精品777| 99久久777色| 久久九九亚洲精品| 久久免费线看线看| 88久久精品无码一区二区毛片 | 91精品免费久久久久久久久| 国内精品九九久久久精品| 久久精品国产2020| 亚洲va中文字幕无码久久不卡| 伊人久久综合精品无码AV专区| 亚洲精品白浆高清久久久久久| 日日噜噜夜夜狠狠久久丁香五月|