• <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年9月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011


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

            常用鏈接

            留言簿(94)

            隨筆分類(649)

            隨筆檔案(505)

            相冊

            BCB

            Crytek

            • crymod
            • Crytek's Offical Modding Portal

            Game Industry

            OGRE

            other

            Programmers

            Qt

            WOW Stuff

            搜索

            •  

            積分與排名

            • 積分 - 911663
            • 排名 - 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++
            青草国产精品久久久久久 | 亚洲欧美久久久久9999| 九九热久久免费视频| 99热热久久这里只有精品68| 狠狠综合久久综合中文88| 伊人久久大香线蕉影院95| 欧美一级久久久久久久大片| 久久狠狠爱亚洲综合影院| 99久久综合狠狠综合久久止| 久久综合成人网| 国产午夜福利精品久久2021| 久久99国产一区二区三区| 亚洲精品无码成人片久久| 国产精品欧美亚洲韩国日本久久| 久久综合久久综合亚洲| 久久亚洲私人国产精品| 久久久久香蕉视频| 久久91亚洲人成电影网站| 精品久久久久久国产| 国産精品久久久久久久| 国产成人久久精品区一区二区| 99久久99久久精品国产| 蜜臀久久99精品久久久久久小说| 久久精品草草草| 无码人妻久久一区二区三区| 狠狠色伊人久久精品综合网 | 久久亚洲熟女cc98cm| 久久精品国产精品亚洲精品| 久久精品国产影库免费看| 色欲av伊人久久大香线蕉影院| 亚洲精品97久久中文字幕无码| 久久婷婷国产麻豆91天堂| 国产精品久久国产精麻豆99网站| 成人久久免费网站| 久久亚洲国产最新网站| 亚洲欧美日韩精品久久亚洲区 | 久久精品aⅴ无码中文字字幕重口| 久久综合亚洲色HEZYO国产| 久久久久国产亚洲AV麻豆| 久久久久一级精品亚洲国产成人综合AV区 | 久久综合九色综合欧美就去吻|