ReactOS 0.4.17-dev-934-g091855f
bitmap.c File Reference
#include "d2d1_private.h"
#include "wincodec.h"
Include dependency graph for bitmap.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (d2d)
 
static struct d2d_bitmap * impl_from_ID2D1Bitmap1 (ID2D1Bitmap1 *iface)
 
static HRESULT d2d_bitmap_unmap (struct d2d_bitmap *bitmap)
 
static HRESULT STDMETHODCALLTYPE d2d_bitmap_QueryInterface (ID2D1Bitmap1 *iface, REFIID iid, void **out)
 
static ULONG STDMETHODCALLTYPE d2d_bitmap_AddRef (ID2D1Bitmap1 *iface)
 
static ULONG STDMETHODCALLTYPE d2d_bitmap_Release (ID2D1Bitmap1 *iface)
 
static void STDMETHODCALLTYPE d2d_bitmap_GetFactory (ID2D1Bitmap1 *iface, ID2D1Factory **factory)
 
static D2D1_SIZE_F *STDMETHODCALLTYPE d2d_bitmap_GetSize (ID2D1Bitmap1 *iface, D2D1_SIZE_F *size)
 
static D2D1_SIZE_U *STDMETHODCALLTYPE d2d_bitmap_GetPixelSize (ID2D1Bitmap1 *iface, D2D1_SIZE_U *pixel_size)
 
static D2D1_PIXEL_FORMAT *STDMETHODCALLTYPE d2d_bitmap_GetPixelFormat (ID2D1Bitmap1 *iface, D2D1_PIXEL_FORMAT *format)
 
static void STDMETHODCALLTYPE d2d_bitmap_GetDpi (ID2D1Bitmap1 *iface, float *dpi_x, float *dpi_y)
 
static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromBitmap (ID2D1Bitmap1 *iface, const D2D1_POINT_2U *dst_point, ID2D1Bitmap *bitmap, const D2D1_RECT_U *src_rect)
 
static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromRenderTarget (ID2D1Bitmap1 *iface, const D2D1_POINT_2U *dst_point, ID2D1RenderTarget *render_target, const D2D1_RECT_U *src_rect)
 
static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromMemory (ID2D1Bitmap1 *iface, const D2D1_RECT_U *dst_rect, const void *src_data, UINT32 pitch)
 
static void STDMETHODCALLTYPE d2d_bitmap_GetColorContext (ID2D1Bitmap1 *iface, ID2D1ColorContext **context)
 
static D2D1_BITMAP_OPTIONS STDMETHODCALLTYPE d2d_bitmap_GetOptions (ID2D1Bitmap1 *iface)
 
static HRESULT STDMETHODCALLTYPE d2d_bitmap_GetSurface (ID2D1Bitmap1 *iface, IDXGISurface **surface)
 
static HRESULT STDMETHODCALLTYPE d2d_bitmap_Map (ID2D1Bitmap1 *iface, D2D1_MAP_OPTIONS options, D2D1_MAPPED_RECT *mapped_rect)
 
static HRESULT STDMETHODCALLTYPE d2d_bitmap_Unmap (ID2D1Bitmap1 *iface)
 
static BOOL format_supported (const D2D1_PIXEL_FORMAT *format)
 
static void d2d_bitmap_init (struct d2d_bitmap *bitmap, struct d2d_device_context *context, ID3D11Resource *resource, D2D1_SIZE_U size, const D2D1_BITMAP_PROPERTIES1 *desc)
 
static BOOL check_bitmap_options (unsigned int options)
 
HRESULT d2d_bitmap_create (struct d2d_device_context *context, D2D1_SIZE_U size, const void *src_data, UINT32 pitch, const D2D1_BITMAP_PROPERTIES1 *desc, struct d2d_bitmap **bitmap)
 
unsigned int d2d_get_bitmap_options_for_surface (IDXGISurface *surface)
 
HRESULT d2d_bitmap_create_shared (struct d2d_device_context *context, REFIID iid, void *data, const D2D1_BITMAP_PROPERTIES1 *desc, struct d2d_bitmap **bitmap)
 
HRESULT d2d_bitmap_create_from_wic_bitmap (struct d2d_device_context *context, IWICBitmapSource *bitmap_source, const D2D1_BITMAP_PROPERTIES1 *desc, struct d2d_bitmap **bitmap)
 
struct d2d_bitmap * unsafe_impl_from_ID2D1Bitmap (ID2D1Bitmap *iface)
 

Variables

static const struct ID2D1Bitmap1Vtbl d2d_bitmap_vtbl
 

Function Documentation

◆ check_bitmap_options()

static BOOL check_bitmap_options ( unsigned int  options)
static

Definition at line 406 of file bitmap.c.

407{
408 switch (options)
409 {
416 return TRUE;
417 default:
418 WARN("Invalid bitmap options %#x.\n", options);
419 return FALSE;
420 }
421}
#define WARN(fmt,...)
Definition: precomp.h:61
@ D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE
Definition: d2d1_1.idl:92
@ D2D1_BITMAP_OPTIONS_CANNOT_DRAW
Definition: d2d1_1.idl:90
@ D2D1_BITMAP_OPTIONS_CPU_READ
Definition: d2d1_1.idl:91
@ D2D1_BITMAP_OPTIONS_NONE
Definition: d2d1_1.idl:88
@ D2D1_BITMAP_OPTIONS_TARGET
Definition: d2d1_1.idl:89
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117

Referenced by d2d_bitmap_create().

◆ d2d_bitmap_AddRef()

static ULONG STDMETHODCALLTYPE d2d_bitmap_AddRef ( ID2D1Bitmap1 *  iface)
static

Definition at line 69 of file bitmap.c.

