【发布时间】:2011-05-02 16:11:36
【问题描述】:
我有一个无窗口的 IViewObject 对象。
我想调用它的 Draw 函数来渲染到 Opengl PBO 内存中(或者 OleDraw 更简单)。
现在我首先使用CreateDIBSection(它分配自己的内存)创建一个 HBITMAP,然后将其复制到我的 PBO 内存中。但是,我想避免这个额外的副本。我相信这在理论上应该是可能的,因为映射的 PBO 存在于页面锁定的内存中。
这就是我今天所做的简化:
hdc = CreateCompatibleDC(nullptr); // Get current DC
HBITMAP bitmap = CreateDIBSection(... hdc, &bitmap_data_...); // Create Bitmap
SelectObject(hdc, bitmap);
m_spViewObject->Draw(... hdc ...); // IViewObject->Draw to bitmap
memcpy(pbo_ptr, bitmap_data_, size);
我的问题是,是否有可能让 Draw 函数以某种方式绘制到我指定的内存(在本例中为 PBO)而不是由 win32 api (CreateDIBSection) 分配的内存?
如果可以从用户指定的内存创建与设备无关的位图,一种方法可能是?但是,我没有发现可以执行此操作的函数。
【问题讨论】: