游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5107|回复: 7

tmd,我就不信, directdraw为啥什么也画不出来!

[复制链接]

11

主题

28

帖子

30

积分

注册会员

Rank: 2

积分
30
发表于 2003-8-19 14:34:00 | 显示全部楼层 |阅读模式
vc用的是dx8.1sdk

代码如下
初始化directdraw

DDSURFACEDESC2 ddsd;
        DDSCAPS2       ddscaps;
        HRESULT          hRet;
       
        // Create the main DirectDraw object.
        hRet = DirectDrawCreateEx(NULL, (VOID**)&lpDD, IID_IDirectDraw7,
                NULL);
        if( hRet != DD_OK )
                return -1;
       
        // Get exclusive mode.
        hRet = lpDD->SetCooperativeLevel(NULL,DDSCL_NORMAL);
       
        if( hRet != DD_OK )
                return -2;
        // Create the primary surface.

        ZeroMemory(&ddsd, sizeof(ddsd));
   ddsd.dwSize = sizeof(ddsd);
   ddsd.dwFlags = DDSD_CAPS;//| DDSD_BACKBUFFERCOUNT;
   ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;// | DDSCAPS_FLIP|DDSCAPS_COMPLEX;
   ddsd.dwBackBufferCount = 1;

        hRet = lpDD->CreateSurface(&ddsd,(IDirectDrawSurface7**)&lpDDSPrimary, NULL);
        if( hRet != DD_OK )
        {
               
            return -1;
        }
        LPDIRECTDRAWCLIPPER pClipper = NULL;
        // If not, we'll setup a clipper for the window.  This will fix the
        // problem on a few video cards - but the ones that don't shouldn't
        // care.
        if( FAILED( hRet = lpDD->CreateClipper(0, &pClipper,NULL)))
                return hRet;
       
        if( FAILED( hRet = pClipper->SetHWnd(0, play_wnd ) ) )
                return hRet;
       
        if( FAILED( hRet = lpDDSPrimary->SetClipper( pClipper ) ) )
                return hRet;
       
        SAFE_RELEASE( pClipper );
        // Set the video mode to 640x480x16.  //fullscreen
        // hRet = g_pDD->SetDisplayMode(640, 480, 16, 0, 0);
        //if( hRet != DD_OK )
        //    return -3;
       
        DDPIXELFORMAT ddPixelFormat;
        ddPixelFormat.dwSize = sizeof(DDPIXELFORMAT);

ddPixelFormat.dwFlags = DDPF_FOURCC;

ddPixelFormat.dwFourCC =mmioFOURCC('Y','U','Y','2');

ddPixelFormat.dwYUVBitCount = 16;


    ZeroMemory(&ddsd,sizeof(ddsd));
    ddsd.dwSize=sizeof(ddsd);
    ddsd.dwFlags=DDSD_WIDTH|DDSD_HEIGHT|DDSD_CAPS;
    ddsd.dwWidth=m_width;
    ddsd.dwHeight=m_height;
    ddsd.ddsCaps.dwCaps =DDSCAPS_SYSTEMMEMORY | DDSCAPS_OFFSCREENPLAIN;


        memcpy(&(ddsd.ddpfPixelFormat), &ddPixelFormat, sizeof(DDPIXELFORMAT));


        hRet=lpDD->CreateSurface(&ddsd,&lpDDSBack,0);
        if( hRet != DD_OK )
                return -1;
               
        return 0; [em20]

11

主题

28

帖子

30

积分

注册会员

Rank: 2

积分
30
 楼主| 发表于 2003-8-19 14:35:00 | 显示全部楼层

Re: tmd,我就不信, directdraw为啥什么也画不出来!

初始化都通过了。
我的数据是yv12的,我不会用directdraw显示yv12,所以在下面的显示部分代码我这么处理的:

DDSURFACEDESC2 ddsd;
        ZeroMemory(&ddsd,sizeof(ddsd));
        ddsd.dwSize=sizeof(ddsd);
        RECT g_rect;
        g_rect.bottom=m_height;
        g_rect.left=px;
        g_rect.right=m_width;
        g_rect.top=py;

        if (lpDDSPrimary->IsLost() == DDERR_SURFACELOST)
        lpDDSPrimary->Restore();

        if FAILED(lpDDSBack->Lock(NULL, &ddsd,0,NULL))// DDLOCK_WAIT , NULL))
                return ;


        yuy2_out(m_y_buffer[cur_index],m_width,m_u_buffer[cur_index],m_v_buffer[cur_index],m_width>>1,
                (uint8_t *)ddsd.lpSurface,m_width,-m_height,m_width);
       

        if FAILED(lpDDSBack->Unlock(NULL))
                return;
               
//        if(FAILED(lpDDSPrimary->Blt(&g_rect,lpDDSBack,NULL,0,NULL)))//显示
        //    return;
    if(FAILED(lpDDSPrimary->BltFast( 0, 0, lpDDSBack, &g_rect, DDBLTFAST_SRCCOLORKEY)))
                return; [em7]

11

主题

28

帖子

30

积分

注册会员

Rank: 2

积分
30
 楼主| 发表于 2003-8-19 14:37:00 | 显示全部楼层

Re: tmd,我就不信, directdraw为啥什么也画不出来!

。。。。。。。。
我用GDI的话,把YV12转化为RGB,然后用GDI画出来就是正确的

用directdraw画就是黑的,啥也没有。

谁给我一些调试的建议阿!怎么看到底给没给directdraw传过去东西 [em21]

11

主题

28

帖子

30

积分

注册会员

Rank: 2

积分
30
 楼主| 发表于 2003-8-19 15:21:00 | 显示全部楼层

Re: tmd,我就不信, directdraw为啥什么也画不出来!

最后一句是如下,还是没反应
if(FAILED(lpDDSPrimary->Blt(&g_rect,lpDDSBack,NULL,0,NULL)))//显示
            return;
我的程序不是全屏的。。。。。。。。。。
桌面分辨率是1152x768@32bits
  [em7]

0

主题

2

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2003-8-19 17:48:00 | 显示全部楼层

Re:tmd,我就不信, directdraw为啥什么也画不出来!

你既然用的是8.1,那么为什么不去看看它带的例子代码。

11

主题

28

帖子

30

积分

注册会员

Rank: 2

积分
30
 楼主| 发表于 2003-8-20 11:08:00 | 显示全部楼层

Re:tmd,我就不信, directdraw为啥什么也画不出来!

up一下
shit 的dx8.1的例子都是用自己封装的 CDisplay

11

主题

28

帖子

30

积分

注册会员

Rank: 2

积分
30
 楼主| 发表于 2003-8-23 10:44:00 | 显示全部楼层

Re:tmd,我就不信, directdraw为啥什么也画不出来!

upupupupup

11

主题

28

帖子

30

积分

注册会员

Rank: 2

积分
30
 楼主| 发表于 2003-8-26 09:11:00 | 显示全部楼层

Re:tmd,我就不信, directdraw为啥什么也画不出来!

upuppuupupupupup
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-11-22 06:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表