70{
73
74 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
75
76 return refcount;
77}
#define InterlockedIncrement
Definition: armddk.h:53
static struct d2d_bitmap * impl_from_ID2D1Bitmap1(ID2D1Bitmap1 *iface)
Definition: bitmap.c:24
#define TRACE(s)
Definition: solgame.cpp:4
Definition: uimain.c:89
uint32_t ULONG
Definition: typedefs.h:59

◆ d2d_bitmap_CopyFromBitmap()

static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromBitmap ( ID2D1Bitmap1 *  iface,
const D2D1_POINT_2U *  dst_point,
ID2D1Bitmap *  bitmap,
const D2D1_RECT_U *  src_rect 
)
static

Definition at line 152 of file bitmap.c.

154{
155 struct d2d_bitmap *src_bitmap = unsafe_impl_from_ID2D1Bitmap(bitmap);
156 struct d2d_bitmap *dst_bitmap = impl_from_ID2D1Bitmap1(iface);
157 ID3D11DeviceContext *context;
158 ID3D11Device *device;
160
161 TRACE("iface %p, dst_point %p, bitmap %p, src_rect %p.\n", iface, dst_point, bitmap, src_rect);
162
163 if (src_rect)
164 {
165 box.left = src_rect->left;
166 box.top = src_rect->top;
167 box.front = 0;
168 box.right = src_rect->right;
169 box.bottom = src_rect->bottom;
170 box.back = 1;
171 }
172
173 ID3D11Resource_GetDevice(dst_bitmap->resource, &device);
174 ID3D11Device_GetImmediateContext(device, &context);
175 ID3D11DeviceContext_CopySubresourceRegion(context, dst_bitmap->resource, 0,
176 dst_point ? dst_point->x : 0, dst_point ? dst_point->y : 0, 0,
177 src_bitmap->resource, 0, src_rect ? &box : NULL);
178 ID3D11DeviceContext_Release(context);
179 ID3D11Device_Release(device);
180
181 return S_OK;
182}
#define NULL
Definition: types.h:112
struct d2d_bitmap * unsafe_impl_from_ID2D1Bitmap(ID2D1Bitmap *iface)
Definition: bitmap.c:769
#define S_OK
Definition: intsafe.h:52
UINT32 bottom
Definition: d2dbasetypes.h:52
UINT32 top
Definition: d2dbasetypes.h:50
UINT32 left
Definition: d2dbasetypes.h:49
UINT32 right
Definition: d2dbasetypes.h:51
Definition: palette.c:466
Definition: http.c:7252
ID3D11Resource * resource
Definition: d2d1_private.h:432
Definition: devices.h:37

◆ d2d_bitmap_CopyFromMemory()

static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromMemory ( ID2D1Bitmap1 *  iface,
const D2D1_RECT_U *  dst_rect,
const void *  src_data,
UINT32  pitch 
)
static

Definition at line 192 of file bitmap.c.

194{
196 ID3D11DeviceContext *context;
197 ID3D11Device *device;
199
200 TRACE("iface %p, dst_rect %p, src_data %p, pitch %u.\n", iface, dst_rect, src_data, pitch);
201
202 if (dst_rect)
203 {
204 box.left = dst_rect->left;
205 box.top = dst_rect->top;
206 box.front = 0;
207 box.right = dst_rect->right;
208 box.bottom = dst_rect->bottom;
209 box.back = 1;
210 }
211
212 ID3D11Resource_GetDevice(bitmap->resource, &device);
213 ID3D11Device_GetImmediateContext(device, &context);
214 ID3D11DeviceContext_UpdateSubresource(context, bitmap->resource, 0, dst_rect ? &box : NULL, src_data, pitch, 0);
215 ID3D11DeviceContext_Release(context);
216 ID3D11Device_Release(device);
217
218 return S_OK;
219}

◆ d2d_bitmap_CopyFromRenderTarget()

static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromRenderTarget ( ID2D1Bitmap1 *  iface,
const D2D1_POINT_2U *  dst_point,
ID2D1RenderTarget *  render_target,
const D2D1_RECT_U *  src_rect 
)
static

Definition at line 184 of file bitmap.c.

186{
187 FIXME("iface %p, dst_point %p, render_target %p, src_rect %p stub!\n", iface, dst_point, render_target, src_rect);
188
189 return E_NOTIMPL;
190}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ d2d_bitmap_create()

HRESULT d2d_bitmap_create ( struct d2d_device_context *  context,
D2D1_SIZE_U  size,
const void *  src_data,
UINT32  pitch,
const D2D1_BITMAP_PROPERTIES1 *  desc,
struct d2d_bitmap **  bitmap 
)

Definition at line 423 of file bitmap.c.

