游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1998|回复: 2

极度困惑!如何在显存中创建16位色深表面?

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-10-30 21:47:00 | 显示全部楼层 |阅读模式
dx6.0中,我想创建一个16位色深的主表面和一个16位色深的后备缓存,该怎么设置ddsd的属性呢?

异常痛苦等待答案中!!!

神人帮忙啊!!! [em4] [em4]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2005-10-30 21:59:00 | 显示全部楼层

Re:极度困惑!如何在显存中创建16位色深表面?

我的代码如下,可显示16bit位图时竟然是黑屏?!!!

DDSURFACEDESC2 ddsd2;         // working description
LPDIRECTDRAWSURFACE4 lpdds;  // temporary surface
   
// set to access caps, width, and height
memset(&ddsd2,0,sizeof(ddsd));

ddsd2.dwSize = sizeof(ddsd2);

ddsd2.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;

ddsd2.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM;
               
    ddsd2.dwWidth = width;
    ddsd2.dwHeight= height;
   
    ddsd2.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
    ddsd2.ddpfPixelFormat.dwFlags= DDPF_RGB;
    ddsd2.ddpfPixelFormat.dwRGBBitCount = (DWORD)2*8;

if (rgb16type()) //565
{
ddsd2.ddpfPixelFormat.dwFlags = DDPF_RGB;
ddsd2.ddpfPixelFormat.dwRGBBitCount = 16;
ddsd2.ddpfPixelFormat.dwRBitMask    = 0x0000F800;
ddsd2.ddpfPixelFormat.dwGBitMask    = 0x000007E0;
ddsd2.ddpfPixelFormat.dwBBitMask    = 0x0000001F;
}
else
{
ddsd2.ddpfPixelFormat.dwFlags = DDPF_RGB;
ddsd2.ddpfPixelFormat.dwRGBBitCount = 16;
ddsd2.ddpfPixelFormat.dwRBitMask    = 0x00007C00;
ddsd2.ddpfPixelFormat.dwGBitMask    = 0x000003E0;
ddsd2.ddpfPixelFormat.dwBBitMask    = 0x0000001F;
}

//////////////////////////

// create the surface
if (FAILED(lpdd->CreateSurface(&ddsd2,&lpdds,NULL)))
   return(NULL);

8

主题

239

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
发表于 2005-10-31 11:08:00 | 显示全部楼层

Re:极度困惑!如何在显存中创建16位色深表面?

我搞过d6,呵呵,
好想少了一句 ;
ddsd.ddpfPixelFormat.dwSize = bitPerPixel;/////指定象素格式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 11:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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