返回信息流在初始化DirectDraw环境时需要创建主页面和离屏页面。这里的主页面、离屏页面的作用分别是什么?缺少了它们会怎么样?
查过SDK文档,只有如下解释,不太好理解
DDSCAPS_PRIMARYSURFACE
Indicates that this surface is the primary surface. The primary surface represents what the user is seeing at the moment.
这就是说主页面就是用户当前看到的页面?以这个页面为基础添加其余的页面?
DDSCAPS_OFFSCREENPLAIN
Indicates that this surface is any offscreen surface that is not an overlay, texture, zbuffer, front buffer, back buffer, or alpha surface. It is used to identify plain vanilla surfaces.
这里“plain vanilla surface”是什么意思呢?
这是一条镜像帖。来源:北邮人论坛 / soft-design / #24989同步于 2008/4/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
[求助]问两个有关DirectX图像开发的术语
DaiGakuSei
2008/4/19镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
简单的说就是当前显示在用户可见屏幕的页面和用户暂时看不到的页面。。。
前者你得做各种处理输出最终结果绘制到屏幕上吧。。。后者。。。你现在急着处理。。。不是浪费内存和CPU么。。。- -
至于详细的解释。。。待我去召唤一个最近正在研究3D引擎各种着迷的人来给你。。。
lz所说的问题实际上就是双缓冲,但双缓冲也不是dx独有的东西,用GDI写一个图形程序也可以用双缓冲。。。
实际上,离屏页面的作用,就是在一帧的渲染流程中,先在内存里把要往屏幕上绘制的像素全部准备好,然后在渲染流程的最后,将这部分数据直接送到显卡,显示出来。
如果不这样做有什么坏处?
如果不这样做,那么就会出现一种“闪烁”的状况。
lz可以尝试自己写一个GDI程序,在主消息循环里,每帧先Invalidate一下,然后再用窗口DC绘制些直线,矩形之类的图元,就可以明显的看到窗口在闪烁。
发生“闪烁”的原因是,当两帧连续的图像差别过大的时候,人眼感受到的一种明显差异。
之所以先Invalidate之后再直接往屏幕绘制图元会感到闪烁,就是因为这个Invalidate用窗口的背景色填充了整个窗口(这是第一步操作),而后再在屏幕dc上绘制,显示全部的图形,(这是第二步操作)两步操作造成了屏幕上的图像差异过大,人眼感觉非常明显。
如果你更换一下方式,在主循环中,建立一个跟屏幕兼容的位图,然后在位图上绘制图元,最后不通过Invalidate,而是直接Bltbit这张内存里的位图到窗口上,则不会产生闪烁。(这实际上就跟dx的双缓冲的原理是一样的)因为连续两帧图像的差异很小。
ddraw里的双缓冲就是类似的意思。