425{
426 D3D11_SUBRESOURCE_DATA resource_data;
427 D2D1_BITMAP_PROPERTIES1 bitmap_desc;
428 D3D11_TEXTURE2D_DESC texture_desc;
429 ID3D11Texture2D *texture;
430 HRESULT hr;
431
432 if (!format_supported(&desc->pixelFormat))
433 {
434 WARN("Tried to create bitmap with unsupported format {%#x / %#x}.\n",
435 desc->pixelFormat.format, desc->pixelFormat.alphaMode);
437 }
438
439 if (desc->dpiX == 0.0f && desc->dpiY == 0.0f)
440 {
441 bitmap_desc = *desc;
442 bitmap_desc.dpiX = context->desc.dpiX;
443 bitmap_desc.dpiY = context->desc.dpiY;
444 desc = &bitmap_desc;
445 }
446 else if (desc->dpiX <= 0.0f || desc->dpiY <= 0.0f)
447 {
448 return E_INVALIDARG;
449 }
450
451 if (!check_bitmap_options(desc->bitmapOptions))
452 return E_INVALIDARG;
453
454 texture_desc.Width = size.width;
455 texture_desc.Height = size.height;
456 if (!texture_desc.Width || !texture_desc.Height)
457 texture_desc.Width = texture_desc.Height = 1;
458 texture_desc.MipLevels = 1;
459 texture_desc.ArraySize = 1;
460 texture_desc.Format = desc->pixelFormat.format;
461 texture_desc.SampleDesc.Count = 1;
462 texture_desc.SampleDesc.Quality = 0;
463 texture_desc.Usage = D3D11_USAGE_DEFAULT;
464 if (desc->bitmapOptions & D2D1_BITMAP_OPTIONS_CPU_READ)
465 texture_desc.Usage = D3D11_USAGE_STAGING;
466 texture_desc.BindFlags = 0;
467 if (desc->bitmapOptions & D2D1_BITMAP_OPTIONS_TARGET)
468 texture_desc.BindFlags |= D3D11_BIND_RENDER_TARGET;
469 if (!(desc->bitmapOptions & D2D1_BITMAP_OPTIONS_CANNOT_DRAW))
470 texture_desc.BindFlags |= D3D11_BIND_SHADER_RESOURCE;
471 texture_desc.CPUAccessFlags = 0;
472 if (desc->bitmapOptions & D2D1_BITMAP_OPTIONS_CPU_READ)
473 texture_desc.CPUAccessFlags |= D3D11_CPU_ACCESS_READ;
474 texture_desc.MiscFlags = 0;
475 if (desc->bitmapOptions & D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE)
476 texture_desc.MiscFlags |= D3D11_RESOURCE_MISC_GDI_COMPATIBLE;
477
478 resource_data.pSysMem = src_data;
479 resource_data.SysMemPitch = pitch;
480
481 if (FAILED(hr = ID3D11Device1_CreateTexture2D(context->d3d_device, &texture_desc,
482 src_data ? &resource_data : NULL, &texture)))
483 {
484 ERR("Failed to create texture, hr %#lx.\n", hr);
485 return hr;
486 }
487
488 if ((*bitmap = calloc(1, sizeof(**bitmap))))
489 {
490 d2d_bitmap_init(*bitmap, context, (ID3D11Resource *)texture, size, desc);
491 TRACE("Created bitmap %p.\n", *bitmap);
492 }
493 ID3D11Texture2D_Release(texture);
494
495 return *bitmap ? S_OK : E_OUTOFMEMORY;
496}
#define ERR(fmt,...)
Definition: precomp.h:57
#define D2DERR_UNSUPPORTED_PIXEL_FORMAT
Definition: d2derr.h:24
@ D3D11_RESOURCE_MISC_GDI_COMPATIBLE
Definition: d3d11.idl:1042
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
HRESULT hr
Definition: delayimp.cpp:582
static BOOL format_supported(const D2D1_PIXEL_FORMAT *format)
Definition: bitmap.c:331
static BOOL check_bitmap_options(unsigned int options)
Definition: bitmap.c:406
static void d2d_bitmap_init(struct d2d_bitmap *bitmap, struct d2d_device_context *context, ID3D11Resource *resource, D2D1_SIZE_U size, const D2D1_BITMAP_PROPERTIES1 *desc)
Definition: bitmap.c:366
GLenum GLuint texture
Definition: glext.h:6295
GLsizeiptr size
Definition: glext.h:5919
#define FAILED(hr)
Definition: intsafe.h:51
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
#define calloc
Definition: rosglue.h:14

Referenced by d2d_bitmap_create_from_wic_bitmap(), d2d_device_context_CreateBitmap(), and d2d_device_context_ID2D1DeviceContext_CreateBitmap().

◆ d2d_bitmap_create_from_wic_bitmap()

HRESULT d2d_bitmap_create_from_wic_bitmap ( struct d2d_device_context *  context,
IWICBitmapSource *  bitmap_source,
const D2D1_BITMAP_PROPERTIES1 *  desc,
struct d2d_bitmap **  bitmap 
)

Definition at line 659 of file bitmap.c.

