游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2006|回复: 4

DX 换页问题

[复制链接]

19

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2008-3-12 16:27:00 | 显示全部楼层 |阅读模式
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;

lpDD->CreateSurface(&ddsd, &lpDDSPrimary, NULL);

ddsd2.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
DDSCAPS ddscaps;
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack);

LPCSTR szStr;
szStr = "哈哈哈哈哈哈哈哈哈哈哈哈哈";

HDC hdc;

lpDDSPrimary->GetDC(&hdc);
SetBkColor(hdc, RGB(0, 0, 0));
SetTextColor(hdc, RGB(255, 255, 255));
TextOut(hdc, 100, 100, &quotrimary", 7);
lpDDSPrimary->ReleaseDC(hdc);

lpDDSBack->GetDC(&hdc);
SetBkColor(hdc, RGB(0, 0, 0));
SetTextColor(hdc, RGB(255, 255, 255));
TextOut(hdc, 100, 100, szStr, lstrlen(szStr));
LineTo(hdc, 200, 220);
lpDDSBack->ReleaseDC(hdc);

lpDDSPrimary->Flip(NULL, 0);



当lpDDSPrimary->Flip(NULL, 0);执行后, 后台缓存页面被翻到主页面上显示。。
如果没这句, 将不会显示任何图像。。

那我要怎么显示lpDDSPrimary里的东西呢。。。
这两个页面又是如何来不停的循环绘制,翻页呢。。

19

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2008-3-13 12:30:00 | 显示全部楼层

Re:DX 换页问题

谁告诉我啊。

19

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2008-3-26 13:00:00 | 显示全部楼层

Re:DX 换页问题

...........

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2008-3-26 22:13:00 | 显示全部楼层

Re:DX 换页问题

换页就是换页啦,把后备页翻上去后,主页就成了后备页了,写都是往后备页写。
不过用换页的话,后备页是上上的帧,图像数据隔了一帧,实现脏矩形有点麻烦,很多人干脆再开一个屏外表面,把这个表面往后备页上blit,再翻,实际上是双缓冲。另,窗口模式翻不了,只能blit。

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2008-3-26 22:17:00 | 显示全部楼层

Re:DX 换页问题

换页的原理:有个指针指向的一段数据是当前显示在屏幕的内容,这段数据就是主页面; 另有一段数据是后备页; 换页时,把这个指针的指向改一下就可以了,效率很高。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 14:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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