PDD_CREATESURFACE回调函数 (ddrawint.h)

CreateD3DBuffer 回调函数用于创建指定说明的驱动程序级命令或顶点缓冲区。

语法

PDD_CREATESURFACE PddCreatesurface;

DWORD PddCreatesurface(
  PDD_CREATESURFACEDATA unnamedParam1
)
{...}

参数

unnamedParam1

指向包含创建缓冲区所需的信息的 DD_CREATESURFACEDATA 结构。

返回值

CreateD3DBuffer 返回以下回调代码之一:

注解

仅当驱动程序管理驱动程序级命令和顶点缓冲区时,才使用此回调。

默认情况下,在 Windows 2000 及更高版本上创建主图面时,不会通知驱动程序。 但是,如果驱动程序在 DdGetDriverInfo 调用中支持GUID_NTPrivateDriverCaps GUID,并且DDHAL_PRIVATECAP_NOTIFYPRIMARYCREATION标志在 DD_NTPRIVATEDRIVERCAPS 结构的 dwPrivateCaps 成员中设置,则会通知驱动程序。

必须在 DD_SURFACE_GLOBALDDSURFACEDESC 结构的 lPitch 成员中返回音调。 对于线性内存,驱动程序应将 dwBlockSizeX 设置为内存区域的大小(以字节为单位),并将 dwBlockSizeY 设置为 1。 两者都是DD_SURFACE_GLOBAL结构的成员。

此调用的原型与 DdCreateSurface 相同。 当有问题的图面在DD_SURFACE_LOCAL结构的 ddsCaps 成员中设置了DDSCAPS_EXECUTEBUFFER标志时,将改用 CreateD3DBuffer 回调。 缓冲区创建标志DDSCAPS_WRITEONLY、DDSCAPS2_VERTEXBUFFER和DDSCAPS2_COMMANDBUFFER。

驱动程序通过检查DD_SURFACE_LOCAL结构的 ddsCaps 成员来确定请求的缓冲区类型,以获取以下标志:

标志 含义
DDSCAPS2_COMMANDBUFFER 驱动程序应分配命令缓冲区。
DDSCAPS2_VERTEXBUFFER 驱动程序应分配显式顶点缓冲区。
 
注意 如果两个标志均未设置,驱动程序应分配隐式顶点缓冲区。 不应将隐式顶点缓冲区放置在视频内存中,因为它们应是可读/写的。 只有设置了DDSCAPS_WRITEONLY标志的显式顶点缓冲区才能安全地放置在视频内存中。
 
驱动程序可以分配缓冲区内存本身,也可以请求 Microsoft DirectDraw 执行内存管理。 如果驱动程序执行分配,则必须将有效的指针写入到DD_SURFACE_GLOBAL结构的 fpVidMem 成员中的内存。

或者,驱动程序可以通过在 fpVidMem 中返回以下值之一来请求 DirectDraw 分配缓冲区:

含义
DDHAL_PLEASEALLOC_BLOCKSIZE DirectDraw 应从屏幕外内存中分配缓冲区内存。
DDHAL_PLEASEALLOC_USERMEM DirectDraw 应从用户内存中分配缓冲区内存。 驱动程序还必须返回 dwUserMemSize 中内存区域的大小(以字节为单位)。

要求

要求
目标平台 桌面
标头 ddrawint.h (包括 Winddi.h)

另请参阅

DDSURFACEDESC

DD_CREATESURFACEDATA

DD_NTPRIVATEDRIVERCAPS

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL

DdCreateSurface

DdGetDriverInfo