661{
662 const D2D1_PIXEL_FORMAT *d2d_format;
663 D2D1_BITMAP_PROPERTIES1 bitmap_desc;
665 unsigned int bpp, data_size;
667 unsigned int i;
669 UINT32 pitch;
670 HRESULT hr;
671 void *data;
672
673 static const struct
674 {
675 const WICPixelFormatGUID *wic;
677 }
678 format_lookup[] =
679 {
680 {&GUID_WICPixelFormat32bppPBGRA, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED}},
681 {&GUID_WICPixelFormat32bppPRGBA, {DXGI_FORMAT_R8G8B8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED}},
682 {&GUID_WICPixelFormat32bppBGR, {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE}},
683 {&GUID_WICPixelFormat32bppRGB, {DXGI_FORMAT_R8G8B8A8_UNORM, D2D1_ALPHA_MODE_IGNORE}},
684 };
685
686 if (FAILED(hr = IWICBitmapSource_GetSize(bitmap_source, &size.width, &size.height)))
687 {
688 WARN("Failed to get bitmap size, hr %#lx.\n", hr);
689 return hr;
690 }
691
692 if (!desc)
693 {
695 bitmap_desc.pixelFormat.alphaMode = D2D1_ALPHA_MODE_UNKNOWN;
696 bitmap_desc.dpiX = 0.0f;
697 bitmap_desc.dpiY = 0.0f;
698 bitmap_desc.bitmapOptions = 0;
699 bitmap_desc.colorContext = NULL;
700 }
701 else
702 {
703 bitmap_desc = *desc;
704 }
705
706 if (FAILED(hr = IWICBitmapSource_GetPixelFormat(bitmap_source, &wic_format)))
707 {
708 WARN("Failed to get bitmap format, hr %#lx.\n", hr);
709 return hr;
710 }
711
712 for (i = 0, d2d_format = NULL; i < ARRAY_SIZE(format_lookup); ++i)
713 {
714 if (IsEqualGUID(&wic_format, format_lookup[i].wic))
715 {
716 d2d_format = &format_lookup[i].d2d;
717 break;
718 }
719 }
720
721 if (!d2d_format)
722 {
723 WARN("Unsupported WIC bitmap format %s.\n", debugstr_guid(&wic_format));
725 }
726
727 if (bitmap_desc.pixelFormat.format == DXGI_FORMAT_UNKNOWN)
728 bitmap_desc.pixelFormat.format = d2d_format->format;
729 if (bitmap_desc.pixelFormat.alphaMode == D2D1_ALPHA_MODE_UNKNOWN)
730 bitmap_desc.pixelFormat.alphaMode = d2d_format->alphaMode;
731
732 switch (bitmap_desc.pixelFormat.format)
733 {
736 bpp = 4;
737 break;
738
739 default:
740 FIXME("Unhandled format %#x.\n", bitmap_desc.pixelFormat.format);
742 }
743
744 pitch = ((bpp * size.width) + 15) & ~15;
745 if (pitch / bpp < size.width)
746 return E_OUTOFMEMORY;
747 if (!(data = calloc(size.height, pitch)))
748 return E_OUTOFMEMORY;
749 data_size = size.height * pitch;
750
751 rect.X = 0;
752 rect.Y = 0;
753 rect.Width = size.width;
754 rect.Height = size.height;
755 if (FAILED(hr = IWICBitmapSource_CopyPixels(bitmap_source, &rect, pitch, data_size, data)))
756 {
757 WARN("Failed to copy bitmap pixels, hr %#lx.\n", hr);
758 free(data);
759 return hr;
760 }
761
762 hr = d2d_bitmap_create(context, size, data, pitch, &bitmap_desc, bitmap);
763
764 free(data);
765
766 return hr;
767}
#define ARRAY_SIZE(A)
Definition: main.h:20
RECT rect
Definition: combotst.c:67
#define free
Definition: debug_ros.c:5
HRESULT d2d_bitmap_create(struct d2d_device_context *context, D2D1_SIZE_U size, const void *src_data, UINT32 pitch, const D2D1_BITMAP_PROPERTIES1 *desc, struct d2d_bitmap **bitmap)
Definition: bitmap.c:423
const WICPixelFormatGUID * wic_format
Definition: image.c:47
@ DXGI_FORMAT_B8G8R8A8_UNORM
Definition: dxgiformat.idl:110
@ DXGI_FORMAT_UNKNOWN
Definition: dxgiformat.idl:23
@ DXGI_FORMAT_R8G8B8A8_UNORM
Definition: dxgiformat.idl:51
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
D2D1_PIXEL_FORMAT pixelFormat
Definition: d2d1_1.idl:266
ID2D1ColorContext * colorContext
Definition: d2d1_1.idl:270
D2D1_BITMAP_OPTIONS bitmapOptions
Definition: d2d1_1.idl:269
D2D1_ALPHA_MODE alphaMode
Definition: dcommon.idl:71
DXGI_FORMAT format
Definition: dcommon.idl:70
uint32_t UINT32
Definition: typedefs.h:59
ULONG bpp[]
Definition: xlate.c:19

Referenced by d2d_device_context_CreateBitmapFromWicBitmap(), and d2d_device_context_ID2D1DeviceContext_CreateBitmapFromWicBitmap().

◆ d2d_bitmap_create_shared()

HRESULT d2d_bitmap_create_shared ( struct d2d_device_context *  context,
REFIID  iid,
void *  data,
const D2D1_BITMAP_PROPERTIES1 *  desc,
struct d2d_bitmap **  bitmap 
)

Definition at line 522 of file bitmap.c.

524{
526
527 if (IsEqualGUID(iid, &IID_ID2D1Bitmap))
528 {
529 struct d2d_bitmap *src_impl = unsafe_impl_from_ID2D1Bitmap(data);
530 ID3D11Device *device;
531 HRESULT hr = S_OK;
532
533 if (src_impl->factory != context->factory)
534 {
536 goto failed;
537 }
538
539 ID3D11Resource_GetDevice(src_impl->resource, &device);
540 ID3D11Device_Release(device);
541 if (device != (ID3D11Device *)context->d3d_device)
542 {
544 goto failed;
545 }
546
547 if (desc)
548 {
549 d = *desc;
550 if (d.pixelFormat.format == DXGI_FORMAT_UNKNOWN)
551 d.pixelFormat.format = src_impl->format.format;
552 if (d.pixelFormat.alphaMode == D2D1_ALPHA_MODE_UNKNOWN)
553 d.pixelFormat.alphaMode = src_impl->format.alphaMode;
554 }
555 else
556 {
557 d.pixelFormat = src_impl->format;
558 d.dpiX = src_impl->dpi_x;
559 d.dpiY = src_impl->dpi_y;
560 d.bitmapOptions = src_impl->options;
561 d.colorContext = NULL;
562 }
563 desc = &d;
564
565 if (!format_supported(&desc->pixelFormat))
566 {
567 WARN("Tried to create bitmap with unsupported format {%#x / %#x}.\n",
568 desc->pixelFormat.format, desc->pixelFormat.alphaMode);
570 goto failed;
571 }
572
573 if (!(*bitmap = calloc(1, sizeof(**bitmap))))
574 {
576 goto failed;
577 }
578
579 d2d_bitmap_init(*bitmap, context, src_impl->resource, src_impl->pixel_size, desc);
580 TRACE("Created bitmap %p.\n", *bitmap);
581
582 failed:
583 return hr;
584 }
585
586 if (IsEqualGUID(iid, &IID_IDXGISurface) || IsEqualGUID(iid, &IID_IDXGISurface1))
587 {
588 DXGI_SURFACE_DESC surface_desc;
590 ID3D11Resource *resource;
592 ID3D11Device *device;
593 HRESULT hr;
594
595 if (FAILED(IDXGISurface_QueryInterface(surface, &IID_ID3D11Resource, (void **)&resource)))
596 {
597 WARN("Failed to get d3d resource from dxgi surface.\n");
598 return E_FAIL;
599 }
600
601 ID3D11Resource_GetDevice(resource, &device);
602 ID3D11Device_Release(device);
603 if (device != (ID3D11Device *)context->d3d_device)
604 {
605 ID3D11Resource_Release(resource);
607 }
608
609 if (!(*bitmap = calloc(1, sizeof(**bitmap))))
610 {
611 ID3D11Resource_Release(resource);
612 return E_OUTOFMEMORY;
613 }
614
615
616 if (FAILED(hr = IDXGISurface_GetDesc(surface, &surface_desc)))
617 {
618 WARN("Failed to get surface desc, hr %#lx.\n", hr);
619 ID3D11Resource_Release(resource);
620 return hr;
621 }
622
623 if (!desc)
624 {
625 memset(&d, 0, sizeof(d));
626 d.pixelFormat.format = surface_desc.Format;
628 }
629 else
630 {
631 d = *desc;
632 if (d.pixelFormat.format == DXGI_FORMAT_UNKNOWN)
633 d.pixelFormat.format = surface_desc.Format;
634 }
635
636 if (d.dpiX == 0.0f || d.dpiY == 0.0f)
637 {
638 if (d.dpiX == 0.0f)
639 d.dpiX = context->desc.dpiX;
640 if (d.dpiY == 0.0f)
641 d.dpiY = context->desc.dpiY;
642 }
643
644 pixel_size.width = surface_desc.Width;
645 pixel_size.height = surface_desc.Height;
646
648 ID3D11Resource_Release(resource);
649 TRACE("Created bitmap %p.\n", *bitmap);
650
651 return S_OK;
652 }
653
654 WARN("Unhandled interface %s.\n", debugstr_guid(iid));
655
656 return E_INVALIDARG;
657}
#define E_FAIL
Definition: ddrawi.h:102
unsigned int d2d_get_bitmap_options_for_surface(IDXGISurface *surface)
Definition: bitmap.c:498
#define d
Definition: ke_i.h:81
#define resource
Definition: kernel32.h:9
#define memset(x, y, z)
Definition: compat.h:39
UINT32 height
Definition: dcommon.idl:116
UINT32 width
Definition: dcommon.idl:115
DXGI_FORMAT Format
Definition: dxgi.idl:80
D2D1_BITMAP_OPTIONS options
Definition: d2d1_private.h:438
D2D1_SIZE_U pixel_size
Definition: d2d1_private.h:434
IDXGISurface * surface
Definition: d2d1_private.h:431
D2D1_PIXEL_FORMAT format
Definition: d2d1_private.h:435
ID2D1Factory * factory
Definition: d2d1_private.h:428
#define D2DERR_WRONG_FACTORY
Definition: winerror.h:7369
#define D2DERR_UNSUPPORTED_OPERATION
Definition: winerror.h:7354

Referenced by d2d_device_context_CreateBitmapFromDxgiSurface(), and d2d_device_context_CreateSharedBitmap().

◆ d2d_bitmap_GetColorContext()

static void STDMETHODCALLTYPE d2d_bitmap_GetColorContext ( ID2D1Bitmap1 *  iface,
ID2D1ColorContext **  context 
)
static

Definition at line 221 of file bitmap.c.

222{
223 FIXME("iface %p, context %p stub!\n", iface, context);
224}

◆ d2d_bitmap_GetDpi()

static void STDMETHODCALLTYPE d2d_bitmap_GetDpi ( ID2D1Bitmap1 *  iface,
float *  dpi_x,
float *  dpi_y 
)
static

Definition at line 142 of file bitmap.c.

143{
145
146 TRACE("iface %p, dpi_x %p, dpi_y %p.\n", iface, dpi_x, dpi_y);
147
148 *dpi_x = bitmap->dpi_x;
149 *dpi_y = bitmap->dpi_y;
150}

◆ d2d_bitmap_GetFactory()

static void STDMETHODCALLTYPE d2d_bitmap_GetFactory ( ID2D1Bitmap1 *  iface,
ID2D1Factory **  factory 
)
static

Definition at line 102 of file bitmap.c.

103{
105
106 TRACE("iface %p, factory %p.\n", iface, factory);
107
108 ID2D1Factory_AddRef(*factory = bitmap->factory);
109}
Definition: main.c:439

◆ d2d_bitmap_GetOptions()

static D2D1_BITMAP_OPTIONS STDMETHODCALLTYPE d2d_bitmap_GetOptions ( ID2D1Bitmap1 *  iface)
static

Definition at line 226 of file bitmap.c.

227{
229
230 TRACE("iface %p.\n", iface);
231
232 return bitmap->options;
233}

◆ d2d_bitmap_GetPixelFormat()

static D2D1_PIXEL_FORMAT *STDMETHODCALLTYPE d2d_bitmap_GetPixelFormat ( ID2D1Bitmap1 *  iface,
D2D1_PIXEL_FORMAT *  format 
)
static

Definition at line 132 of file bitmap.c.

133{
135
136 TRACE("iface %p, format %p.\n", iface, format);
137
138 *format = bitmap->format;
139 return format;
140}

◆ d2d_bitmap_GetPixelSize()

static D2D1_SIZE_U *STDMETHODCALLTYPE d2d_bitmap_GetPixelSize ( ID2D1Bitmap1 *  iface,
D2D1_SIZE_U *  pixel_size 
)
static

Definition at line 122 of file bitmap.c.

123{
125
126 TRACE("iface %p, pixel_size %p.\n", iface, pixel_size);
127
128 *pixel_size = bitmap->pixel_size;
129 return pixel_size;
130}

◆ d2d_bitmap_GetSize()

static D2D1_SIZE_F *STDMETHODCALLTYPE d2d_bitmap_GetSize ( ID2D1Bitmap1 *  iface,
D2D1_SIZE_F *  size 
)
static

Definition at line 111 of file bitmap.c.

112{
114
115 TRACE("iface %p, size %p.\n", iface, size);
116
117 size->width = bitmap->pixel_size.width / (bitmap->dpi_x / 96.0f);
118 size->height = bitmap->pixel_size.height / (bitmap->dpi_y / 96.0f);
119 return size;
120}
uint32 width
Definition: uimain.c:91
uint32 height
Definition: uimain.c:92

◆ d2d_bitmap_GetSurface()

static HRESULT STDMETHODCALLTYPE d2d_bitmap_GetSurface ( ID2D1Bitmap1 *  iface,
IDXGISurface **  surface 
)
static

Definition at line 235 of file bitmap.c.

236{
238
239 TRACE("iface %p, surface %p.\n", iface, surface);
240
241 *surface = bitmap->surface;
242 if (*surface)
243 IDXGISurface_AddRef(*surface);
244
245 return *surface ? S_OK : D2DERR_INVALID_CALL;
246}
#define D2DERR_INVALID_CALL
Definition: winerror.h:7361

◆ d2d_bitmap_init()

static void d2d_bitmap_init ( struct d2d_bitmap *  bitmap,
struct d2d_device_context *  context,
ID3D11Resource *  resource,
D2D1_SIZE_U  size,
const D2D1_BITMAP_PROPERTIES1 *  desc 
)
static

Definition at line 366 of file bitmap.c.

368{
369 ID3D11Device *d3d_device;
370 HRESULT hr;
371
372 bitmap->ID2D1Bitmap1_iface.lpVtbl = &d2d_bitmap_vtbl;
373 bitmap->refcount = 1;
374 ID2D1Factory_AddRef(bitmap->factory = context->factory);
375 ID3D11Resource_AddRef(bitmap->resource = resource);
376 bitmap->pixel_size = size;
377 bitmap->format = desc->pixelFormat;
378 bitmap->dpi_x = desc->dpiX;
379 bitmap->dpi_y = desc->dpiY;
380 bitmap->options = desc->bitmapOptions;
381
383 ID3D11Resource_QueryInterface(resource, &IID_IDXGISurface, (void **)&bitmap->surface);
384
385 ID3D11Resource_GetDevice(resource, &d3d_device);
386 if (bitmap->options & D2D1_BITMAP_OPTIONS_TARGET)
387 {
388 if (FAILED(hr = ID3D11Device_CreateRenderTargetView(d3d_device, resource, NULL, &bitmap->rtv)))
389 WARN("Failed to create RTV, hr %#lx.\n", hr);
390 }
391
392 if (!(bitmap->options & D2D1_BITMAP_OPTIONS_CANNOT_DRAW))
393 {
394 if (FAILED(hr = ID3D11Device_CreateShaderResourceView(d3d_device, resource, NULL, &bitmap->srv)))
395 WARN("Failed to create SRV, hr %#lx.\n", hr);
396 }
397 ID3D11Device_Release(d3d_device);
398
399 if (bitmap->dpi_x == 0.0f && bitmap->dpi_y == 0.0f)
400 {
401 bitmap->dpi_x = 96.0f;
402 bitmap->dpi_y = 96.0f;
403 }
404}
static BOOL d2d_device_context_is_dxgi_target(const struct d2d_device_context *context)
Definition: d2d1_private.h:230
static const struct ID2D1Bitmap1Vtbl d2d_bitmap_vtbl
Definition: bitmap.c:311

Referenced by d2d_bitmap_create(), and d2d_bitmap_create_shared().

◆ d2d_bitmap_Map()

static HRESULT STDMETHODCALLTYPE d2d_bitmap_Map ( ID2D1Bitmap1 *  iface,
D2D1_MAP_OPTIONS  options,
D2D1_MAPPED_RECT *  mapped_rect 
)
static

Definition at line 248 of file bitmap.c.

250{
253 ID3D11DeviceContext *context;
254 ID3D11Device *device;
256 HRESULT hr;
257
258 TRACE("iface %p, options %#x, mapped_rect %p.\n", iface, options, mapped_rect);
259
260 if (!(bitmap->options & D2D1_BITMAP_OPTIONS_CPU_READ))
261 return E_INVALIDARG;
262
263 if (bitmap->mapped_resource.pData)
264 return D2DERR_WRONG_STATE;
265
274 else
275 {
276 WARN("Invalid mapping options %#x.\n", options);
277 return E_INVALIDARG;
278 }
279
280 ID3D11Resource_GetDevice(bitmap->resource, &device);
281 ID3D11Device_GetImmediateContext(device, &context);
282 if (SUCCEEDED(hr = ID3D11DeviceContext_Map(context, bitmap->resource, 0, map_type,
283 0, &mapped_resource)))
284 {
285 bitmap->mapped_resource = mapped_resource;
286 }
287 ID3D11DeviceContext_Release(context);
288 ID3D11Device_Release(device);
289
290 if (FAILED(hr))
291 {
292 WARN("Failed to map resource, hr %#lx.\n", hr);
293 return E_INVALIDARG;
294 }
295
296 mapped_rect->pitch = bitmap->mapped_resource.RowPitch;
297 mapped_rect->bits = bitmap->mapped_resource.pData;
298
299 return S_OK;
300}
@ D2D1_MAP_OPTIONS_READ
Definition: d2d1_1.idl:99
@ D2D1_MAP_OPTIONS_DISCARD
Definition: d2d1_1.idl:101
@ D2D1_MAP_OPTIONS_WRITE
Definition: d2d1_1.idl:100
D3D11_MAP
Definition: d3d11.idl:971
@ D3D11_MAP_READ
Definition: d3d11.idl:972
@ D3D11_MAP_WRITE
Definition: d3d11.idl:973
@ D3D11_MAP_WRITE_DISCARD
Definition: d3d11.idl:975
@ D3D11_MAP_READ_WRITE
Definition: d3d11.idl:974
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static VARTYPE map_type(struct string_t *str)
D3D11_MAPPED_SUBRESOURCE mapped_resource
Definition: d2d1_private.h:433
#define D2DERR_WRONG_STATE
Definition: winerror.h:7352

◆ d2d_bitmap_QueryInterface()

static HRESULT STDMETHODCALLTYPE d2d_bitmap_QueryInterface ( ID2D1Bitmap1 *  iface,
REFIID  iid,
void **  out 
)
static

Definition at line 48 of file bitmap.c.

49{
50 TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
51
52 if (IsEqualGUID(iid, &IID_ID2D1Bitmap1)
53 || IsEqualGUID(iid, &IID_ID2D1Bitmap)
54 || IsEqualGUID(iid, &IID_ID2D1Image)
55 || IsEqualGUID(iid, &IID_ID2D1Resource)
56 || IsEqualGUID(iid, &IID_IUnknown))
57 {
58 ID2D1Bitmap1_AddRef(iface);
59 *out = iface;
60 return S_OK;
61 }
62
63 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
64
65 *out = NULL;
66 return E_NOINTERFACE;
67}
const GUID IID_IUnknown
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ d2d_bitmap_Release()

static ULONG STDMETHODCALLTYPE d2d_bitmap_Release ( ID2D1Bitmap1 *  iface)
static

Definition at line 79 of file bitmap.c.

80{
83
84 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
85
86 if (!refcount)
87 {
88 if (bitmap->srv)
89 ID3D11ShaderResourceView_Release(bitmap->srv);
90 if (bitmap->rtv)
91 ID3D11RenderTargetView_Release(bitmap->rtv);
92 if (bitmap->surface)
93 IDXGISurface_Release(bitmap->surface);
94 ID3D11Resource_Release(bitmap->resource);
95 ID2D1Factory_Release(bitmap->factory);
96 free(bitmap);
97 }
98
99 return refcount;
100}
#define InterlockedDecrement
Definition: armddk.h:52

◆ d2d_bitmap_Unmap()

static HRESULT STDMETHODCALLTYPE d2d_bitmap_Unmap ( ID2D1Bitmap1 *  iface)
static

Definition at line 302 of file bitmap.c.

303{
305
306 TRACE("iface %p.\n", iface);
307
308 return d2d_bitmap_unmap(bitmap);
309}
static HRESULT d2d_bitmap_unmap(struct d2d_bitmap *bitmap)
Definition: bitmap.c:29

◆ d2d_bitmap_unmap()

static HRESULT d2d_bitmap_unmap ( struct d2d_bitmap *  bitmap)
static

Definition at line 29 of file bitmap.c.

30{
31 ID3D11DeviceContext *context;
32 ID3D11Device *device;
33
34 if (!bitmap->mapped_resource.pData)
35 return D2DERR_WRONG_STATE;
36
37 ID3D11Resource_GetDevice(bitmap->resource, &device);
38 ID3D11Device_GetImmediateContext(device, &context);
39 ID3D11DeviceContext_Unmap(context, bitmap->resource, 0);
40 ID3D11DeviceContext_Release(context);
41 ID3D11Device_Release(device);
42
43 memset(&bitmap->mapped_resource, 0, sizeof(bitmap->mapped_resource));
44
45 return S_OK;
46}

Referenced by d2d_bitmap_Unmap().

◆ d2d_get_bitmap_options_for_surface()

unsigned int d2d_get_bitmap_options_for_surface ( IDXGISurface *  surface)

Definition at line 498 of file bitmap.c.

499{
500 D3D11_TEXTURE2D_DESC desc;
501 unsigned int options = 0;
502 ID3D11Texture2D *texture;
503
504 if (FAILED(IDXGISurface_QueryInterface(surface, &IID_ID3D11Texture2D, (void **)&texture)))
505 return 0;
506
507 ID3D11Texture2D_GetDesc(texture, &desc);
508 ID3D11Texture2D_Release(texture);
509
510 if (desc.BindFlags & D3D11_BIND_RENDER_TARGET)
512 if (!(desc.BindFlags & D3D11_BIND_SHADER_RESOURCE))
516 if (desc.Usage == D3D11_USAGE_STAGING && desc.CPUAccessFlags & D3D11_CPU_ACCESS_READ)
518
519 return options;
520}

Referenced by d2d_bitmap_create_shared(), d2d_device_context_CreateBitmapFromDxgiSurface(), and d2d_device_context_CreateSharedBitmap().

◆ format_supported()

static BOOL format_supported ( const D2D1_PIXEL_FORMAT *  format)
static

Definition at line 331 of file bitmap.c.

332{
333 unsigned int i;
334
335 static const D2D1_PIXEL_FORMAT supported_formats[] =
336 {
337 {DXGI_FORMAT_R32G32B32A32_FLOAT, D2D1_ALPHA_MODE_PREMULTIPLIED},
338 {DXGI_FORMAT_R32G32B32A32_FLOAT, D2D1_ALPHA_MODE_IGNORE },
339 {DXGI_FORMAT_R16G16B16A16_FLOAT, D2D1_ALPHA_MODE_PREMULTIPLIED},
340 {DXGI_FORMAT_R16G16B16A16_FLOAT, D2D1_ALPHA_MODE_IGNORE },
341 {DXGI_FORMAT_R16G16B16A16_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED},
342 {DXGI_FORMAT_R16G16B16A16_UNORM, D2D1_ALPHA_MODE_IGNORE },
343 {DXGI_FORMAT_R8G8B8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED},
344 {DXGI_FORMAT_R8G8B8A8_UNORM, D2D1_ALPHA_MODE_IGNORE },
345 {DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, D2D1_ALPHA_MODE_PREMULTIPLIED},
346 {DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, D2D1_ALPHA_MODE_IGNORE },
347 {DXGI_FORMAT_A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED},
348 {DXGI_FORMAT_A8_UNORM, D2D1_ALPHA_MODE_STRAIGHT },
349 {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED},
350 {DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE },
351 {DXGI_FORMAT_B8G8R8X8_UNORM, D2D1_ALPHA_MODE_IGNORE },
352 {DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, D2D1_ALPHA_MODE_PREMULTIPLIED},
353 {DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, D2D1_ALPHA_MODE_IGNORE },
354 };
355
356 for (i = 0; i < ARRAY_SIZE(supported_formats); ++i)
357 {
358 if (supported_formats[i].format == format->format
359 && supported_formats[i].alphaMode == format->alphaMode)
360 return TRUE;
361 }
362
363 return FALSE;
364}
static const struct pixelformatinfo supported_formats[]
Definition: converter.c:1618
@ DXGI_FORMAT_R16G16B16A16_UNORM
Definition: dxgiformat.idl:34
@ DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
Definition: dxgiformat.idl:114
@ DXGI_FORMAT_A8_UNORM
Definition: dxgiformat.idl:88
@ DXGI_FORMAT_R16G16B16A16_FLOAT
Definition: dxgiformat.idl:33
@ DXGI_FORMAT_R32G32B32A32_FLOAT
Definition: dxgiformat.idl:25
@ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
Definition: dxgiformat.idl:52
@ DXGI_FORMAT_B8G8R8X8_UNORM
Definition: dxgiformat.idl:111

Referenced by d2d_bitmap_create(), and d2d_bitmap_create_shared().

◆ impl_from_ID2D1Bitmap1()

◆ unsafe_impl_from_ID2D1Bitmap()

struct d2d_bitmap * unsafe_impl_from_ID2D1Bitmap ( ID2D1Bitmap *  iface)

Definition at line 769 of file bitmap.c.

770{
771 if (!iface)
772 return NULL;
773 assert(iface->lpVtbl == (ID2D1BitmapVtbl *)&d2d_bitmap_vtbl);
774 return CONTAINING_RECORD(iface, struct d2d_bitmap, ID2D1Bitmap1_iface);
775}
#define assert(_expr)
Definition: assert.h:32

Referenced by d2d_bitmap_brush_create(), d2d_bitmap_brush_SetBitmap(), d2d_bitmap_CopyFromBitmap(), d2d_bitmap_create_shared(), d2d_brush_bind_image(), d2d_brush_fill_cb(), d2d_dc_render_target_BindDC(), and d2d_device_context_SetTarget().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( d2d  )

Variable Documentation

◆ d2d_bitmap_vtbl

const struct ID2D1Bitmap1Vtbl d2d_bitmap_vtbl
static
Initial value:
=
{
}
static HRESULT STDMETHODCALLTYPE d2d_bitmap_GetSurface(ID2D1Bitmap1 *iface, IDXGISurface **surface)
Definition: bitmap.c:235
static D2D1_SIZE_F *STDMETHODCALLTYPE d2d_bitmap_GetSize(ID2D1Bitmap1 *iface, D2D1_SIZE_F *size)
Definition: bitmap.c:111
static HRESULT STDMETHODCALLTYPE d2d_bitmap_Unmap(ID2D1Bitmap1 *iface)
Definition: bitmap.c:302
static void STDMETHODCALLTYPE d2d_bitmap_GetColorContext(ID2D1Bitmap1 *iface, ID2D1ColorContext **context)
Definition: bitmap.c:221
static D2D1_PIXEL_FORMAT *STDMETHODCALLTYPE d2d_bitmap_GetPixelFormat(ID2D1Bitmap1 *iface, D2D1_PIXEL_FORMAT *format)
Definition: bitmap.c:132
static ULONG STDMETHODCALLTYPE d2d_bitmap_Release(ID2D1Bitmap1 *iface)
Definition: bitmap.c:79
static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromMemory(ID2D1Bitmap1 *iface, const D2D1_RECT_U *dst_rect, const void *src_data, UINT32 pitch)
Definition: bitmap.c:192
static void STDMETHODCALLTYPE d2d_bitmap_GetDpi(ID2D1Bitmap1 *iface, float *dpi_x, float *dpi_y)
Definition: bitmap.c:142
static HRESULT STDMETHODCALLTYPE d2d_bitmap_Map(ID2D1Bitmap1 *iface, D2D1_MAP_OPTIONS options, D2D1_MAPPED_RECT *mapped_rect)
Definition: bitmap.c:248
static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromRenderTarget(ID2D1Bitmap1 *iface, const D2D1_POINT_2U *dst_point, ID2D1RenderTarget *render_target, const D2D1_RECT_U *src_rect)
Definition: bitmap.c:184
static D2D1_SIZE_U *STDMETHODCALLTYPE d2d_bitmap_GetPixelSize(ID2D1Bitmap1 *iface, D2D1_SIZE_U *pixel_size)
Definition: bitmap.c:122
static HRESULT STDMETHODCALLTYPE d2d_bitmap_CopyFromBitmap(ID2D1Bitmap1 *iface, const D2D1_POINT_2U *dst_point, ID2D1Bitmap *bitmap, const D2D1_RECT_U *src_rect)
Definition: bitmap.c:152
static ULONG STDMETHODCALLTYPE d2d_bitmap_AddRef(ID2D1Bitmap1 *iface)
Definition: bitmap.c:69
static D2D1_BITMAP_OPTIONS STDMETHODCALLTYPE d2d_bitmap_GetOptions(ID2D1Bitmap1 *iface)
Definition: bitmap.c:226
static void STDMETHODCALLTYPE d2d_bitmap_GetFactory(ID2D1Bitmap1 *iface, ID2D1Factory **factory)
Definition: bitmap.c:102
static HRESULT STDMETHODCALLTYPE d2d_bitmap_QueryInterface(ID2D1Bitmap1 *iface, REFIID iid, void **out)
Definition: bitmap.c:48

Definition at line 311 of file bitmap.c.

Referenced by d2d_bitmap_init(), and unsafe_impl_from_ID2D1Bitmap().