ReactOS 0.4.17-dev-934-g091855f
d2d1_private.h File Reference
#include "wine/debug.h"
#include "wine/list.h"
#include <assert.h>
#include <limits.h>
#include <stdint.h>
#include <stdbool.h>
#include <math.h>
#include "d2d1_3.h"
#include "d2d1effectauthor.h"
#include "d3d11_1.h"
#include "dwrite_2.h"
Include dependency graph for d2d1_private.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  d2d_settings
 
struct  d2d_clip_stack
 
struct  d2d_error_state
 
struct  d2d_shape_resources
 
struct  d2d_brush_cb
 
struct  d2d_ps_cb
 
struct  d2d_vec4
 
struct  d2d_vs_cb
 
struct  d2d_device_context_ops
 
struct  d2d_indexed_objects
 
struct  d2d_device_context
 
struct  d2d_wic_render_target
 
struct  d2d_dc_render_target
 
struct  d2d_hwnd_render_target
 
struct  d2d_bitmap_render_target
 
struct  d2d_gradient
 
struct  d2d_brush
 
struct  d2d_stroke_style
 
struct  d2d_layer
 
struct  d2d_mesh
 
struct  d2d_bitmap
 
struct  d2d_state_block
 
struct  d2d_curve_vertex
 
struct  d2d_face
 
struct  d2d_outline_vertex
 
struct  d2d_curve_outline_vertex
 
struct  d2d_geometry
 
struct  d2d_device
 
struct  d2d_effect_context
 
struct  d2d_effect_property
 
struct  d2d_effect_properties
 
struct  d2d_effect_registration
 
struct  d2d_factory
 
struct  d2d_transform
 
struct  d2d_render_info
 
struct  d2d_transform_node
 
struct  d2d_transform_node_connection
 
struct  d2d_transform_graph
 
struct  d2d_effect
 
struct  d2d_vertex_buffer
 
struct  d2d_command_list
 

Macros

#define COBJMACROS
 

Enumerations

enum  d2d_brush_type {
  D2D_BRUSH_TYPE_SOLID , D2D_BRUSH_TYPE_LINEAR , D2D_BRUSH_TYPE_RADIAL , D2D_BRUSH_TYPE_BITMAP ,
  D2D_BRUSH_TYPE_IMAGE , D2D_BRUSH_TYPE_COUNT
}
 
enum  d2d_shape_type {
  D2D_SHAPE_TYPE_OUTLINE , D2D_SHAPE_TYPE_BEZIER_OUTLINE , D2D_SHAPE_TYPE_ARC_OUTLINE , D2D_SHAPE_TYPE_TRIANGLE ,
  D2D_SHAPE_TYPE_CURVE , D2D_SHAPE_TYPE_COUNT
}
 
enum  d2d_device_context_sampler_limits { D2D_SAMPLER_INTERPOLATION_MODE_COUNT = 2 , D2D_SAMPLER_EXTEND_MODE_COUNT = 3 }
 
enum  d2d_device_context_target_type { D2D_TARGET_UNKNOWN = 0 , D2D_TARGET_BITMAP , D2D_TARGET_COMMAND_LIST }
 
enum  d2d_geometry_state {
  D2D_GEOMETRY_STATE_INITIAL = 0 , D2D_GEOMETRY_STATE_ERROR , D2D_GEOMETRY_STATE_OPEN , D2D_GEOMETRY_STATE_CLOSED ,
  D2D_GEOMETRY_STATE_FIGURE
}
 
enum  d2d_render_info_mask { D2D_RENDER_INFO_PIXEL_SHADER = 0x1 }
 
enum  d2d_command_list_state { D2D_COMMAND_LIST_STATE_INITIAL = 0 , D2D_COMMAND_LIST_STATE_ERROR , D2D_COMMAND_LIST_STATE_OPEN , D2D_COMMAND_LIST_STATE_CLOSED }
 

Functions

HRESULT d2d_d3d_create_render_target (struct d2d_device *device, IDXGISurface *surface, IUnknown *outer_unknown, const struct d2d_device_context_ops *ops, const D2D1_RENDER_TARGET_PROPERTIES *desc, void **render_target)
 
static BOOL d2d_device_context_is_dxgi_target (const struct d2d_device_context *context)
 
HRESULT d2d_wic_render_target_init (struct d2d_wic_render_target *render_target, ID2D1Factory1 *factory, ID3D10Device1 *d3d_device, IWICBitmap *bitmap, const D2D1_RENDER_TARGET_PROPERTIES *desc)
 
HRESULT d2d_dc_render_target_init (struct d2d_dc_render_target *render_target, ID2D1Factory1 *factory, ID3D10Device1 *d3d_device, const D2D1_RENDER_TARGET_PROPERTIES *desc)
 
HRESULT d2d_hwnd_render_target_init (struct d2d_hwnd_render_target *render_target, ID2D1Factory1 *factory, ID3D10Device1 *d3d_device, const D2D1_RENDER_TARGET_PROPERTIES *desc, const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_desc)
 
HRESULT d2d_bitmap_render_target_init (struct d2d_bitmap_render_target *render_target, const struct d2d_device_context *parent_target, const D2D1_SIZE_F *size, const D2D1_SIZE_U *pixel_size, const D2D1_PIXEL_FORMAT *format, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options)
 
HRESULT d2d_gradient_create (ID2D1Factory *factory, ID3D11Device1 *device, const D2D1_GRADIENT_STOP *stops, UINT32 stop_count, D2D1_GAMMA gamma, D2D1_EXTEND_MODE extend_mode, struct d2d_gradient **gradient)
 
HRESULT d2d_solid_color_brush_create (ID2D1Factory *factory, const D2D1_COLOR_F *color, const D2D1_BRUSH_PROPERTIES *desc, struct d2d_brush **brush)
 
HRESULT d2d_linear_gradient_brush_create (ID2D1Factory *factory, const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_desc, const D2D1_BRUSH_PROPERTIES *brush_desc, ID2D1GradientStopCollection *gradient, struct d2d_brush **brush)
 
HRESULT d2d_radial_gradient_brush_create (ID2D1Factory *factory, const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_desc, const D2D1_BRUSH_PROPERTIES *brush_desc, ID2D1GradientStopCollection *gradient, struct d2d_brush **brush)
 
HRESULT d2d_bitmap_brush_create (ID2D1Factory *factory, ID2D1Bitmap *bitmap, const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc, const D2D1_BRUSH_PROPERTIES *brush_desc, struct d2d_brush **brush)
 
HRESULT d2d_image_brush_create (ID2D1Factory *factory, ID2D1Image *image, const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc, const D2D1_BRUSH_PROPERTIES *brush_desc, struct d2d_brush **brush)
 
void d2d_brush_bind_resources (struct d2d_brush *brush, struct d2d_device_context *context, unsigned int brush_idx)
 
BOOL d2d_brush_fill_cb (const struct d2d_brush *brush, struct d2d_brush_cb *cb)
 
struct d2d_brush * unsafe_impl_from_ID2D1Brush (ID2D1Brush *iface)
 
HRESULT d2d_stroke_style_init (struct d2d_stroke_style *style, ID2D1Factory *factory, const D2D1_STROKE_STYLE_PROPERTIES1 *desc, const float *dashes, UINT32 dash_count)
 
struct d2d_stroke_style * unsafe_impl_from_ID2D1StrokeStyle (ID2D1StrokeStyle *iface)
 
HRESULT d2d_layer_create (ID2D1Factory *factory, const D2D1_SIZE_F *size, struct d2d_layer **layer)
 
HRESULT d2d_mesh_create (ID2D1Factory *factory, struct d2d_mesh **mesh)
 
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)
 
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)
 
unsigned int d2d_get_bitmap_options_for_surface (IDXGISurface *surface)
 
struct d2d_bitmap * unsafe_impl_from_ID2D1Bitmap (ID2D1Bitmap *iface)
 
void d2d_state_block_init (struct d2d_state_block *state_block, ID2D1Factory *factory, const D2D1_DRAWING_STATE_DESCRIPTION1 *desc, IDWriteRenderingParams *text_rendering_params)
 
struct d2d_state_block * unsafe_impl_from_ID2D1DrawingStateBlock (ID2D1DrawingStateBlock *iface)
 
HRESULT d2d_ellipse_geometry_init (struct d2d_geometry *geometry, ID2D1Factory *factory, const D2D1_ELLIPSE *ellipse)
 
void d2d_path_geometry_init (struct d2d_geometry *geometry, ID2D1Factory *factory)
 
HRESULT d2d_rectangle_geometry_init (struct d2d_geometry *geometry, ID2D1Factory *factory, const D2D1_RECT_F *rect)
 
HRESULT d2d_rounded_rectangle_geometry_init (struct d2d_geometry *geometry, ID2D1Factory *factory, const D2D1_ROUNDED_RECT *rounded_rect)
 
void d2d_transformed_geometry_init (struct d2d_geometry *geometry, ID2D1Factory *factory, ID2D1Geometry *src_geometry, const D2D_MATRIX_3X2_F *transform)
 
HRESULT d2d_geometry_group_init (struct d2d_geometry *geometry, ID2D1Factory *factory, D2D1_FILL_MODE fill_mode, ID2D1Geometry **src_geometries, unsigned int geometry_count)
 
struct d2d_geometry * unsafe_impl_from_ID2D1Geometry (ID2D1Geometry *iface)
 
struct d2d_device * unsafe_impl_from_ID2D1Device (ID2D1Device1 *iface)
 
HRESULT d2d_device_add_indexed_object (struct d2d_indexed_objects *objects, const GUID *id, IUnknown *object)
 
BOOL d2d_device_get_indexed_object (struct d2d_indexed_objects *objects, const GUID *id, IUnknown **object)
 
void d2d_device_indexed_objects_clear (struct d2d_indexed_objects *objects)
 
void d2d_effect_context_init (struct d2d_effect_context *effect_context, struct d2d_device_context *device_context)
 
static struct d2d_factory * unsafe_impl_from_ID2D1Factory (ID2D1Factory *iface)
 
void d2d_effects_init_builtins (struct d2d_factory *factory)
 
HRESULT d2d_factory_create_device (ID2D1Factory1 *factory, IDXGIDevice *dxgi_device, bool allow_get_dxgi_device, REFIID iid, void **device)
 
struct d2d_effect_registration * d2d_factory_get_registered_effect (ID2D1Factory *factory, const GUID *effect_id)
 
void d2d_factory_register_effect (struct d2d_factory *factory, struct d2d_effect_registration *effect)
 
HRESULT d2d_effect_property_get_uint32_value (const struct d2d_effect_properties *properties, const struct d2d_effect_property *prop, UINT32 *value)
 
void d2d_device_init (struct d2d_device *device, ID2D1Factory1 *factory, IDXGIDevice *dxgi_device, bool allow_get_dxgi_device)
 
HRESULT d2d_effect_create (struct d2d_device_context *context, const CLSID *effect_id, ID2D1Effect **effect)
 
void d2d_effect_init_properties (struct d2d_effect *effect, struct d2d_effect_properties *properties)
 
HRESULT d2d_effect_properties_add (struct d2d_effect_properties *props, const WCHAR *name, UINT32 index, D2D1_PROPERTY_TYPE type, const WCHAR *value)
 
HRESULT d2d_effect_subproperties_add (struct d2d_effect_properties *props, const WCHAR *name, UINT32 index, D2D1_PROPERTY_TYPE type, const WCHAR *value)
 
struct d2d_effect_property * d2d_effect_properties_get_property_by_name (const struct d2d_effect_properties *properties, const WCHAR *name)
 
void d2d_effect_properties_cleanup (struct d2d_effect_properties *props)
 
HRESULT d2d_factory_register_builtin_effect (struct d2d_factory *factory, REFCLSID effect_id, const WCHAR *property_xml, const D2D1_PROPERTY_BINDING *bindings, UINT32 binding_count, PD2D1_EFFECT_FACTORY effect_factory)
 
HRESULT d2d_command_list_create (ID2D1Factory *factory, struct d2d_command_list **command_list)
 
struct d2d_command_list * unsafe_impl_from_ID2D1CommandList (ID2D1CommandList *iface)
 
void d2d_command_list_begin_draw (struct d2d_command_list *command_list, const struct d2d_device_context *context)
 
void d2d_command_list_set_antialias_mode (struct d2d_command_list *command_list, D2D1_ANTIALIAS_MODE mode)
 
void d2d_command_list_set_primitive_blend (struct d2d_command_list *command_list, D2D1_PRIMITIVE_BLEND primitive_blend)
 
void d2d_command_list_set_unit_mode (struct d2d_command_list *command_list, D2D1_UNIT_MODE mode)
 
void d2d_command_list_set_text_antialias_mode (struct d2d_command_list *command_list, D2D1_TEXT_ANTIALIAS_MODE mode)
 
void d2d_command_list_set_tags (struct d2d_command_list *command_list, D2D1_TAG tag1, D2D1_TAG tag2)
 
void d2d_command_list_set_transform (struct d2d_command_list *command_list, const D2D1_MATRIX_3X2_F *transform)
 
void d2d_command_list_push_clip (struct d2d_command_list *command_list, const D2D1_RECT_F *rect, D2D1_ANTIALIAS_MODE antialias_mode)
 
void d2d_command_list_pop_clip (struct d2d_command_list *command_list)
 
void d2d_command_list_clear (struct d2d_command_list *command_list, const D2D1_COLOR_F *color)
 
void d2d_command_list_draw_line (struct d2d_command_list *command_list, const struct d2d_device_context *context, D2D1_POINT_2F p0, D2D1_POINT_2F p1, ID2D1Brush *orig_brush, float stroke_width, ID2D1StrokeStyle *stroke_style)
 
void d2d_command_list_draw_geometry (struct d2d_command_list *command_list, const struct d2d_device_context *context, ID2D1Geometry *geometry, ID2D1Brush *orig_brush, float stroke_width, ID2D1StrokeStyle *stroke_style)
 
void d2d_command_list_draw_rectangle (struct d2d_command_list *command_list, const struct d2d_device_context *context, const D2D1_RECT_F *rect, ID2D1Brush *orig_brush, float stroke_width, ID2D1StrokeStyle *stroke_style)
 
void d2d_command_list_fill_geometry (struct d2d_command_list *command_list, const struct d2d_device_context *context, ID2D1Geometry *geometry, ID2D1Brush *orig_brush, ID2D1Brush *orig_opacity_brush)
 
void d2d_command_list_fill_rectangle (struct d2d_command_list *command_list, const struct d2d_device_context *context, const D2D1_RECT_F *rect, ID2D1Brush *orig_brush)
 
void d2d_command_list_set_text_rendering_params (struct d2d_command_list *command_list, IDWriteRenderingParams *params)
 
void d2d_command_list_draw_glyph_run (struct d2d_command_list *command_list, const struct d2d_device_context *context, D2D1_POINT_2F origin, const DWRITE_GLYPH_RUN *run, const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc, ID2D1Brush *orig_brush, DWRITE_MEASURING_MODE measuring_mode)
 
void d2d_command_list_draw_bitmap (struct d2d_command_list *command_list, ID2D1Bitmap *bitmap, const D2D1_RECT_F *dst_rect, float opacity, D2D1_INTERPOLATION_MODE interpolation_mode, const D2D1_RECT_F *src_rect, const D2D1_MATRIX_4X4_F *perspective_transform)
 
void d2d_command_list_draw_image (struct d2d_command_list *command_list, ID2D1Image *image, const D2D1_POINT_2F *target_offset, const D2D1_RECT_F *image_rect, D2D1_INTERPOLATION_MODE interpolation_mode, D2D1_COMPOSITE_MODE composite_mode)
 
void d2d_command_list_fill_mesh (struct d2d_command_list *command_list, const struct d2d_device_context *context, ID2D1Mesh *mesh, ID2D1Brush *orig_brush)
 
void d2d_command_list_fill_opacity_mask (struct d2d_command_list *command_list, const struct d2d_device_context *context, ID2D1Bitmap *bitmap, ID2D1Brush *orig_brush, const D2D1_RECT_F *dst_rect, const D2D1_RECT_F *src_rect)
 
void d2d_command_list_push_layer (struct d2d_command_list *command_list, const struct d2d_device_context *context, const D2D1_LAYER_PARAMETERS1 *params, ID2D1Layer *layer)
 
void d2d_command_list_pop_layer (struct d2d_command_list *command_list)
 
static BOOL d2d_array_reserve (void **elements, size_t *capacity, size_t count, size_t size)
 
static void d2d_matrix_multiply (D2D_MATRIX_3X2_F *a, const D2D_MATRIX_3X2_F *b)
 
static BOOL d2d_matrix_invert (D2D_MATRIX_3X2_F *dst, const D2D_MATRIX_3X2_F *src)
 
static void d2d_point_set (D2D1_POINT_2F *dst, float x, float y)
 
static float d2d_point_dot (const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1)
 
static void d2d_point_transform (D2D1_POINT_2F *dst, const D2D1_MATRIX_3X2_F *matrix, float x, float y)
 
static void d2d_rect_expand (D2D1_RECT_F *dst, const D2D1_POINT_2F *point)
 
static D2D1_INTERPOLATION_MODE d2d1_1_interp_mode_from_d2d1 (D2D1_BITMAP_INTERPOLATION_MODE mode)
 
static const char * debug_d2d_color_f (const D2D1_COLOR_F *colour)
 
static const char * debug_d2d_point_2f (const D2D1_POINT_2F *point)
 
static const char * debug_d2d_point_2l (const D2D1_POINT_2L *point)
 
static const char * debug_d2d_rect_f (const D2D1_RECT_F *rect)
 
static const char * debug_d2d_rect_l (const D2D1_RECT_L *rect)
 
static const char * debug_d2d_rounded_rect (const D2D1_ROUNDED_RECT *rounded_rect)
 
static const char * debug_d2d_ellipse (const D2D1_ELLIPSE *ellipse)
 

Variables

struct d2d_settings d2d_settings
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 30 of file d2d1_private.h.

Enumeration Type Documentation

◆ d2d_brush_type

Enumerator
D2D_BRUSH_TYPE_SOLID 
D2D_BRUSH_TYPE_LINEAR 
D2D_BRUSH_TYPE_RADIAL 
D2D_BRUSH_TYPE_BITMAP 
D2D_BRUSH_TYPE_IMAGE 
D2D_BRUSH_TYPE_COUNT 

Definition at line 39 of file d2d1_private.h.

40{
47};
@ D2D_BRUSH_TYPE_SOLID
Definition: d2d1_private.h:41
@ D2D_BRUSH_TYPE_RADIAL
Definition: d2d1_private.h:43
@ D2D_BRUSH_TYPE_LINEAR
Definition: d2d1_private.h:42
@ D2D_BRUSH_TYPE_COUNT
Definition: d2d1_private.h:46
@ D2D_BRUSH_TYPE_BITMAP
Definition: d2d1_private.h:44
@ D2D_BRUSH_TYPE_IMAGE
Definition: d2d1_private.h:45

◆ d2d_command_list_state

Enumerator
D2D_COMMAND_LIST_STATE_INITIAL 
D2D_COMMAND_LIST_STATE_ERROR 
D2D_COMMAND_LIST_STATE_OPEN 
D2D_COMMAND_LIST_STATE_CLOSED 

Definition at line 822 of file d2d1_private.h.

823{
828};
@ D2D_COMMAND_LIST_STATE_INITIAL
Definition: d2d1_private.h:824
@ D2D_COMMAND_LIST_STATE_CLOSED
Definition: d2d1_private.h:827
@ D2D_COMMAND_LIST_STATE_ERROR
Definition: d2d1_private.h:825
@ D2D_COMMAND_LIST_STATE_OPEN
Definition: d2d1_private.h:826

◆ d2d_device_context_sampler_limits

Enumerator
D2D_SAMPLER_INTERPOLATION_MODE_COUNT 
D2D_SAMPLER_EXTEND_MODE_COUNT 

Definition at line 149 of file d2d1_private.h.

150{
153};
@ D2D_SAMPLER_EXTEND_MODE_COUNT
Definition: d2d1_private.h:152
@ D2D_SAMPLER_INTERPOLATION_MODE_COUNT
Definition: d2d1_private.h:151

◆ d2d_device_context_target_type

Enumerator
D2D_TARGET_UNKNOWN 
D2D_TARGET_BITMAP 
D2D_TARGET_COMMAND_LIST 

Definition at line 155 of file d2d1_private.h.

156{
160};
@ D2D_TARGET_COMMAND_LIST
Definition: d2d1_private.h:159
@ D2D_TARGET_UNKNOWN
Definition: d2d1_private.h:157
@ D2D_TARGET_BITMAP
Definition: d2d1_private.h:158

◆ d2d_geometry_state

Enumerator
D2D_GEOMETRY_STATE_INITIAL 
D2D_GEOMETRY_STATE_ERROR 
D2D_GEOMETRY_STATE_OPEN 
D2D_GEOMETRY_STATE_CLOSED 
D2D_GEOMETRY_STATE_FIGURE 

Definition at line 464 of file d2d1_private.h.

465{
471};
@ D2D_GEOMETRY_STATE_CLOSED
Definition: d2d1_private.h:469
@ D2D_GEOMETRY_STATE_ERROR
Definition: d2d1_private.h:467
@ D2D_GEOMETRY_STATE_FIGURE
Definition: d2d1_private.h:470
@ D2D_GEOMETRY_STATE_INITIAL
Definition: d2d1_private.h:466
@ D2D_GEOMETRY_STATE_OPEN
Definition: d2d1_private.h:468

◆ d2d_render_info_mask

Enumerator
D2D_RENDER_INFO_PIXEL_SHADER 

Definition at line 741 of file d2d1_private.h.

742{
744};
@ D2D_RENDER_INFO_PIXEL_SHADER
Definition: d2d1_private.h:743

◆ d2d_shape_type

Enumerator
D2D_SHAPE_TYPE_OUTLINE 
D2D_SHAPE_TYPE_BEZIER_OUTLINE 
D2D_SHAPE_TYPE_ARC_OUTLINE 
D2D_SHAPE_TYPE_TRIANGLE 
D2D_SHAPE_TYPE_CURVE 
D2D_SHAPE_TYPE_COUNT 

Definition at line 49 of file d2d1_private.h.

50{
57};
@ D2D_SHAPE_TYPE_OUTLINE
Definition: d2d1_private.h:51
@ D2D_SHAPE_TYPE_COUNT
Definition: d2d1_private.h:56
@ D2D_SHAPE_TYPE_CURVE
Definition: d2d1_private.h:55
@ D2D_SHAPE_TYPE_TRIANGLE
Definition: d2d1_private.h:54
@ D2D_SHAPE_TYPE_BEZIER_OUTLINE
Definition: d2d1_private.h:52
@ D2D_SHAPE_TYPE_ARC_OUTLINE
Definition: d2d1_private.h:53

Function Documentation

◆ d2d1_1_interp_mode_from_d2d1()

static D2D1_INTERPOLATION_MODE d2d1_1_interp_mode_from_d2d1 ( D2D1_BITMAP_INTERPOLATION_MODE  mode)
inlinestatic

Definition at line 981 of file d2d1_private.h.

982{
984}
D2D1_INTERPOLATION_MODE
Definition: d2d1_1.idl:124
GLenum mode
Definition: glext.h:6217

Referenced by d2d_bitmap_brush_SetInterpolationMode(), and d2d_device_context_DrawBitmap().

◆ d2d_array_reserve()

static BOOL d2d_array_reserve ( void **  elements,
size_t *  capacity,
size_t  count,
size_t  size 
)
inlinestatic

Definition at line 897 of file d2d1_private.h.

898{
899 size_t new_capacity, max_capacity;
900 void *new_elements;
901
902 if (count <= *capacity)
903 return TRUE;
904
905 max_capacity = ~(SIZE_T)0 / size;
906 if (count > max_capacity)
907 return FALSE;
908
909 new_capacity = max(4, *capacity);
910 while (new_capacity < count && new_capacity <= max_capacity / 2)
911 new_capacity *= 2;
912 if (new_capacity < count)
913 new_capacity = max_capacity;
914
915 if (!(new_elements = realloc(*elements, new_capacity * size)))
916 return FALSE;
917
918 *elements = new_elements;
919 *capacity = new_capacity;
920 return TRUE;
921}
#define realloc
Definition: debug_ros.c:6
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLsizeiptr size
Definition: glext.h:5919
#define max(a, b)
Definition: svc.c:63
ULONG_PTR SIZE_T
Definition: typedefs.h:80

Referenced by d2d_cdt_create_edge(), d2d_clip_stack_push(), d2d_command_list_reference_object(), d2d_command_list_require_space(), d2d_device_add_indexed_object(), d2d_effect_properties_internal_add(), d2d_effect_set_input_count(), d2d_ellipse_geometry_init(), d2d_figure_add_bezier_controls(), d2d_figure_add_original_bezier_controls(), d2d_figure_add_vertex(), d2d_figure_insert_bezier_controls(), d2d_figure_insert_vertex(), d2d_geometry_fill_add_arc_triangle(), d2d_geometry_intersections_add(), d2d_geometry_outline_add_arc_quadrant(), d2d_geometry_outline_add_bezier_segment(), d2d_geometry_outline_add_join(), d2d_geometry_outline_add_line_segment(), d2d_path_geometry_add_figure(), d2d_path_geometry_add_fill_face(), d2d_rectangle_geometry_init(), and d2d_rounded_rectangle_geometry_init().

◆ d2d_bitmap_brush_create()

HRESULT d2d_bitmap_brush_create ( ID2D1Factory *  factory,
ID2D1Bitmap *  bitmap,
const D2D1_BITMAP_BRUSH_PROPERTIES1 *  bitmap_brush_desc,
const D2D1_BRUSH_PROPERTIES *  brush_desc,
struct d2d_brush **  brush 
)

Definition at line 1076 of file brush.c.

1079{
1080 if (!(*brush = calloc(1, sizeof(**brush))))
1081 return E_OUTOFMEMORY;
1082
1084 brush_desc, (ID2D1BrushVtbl *)&d2d_bitmap_brush_vtbl);
1085 if (((*brush)->u.bitmap.bitmap = unsafe_impl_from_ID2D1Bitmap(bitmap)))
1086 ID2D1Bitmap1_AddRef(&(*brush)->u.bitmap.bitmap->ID2D1Bitmap1_iface);
1087 if (bitmap_brush_desc)
1088 {
1089 (*brush)->u.bitmap.extend_mode_x = bitmap_brush_desc->extendModeX;
1090 (*brush)->u.bitmap.extend_mode_y = bitmap_brush_desc->extendModeY;
1091 (*brush)->u.bitmap.interpolation_mode = bitmap_brush_desc->interpolationMode;
1092 }
1093 else
1094 {
1095 (*brush)->u.bitmap.extend_mode_x = D2D1_EXTEND_MODE_CLAMP;
1096 (*brush)->u.bitmap.extend_mode_y = D2D1_EXTEND_MODE_CLAMP;
1097 (*brush)->u.bitmap.interpolation_mode = D2D1_INTERPOLATION_MODE_LINEAR;
1098 }
1099
1100 TRACE("Created brush %p.\n", *brush);
1101 return S_OK;
1102}
@ D2D1_EXTEND_MODE_CLAMP
Definition: d2d1.idl:199
@ D2D1_INTERPOLATION_MODE_LINEAR
Definition: d2d1_1.idl:126
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
struct d2d_bitmap * unsafe_impl_from_ID2D1Bitmap(ID2D1Bitmap *iface)
Definition: bitmap.c:769
static const struct ID2D1BitmapBrush1Vtbl d2d_bitmap_brush_vtbl
Definition: brush.c:1054
static void d2d_brush_init(struct d2d_brush *brush, ID2D1Factory *factory, enum d2d_brush_type type, const D2D1_BRUSH_PROPERTIES *desc, const struct ID2D1BrushVtbl *vtbl)
Definition: brush.c:242
#define S_OK
Definition: intsafe.h:52
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
D2D1_INTERPOLATION_MODE interpolationMode
Definition: d2d1_1.idl:285
D2D1_EXTEND_MODE extendModeY
Definition: d2d1_1.idl:284
D2D1_EXTEND_MODE extendModeX
Definition: d2d1_1.idl:283
Definition: uimain.c:89
Definition: main.c:439

Referenced by d2d_device_context_CreateBitmapBrush(), d2d_device_context_draw_bitmap(), and d2d_device_context_ID2D1DeviceContext_CreateBitmapBrush().

◆ 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 WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
@ 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_TARGET
Definition: d2d1_1.idl:89
#define D2DERR_UNSUPPORTED_PIXEL_FORMAT
Definition: d2derr.h:24
@ D3D11_RESOURCE_MISC_GDI_COMPATIBLE
Definition: d3d11.idl:1042
#define E_INVALIDARG
Definition: ddrawi.h:101
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
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
#define FAILED(hr)
Definition: intsafe.h:51
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
Definition: http.c:7252

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
#define FIXME(fmt,...)
Definition: precomp.h:53
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
ID3D11Resource * resource
Definition: d2d1_private.h:432
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
Definition: devices.h:37
#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_render_target_init()

HRESULT d2d_bitmap_render_target_init ( struct d2d_bitmap_render_target *  render_target,
const struct d2d_device_context *  parent_target,
const D2D1_SIZE_F *  size,
const D2D1_SIZE_U *  pixel_size,
const D2D1_PIXEL_FORMAT *  format,
D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS  options 
)

Definition at line 728 of file bitmap_render_target.c.

732{
734 D2D1_BITMAP_PROPERTIES1 bitmap_desc;
736 D2D1_SIZE_U bitmap_size;
737 HRESULT hr;
738
739 if (options)
740 FIXME("Compatible target options are ignored, %#x.\n", options);
741
743
744 dxgi_rt_desc.type = parent_target->desc.type;
745 dxgi_rt_desc.usage = parent_target->desc.usage;
746 dxgi_rt_desc.minLevel = parent_target->desc.minLevel;
747
748 if (pixel_size)
749 {
750 bitmap_size.width = pixel_size->width;
751 bitmap_size.height = pixel_size->height;
752 }
753 else if (size)
754 {
755 bitmap_size.width = ceilf((size->width * parent_target->desc.dpiX) / 96.0f);
756 bitmap_size.height = ceilf((size->height * parent_target->desc.dpiY) / 96.0f);
757 }
758 else
759 {
760 bitmap_size.width = parent_target->pixel_size.width;
761 bitmap_size.height = parent_target->pixel_size.height;
762 }
763
764 if (size && size->width != 0.0f && size->height != 0.0f)
765 {
766 dxgi_rt_desc.dpiX = (bitmap_size.width * 96.0f) / size->width;
767 dxgi_rt_desc.dpiY = (bitmap_size.height * 96.0f) / size->height;
768 }
769 else
770 {
771 dxgi_rt_desc.dpiX = parent_target->desc.dpiX;
772 dxgi_rt_desc.dpiY = parent_target->desc.dpiY;
773 }
774
776 dxgi_rt_desc.pixelFormat.format = parent_target->desc.pixelFormat.format;
777 else
778 dxgi_rt_desc.pixelFormat.format = pixel_format->format;
779
780 if (!pixel_format || pixel_format->alphaMode == D2D1_ALPHA_MODE_UNKNOWN)
781 dxgi_rt_desc.pixelFormat.alphaMode = D2D1_ALPHA_MODE_PREMULTIPLIED;
782 else
783 dxgi_rt_desc.pixelFormat.alphaMode = pixel_format->alphaMode;
784
785 if (FAILED(hr = d2d_d3d_create_render_target(parent_target->device, NULL,
786 (IUnknown *)&render_target->ID2D1BitmapRenderTarget_iface,
787 parent_target->ops ? &d2d_bitmap_render_target_ops : NULL,
788 &dxgi_rt_desc, (void **)&render_target->dxgi_inner)))
789 {
790 WARN("Failed to create DXGI surface render target, hr %#lx.\n", hr);
791 return hr;
792 }
793
794 /* Note that we should be a little careful with the "dxgi_target"
795 * reference we get here. Because the object is aggregated, releasing the
796 * interface in any error paths below would end up calling
797 * d2d_bitmap_render_target_Release(). */
798 if (FAILED(hr = IUnknown_QueryInterface(render_target->dxgi_inner,
799 &IID_ID2D1RenderTarget, (void **)&render_target->dxgi_target)))
800 {
801 WARN("Failed to retrieve ID2D1RenderTarget interface, hr %#lx.\n", hr);
802 IUnknown_Release(render_target->dxgi_inner);
803 return hr;
804 }
805
806 bitmap_desc.pixelFormat = dxgi_rt_desc.pixelFormat;
807 bitmap_desc.dpiX = dxgi_rt_desc.dpiX;
808 bitmap_desc.dpiY = dxgi_rt_desc.dpiY;
810 bitmap_desc.colorContext = NULL;
811
812 ID2D1RenderTarget_QueryInterface(render_target->dxgi_target, &IID_ID2D1DeviceContext, (void **)&context);
813 hr = ID2D1DeviceContext_CreateBitmap(context, bitmap_size, NULL, 0, &bitmap_desc,
814 (ID2D1Bitmap1 **)&render_target->bitmap);
815 ID2D1DeviceContext_SetTarget(context, (ID2D1Image *)render_target->bitmap);
816 ID2D1DeviceContext_Release(context);
817 if (FAILED(hr))
818 {
819 WARN("Failed to create target bitmap, hr %#lx.\n", hr);
820 IUnknown_Release(render_target->dxgi_inner);
821 return hr;
822 }
823
824 return S_OK;
825}
static const struct d2d_device_context_ops d2d_bitmap_render_target_ops
static const struct ID2D1BitmapRenderTargetVtbl d2d_bitmap_render_target_vtbl
HRESULT d2d_d3d_create_render_target(struct d2d_device *device, IDXGISurface *surface, IUnknown *outer_unknown, const struct d2d_device_context_ops *ops, const D2D1_RENDER_TARGET_PROPERTIES *desc, void **render_target)
Definition: device.c:4183
#define ceilf(x)
Definition: mymath.h:62
D2D1_RENDER_TARGET_TYPE type
Definition: d2d1.idl:407
D2D1_PIXEL_FORMAT pixelFormat
Definition: d2d1.idl:408
D2D1_RENDER_TARGET_USAGE usage
Definition: d2d1.idl:411
D2D1_FEATURE_LEVEL minLevel
Definition: d2d1.idl:412
ID2D1BitmapRenderTarget ID2D1BitmapRenderTarget_iface
Definition: d2d1_private.h:293
ID2D1RenderTarget * dxgi_target
Definition: d2d1_private.h:296
D2D1_SIZE_U pixel_size
Definition: d2d1_private.h:220
const struct d2d_device_context_ops * ops
Definition: d2d1_private.h:182
struct d2d_device * device
Definition: d2d1_private.h:186
D2D1_RENDER_TARGET_PROPERTIES desc
Definition: d2d1_private.h:219

Referenced by d2d_device_context_CreateCompatibleRenderTarget().

◆ d2d_brush_bind_resources()

void d2d_brush_bind_resources ( struct d2d_brush *  brush,
struct d2d_device_context *  context,
unsigned int  brush_idx 
)

Definition at line 1573 of file brush.c.

1574{
1575 switch (brush->type)
1576 {
1578 break;
1579
1581 d2d_gradient_bind(brush->u.linear.gradient, context->d3d_device, brush_idx);
1582 break;
1583
1585 d2d_gradient_bind(brush->u.radial.gradient, context->d3d_device, brush_idx);
1586 break;
1587
1589 d2d_brush_bind_bitmap(brush->u.bitmap.bitmap, context, brush->u.bitmap.extend_mode_x,
1590 brush->u.bitmap.extend_mode_y, brush->u.bitmap.interpolation_mode, brush_idx);
1591 break;
1592
1594 d2d_brush_bind_image(brush, context, brush_idx);
1595 break;
1596
1597 default:
1598 FIXME("Unhandled brush type %#x.\n", brush->type);
1599 break;
1600 }
1601}
static void d2d_brush_bind_bitmap(struct d2d_bitmap *bitmap, struct d2d_device_context *context, D2D1_EXTEND_MODE extend_mode_x, D2D1_EXTEND_MODE extend_mode_y, D2D1_INTERPOLATION_MODE interpolation_mode, unsigned int brush_idx)
Definition: brush.c:1508
static void d2d_gradient_bind(struct d2d_gradient *gradient, ID3D11Device1 *device, unsigned int brush_idx)
Definition: brush.c:228
static void d2d_brush_bind_image(struct d2d_brush *brush, struct d2d_device_context *context, unsigned int brush_idx)
Definition: brush.c:1553
union d2d_brush::@234 u
enum d2d_brush_type type
Definition: d2d1_private.h:330
struct d2d_brush::@234::@237 radial
struct d2d_brush::@234::@236 linear
struct d2d_bitmap * bitmap
Definition: d2d1_private.h:352

Referenced by d2d_device_context_draw().

◆ d2d_brush_fill_cb()

BOOL d2d_brush_fill_cb ( const struct d2d_brush *  brush,
struct d2d_brush_cb *  cb 
)

Definition at line 1372 of file brush.c.

1373{
1374 float theta, sin_theta, cos_theta;
1375 float dpi_scale, d, s1, s2, t, u;
1376 struct d2d_bitmap *bitmap;
1377 D2D1_POINT_2F v_p, v_q;
1378 D2D1_COLOR_F *colour;
1380
1381 if (!brush)
1382 {
1383 cb->type = D2D_BRUSH_TYPE_COUNT;
1384 return TRUE;
1385 }
1386
1387 cb->type = brush->type;
1388 cb->opacity = brush->opacity;
1389
1390 switch (brush->type)
1391 {
1393 colour = &cb->u.solid.colour;
1394
1395 *colour = brush->u.solid.color;
1396 colour->r *= colour->a;
1397 colour->g *= colour->a;
1398 colour->b *= colour->a;
1399
1400 return TRUE;
1401
1403 b = brush->transform;
1404 d2d_point_transform(&cb->u.linear.start, &b, brush->u.linear.start.x, brush->u.linear.start.y);
1405 d2d_point_transform(&cb->u.linear.end, &b, brush->u.linear.end.x, brush->u.linear.end.y);
1406 cb->u.linear.stop_count = brush->u.linear.gradient->stop_count;
1407
1408 return TRUE;
1409
1411 b = brush->transform;
1412 d2d_point_transform(&cb->u.radial.centre, &b, brush->u.radial.centre.x, brush->u.radial.centre.y);
1413 b._31 = b._32 = 0.0f;
1414 d2d_point_transform(&cb->u.radial.offset, &b, brush->u.radial.offset.x, brush->u.radial.offset.y);
1415
1416 /* After a transformation, the axes of the ellipse are no longer
1417 * necessarily orthogonal, but they are conjugate diameters.
1418 *
1419 * A = ⎡a.x b.x⎤
1420 * ⎣a.y b.y⎦
1421 *
1422 * = ⎡cos(θ) -sin(θ)⎤⎡σ₁ 0 ⎤⎡cos(φ) -sin(φ)⎤
1423 * ⎣sin(θ) cos(θ)⎦⎣0 σ₂⎦⎣sin(φ) cos(φ)⎦
1424 *
1425 * a' = [σ₁· cos(θ) σ₁·sin(θ)]
1426 * b' = [σ₂·-sin(θ) σ₂·cos(θ)] */
1427
1428 d2d_point_set(&v_p, brush->u.radial.radius.x * b._11, brush->u.radial.radius.y * b._21);
1429 d2d_point_set(&v_q, brush->u.radial.radius.x * b._12, brush->u.radial.radius.y * b._22);
1430
1431 t = 0.5f * d2d_point_dot(&v_p, &v_p);
1432 u = 0.5f * d2d_point_dot(&v_q, &v_q);
1433 s1 = t + u;
1434
1435 t = t - u;
1436 u = d2d_point_dot(&v_p, &v_q);
1437 s2 = sqrtf(t * t + u * u);
1438
1439 theta = 0.5f * atan2(u, t);
1440 sin_theta = sinf(theta);
1441 cos_theta = cosf(theta);
1442
1443 t = sqrtf(s1 + s2);
1444 d2d_point_set(&cb->u.radial.ra, t * cos_theta, t * sin_theta);
1445 t = sqrtf(s1 - s2);
1446 d2d_point_set(&cb->u.radial.rb, t * -sin_theta, t * cos_theta);
1447
1448 cb->u.radial.stop_count = brush->u.linear.gradient->stop_count;
1449
1450 return TRUE;
1451
1454 {
1455 ID2D1Bitmap *image_bitmap = NULL;
1456
1457 if (brush->type == D2D_BRUSH_TYPE_BITMAP)
1458 bitmap = brush->u.bitmap.bitmap;
1459 else
1460 {
1461 if (FAILED(ID2D1Image_QueryInterface(brush->u.image.image, &IID_ID2D1Bitmap, (void **)&image_bitmap)))
1462 {
1463 FIXME("Only image brushes with bitmaps are supported.\n");
1464 return FALSE;
1465 }
1466
1467 bitmap = unsafe_impl_from_ID2D1Bitmap(image_bitmap);
1468 cb->type = D2D_BRUSH_TYPE_BITMAP;
1469 }
1470
1471 /* Scale for bitmap size and dpi. */
1472 b = brush->transform;
1473 dpi_scale = bitmap->pixel_size.width * (96.0f / bitmap->dpi_x);
1474 b._11 *= dpi_scale;
1475 b._21 *= dpi_scale;
1476 dpi_scale = bitmap->pixel_size.height * (96.0f / bitmap->dpi_y);
1477 b._12 *= dpi_scale;
1478 b._22 *= dpi_scale;
1479
1480 /* Invert the matrix. (Because the matrix is applied to the
1481 * sampling coordinates. I.e., to scale the bitmap by 2 we need to
1482 * divide the coordinates by 2.) */
1483 d = b._11 * b._22 - b._21 * b._12;
1484 if (d != 0.0f)
1485 {
1486 cb->u.bitmap._11 = b._22 / d;
1487 cb->u.bitmap._21 = -b._21 / d;
1488 cb->u.bitmap._31 = (b._21 * b._32 - b._31 * b._22) / d;
1489 cb->u.bitmap._12 = -b._12 / d;
1490 cb->u.bitmap._22 = b._11 / d;
1491 cb->u.bitmap._32 = -(b._11 * b._32 - b._31 * b._12) / d;
1492 }
1493
1494 cb->u.bitmap.ignore_alpha = bitmap->format.alphaMode == D2D1_ALPHA_MODE_IGNORE;
1495
1496 if (image_bitmap)
1497 ID2D1Bitmap_Release(image_bitmap);
1498
1499 return TRUE;
1500 }
1501
1502 default:
1503 FIXME("Unhandled brush type %#x.\n", brush->type);
1504 return FALSE;
1505 }
1506}
static float d2d_point_dot(const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1)
Definition: d2d1_private.h:958
static void d2d_point_set(D2D1_POINT_2F *dst, float x, float y)
Definition: d2d1_private.h:952
static void d2d_point_transform(D2D1_POINT_2F *dst, const D2D1_MATRIX_3X2_F *matrix, float x, float y)
Definition: d2d1_private.h:963
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
_ACRTIMP float __cdecl cosf(float)
Definition: cosf.c:13
_ACRTIMP float __cdecl sinf(float)
Definition: sinf.c:13
_ACRTIMP double __cdecl atan2(double, double)
Definition: atan2.c:52
GLdouble GLdouble t
Definition: gl.h:2047
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
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 * u
Definition: glfuncs.h:240
#define b
Definition: ke_i.h:79
struct S1 s1
#define sqrtf(x)
Definition: mymath.h:59
PCWSTR s2
Definition: shell32_main.h:38
uint32 width
Definition: uimain.c:91
uint32 height
Definition: uimain.c:92
ID2D1Image * image
Definition: d2d1_private.h:359
D2D1_MATRIX_3X2_F transform
Definition: d2d1_private.h:328
struct d2d_brush::@234::@235 solid
float opacity
Definition: d2d1_private.h:327

Referenced by d2d_device_context_update_ps_cb().

◆ d2d_command_list_begin_draw()

void d2d_command_list_begin_draw ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context 
)

Definition at line 676 of file command_list.c.

678{
679 if (command_list->state != D2D_COMMAND_LIST_STATE_INITIAL)
680 {
681 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
682 return;
683 }
684
685 d2d_command_list_set_antialias_mode(command_list, context->drawing_state.antialiasMode);
686 d2d_command_list_set_primitive_blend(command_list, context->drawing_state.primitiveBlend);
687 d2d_command_list_set_unit_mode(command_list, context->drawing_state.unitMode);
688 d2d_command_list_set_text_antialias_mode(command_list, context->drawing_state.textAntialiasMode);
689 d2d_command_list_set_tags(command_list, context->drawing_state.tag1, context->drawing_state.tag2);
690 d2d_command_list_set_transform(command_list, &context->drawing_state.transform);
691 d2d_command_list_set_text_rendering_params(command_list, context->text_rendering_params);
692
693 command_list->state = D2D_COMMAND_LIST_STATE_OPEN;
694}
void d2d_command_list_set_unit_mode(struct d2d_command_list *command_list, D2D1_UNIT_MODE mode)
Definition: command_list.c:637
void d2d_command_list_set_text_rendering_params(struct d2d_command_list *command_list, IDWriteRenderingParams *params)
Definition: command_list.c:898
void d2d_command_list_set_transform(struct d2d_command_list *command_list, const D2D1_MATRIX_3X2_F *transform)
Definition: command_list.c:666
void d2d_command_list_set_text_antialias_mode(struct d2d_command_list *command_list, D2D1_TEXT_ANTIALIAS_MODE mode)
Definition: command_list.c:646
void d2d_command_list_set_tags(struct d2d_command_list *command_list, D2D1_TAG tag1, D2D1_TAG tag2)
Definition: command_list.c:656
void d2d_command_list_set_primitive_blend(struct d2d_command_list *command_list, D2D1_PRIMITIVE_BLEND primitive_blend)
Definition: command_list.c:627
void d2d_command_list_set_antialias_mode(struct d2d_command_list *command_list, D2D1_ANTIALIAS_MODE mode)
Definition: command_list.c:617
enum d2d_command_list_state state
Definition: d2d1_private.h:836

Referenced by d2d_device_context_BeginDraw().

◆ d2d_command_list_clear()

void d2d_command_list_clear ( struct d2d_command_list *  command_list,
const D2D1_COLOR_F *  color 
)

Definition at line 746 of file command_list.c.

747{
749
750 command = d2d_command_list_require_space(command_list, sizeof(*command));
752 if (color) command->color = *color;
753 else memset(&command->color, 0, sizeof(command->color));
754}
@ D2D_COMMAND_CLEAR
Definition: command_list.c:37
static void * d2d_command_list_require_space(struct d2d_command_list *command_list, size_t size)
Definition: command_list.c:520
GLuint color
Definition: glext.h:6243

Referenced by d2d_device_context_Clear().

◆ d2d_command_list_create()

HRESULT d2d_command_list_create ( ID2D1Factory *  factory,
struct d2d_command_list **  command_list 
)

Definition at line 498 of file command_list.c.

499{
500 if (!(*command_list = calloc(1, sizeof(**command_list))))
501 return E_OUTOFMEMORY;
502
503 (*command_list)->ID2D1CommandList_iface.lpVtbl = &d2d_command_list_vtbl;
504 (*command_list)->refcount = 1;
505 ID2D1Factory_AddRef((*command_list)->factory = factory);
506
507 TRACE("Created command list %p.\n", *command_list);
508
509 return S_OK;
510}
static const ID2D1CommandListVtbl d2d_command_list_vtbl
Definition: command_list.c:488

Referenced by d2d_device_context_CreateCommandList().

◆ d2d_command_list_draw_bitmap()

void d2d_command_list_draw_bitmap ( struct d2d_command_list *  command_list,
ID2D1Bitmap *  bitmap,
const D2D1_RECT_F *  dst_rect,
float  opacity,
D2D1_INTERPOLATION_MODE  interpolation_mode,
const D2D1_RECT_F *  src_rect,
const D2D1_MATRIX_4X4_F *  perspective_transform 
)

Definition at line 999 of file command_list.c.

1002{
1004 size_t size;
1005 BYTE *data;
1006
1007 size = sizeof(*command);
1008 if (dst_rect) size += sizeof(*dst_rect);
1009 if (src_rect) size += sizeof(*src_rect);
1010 if (perspective_transform) size += sizeof(*perspective_transform);
1011
1013
1016 command->bitmap = bitmap;
1017 command->opacity = opacity;
1018 command->interpolation_mode = interpolation_mode;
1019
1020 data = (BYTE *)(command + 1);
1021
1025}
@ D2D_COMMAND_DRAW_BITMAP
Definition: command_list.c:42
static void d2d_command_list_reference_object(struct d2d_command_list *command_list, void *object)
Definition: command_list.c:535
static void d2d_command_list_write_field(BYTE **data, void *dst, const void *src, size_t size)
Definition: command_list.c:904
D2D1_RECT_F * dst_rect
Definition: command_list.c:196
D2D1_MATRIX_4X4_F * perspective_transform
Definition: command_list.c:198
D2D1_INTERPOLATION_MODE interpolation_mode
Definition: command_list.c:194
D2D1_RECT_F * src_rect
Definition: command_list.c:197
unsigned char BYTE
Definition: xxhash.c:193

Referenced by d2d_device_context_DrawBitmap(), and d2d_device_context_ID2D1DeviceContext_DrawBitmap().

◆ d2d_command_list_draw_geometry()

void d2d_command_list_draw_geometry ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
ID2D1Geometry *  geometry,
ID2D1Brush *  orig_brush,
float  stroke_width,
ID2D1StrokeStyle *  stroke_style 
)

Definition at line 780 of file command_list.c.

783{
786
787 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
788 {
789 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
790 return;
791 }
792
795
796 command = d2d_command_list_require_space(command_list, sizeof(*command));
798 command->brush = brush;
799 command->stroke_width = stroke_width;
800 command->stroke_style = stroke_style;
801}
static HRESULT d2d_command_list_create_brush(struct d2d_command_list *command_list, const struct d2d_device_context *ctx, ID2D1Brush *orig_brush, ID2D1Brush **ret)
Definition: command_list.c:551
@ D2D_COMMAND_DRAW_GEOMETRY
Definition: command_list.c:40
ID2D1Geometry * geometry
Definition: command_list.c:134
ID2D1StrokeStyle * stroke_style
Definition: command_list.c:137

Referenced by d2d_device_context_DrawGeometry().

◆ d2d_command_list_draw_glyph_run()

void d2d_command_list_draw_glyph_run ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
D2D1_POINT_2F  origin,
const DWRITE_GLYPH_RUN *  run,
const DWRITE_GLYPH_RUN_DESCRIPTION *  run_desc,
ID2D1Brush *  orig_brush,
DWRITE_MEASURING_MODE  measuring_mode 
)

Definition at line 919 of file command_list.c.

923{
927 UINT32 glyph_count;
929 size_t size;
930 BYTE *data;
931
932 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
933 {
934 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
935 return;
936 }
937
938 /* Set rendering parameters automatically. Explicitly set null parameters are not recorded,
939 either separately or as a part of a restored state block. Forcing parameters update on
940 DrawGlyphRun() ensures that state is reset correctly. */
941
943 context->text_rendering_params);
944
945 /* Get combined size of variable data. */
946
947 glyph_count = run->glyphCount;
948 size = sizeof(*command);
949 if (run->glyphIndices) size += glyph_count * sizeof(*run->glyphIndices);
950 if (run->glyphAdvances) size += glyph_count * sizeof(*run->glyphAdvances);
951 if (run->glyphOffsets) size += glyph_count * sizeof(*run->glyphOffsets);
952 if (run_desc)
953 {
954 size += sizeof(*run_desc);
958 size += sizeof(run_desc->stringLength);
959 size += sizeof(run_desc->textPosition);
960 }
961
963
966 r = &command->run;
967
968 r->fontFace = run->fontFace;
969 r->fontEmSize = run->fontEmSize;
970 r->glyphCount = run->glyphCount;
971 r->isSideways = run->isSideways;
972 r->bidiLevel = run->bidiLevel;
973
974 data = (BYTE *)(command + 1);
975
976 d2d_command_list_write_field(&data, &r->glyphIndices, run->glyphIndices, glyph_count * sizeof(*r->glyphIndices));
977 d2d_command_list_write_field(&data, &r->glyphAdvances, run->glyphAdvances, glyph_count * sizeof(*r->glyphAdvances));
978 d2d_command_list_write_field(&data, &r->glyphOffsets, run->glyphOffsets, glyph_count * sizeof(*r->glyphOffsets));
979
980 command->run_desc = NULL;
981 if (run_desc)
982 {
984 memset(d, 0, sizeof(*d));
985 data += sizeof(*d);
986
989 d->stringLength = run_desc->stringLength;
991 d->textPosition = run_desc->textPosition;
992 }
993
994 command->brush = brush;
995 command->origin = origin;
996 command->measuring_mode = measuring_mode;
997}
@ D2D_COMMAND_DRAW_GLYPH_RUN
Definition: command_list.c:38
static void d2d_command_list_set_text_rendering_params_internal(struct d2d_command_list *command_list, BOOL allow_null, IDWriteRenderingParams *params)
Definition: command_list.c:873
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
voidpf uLong int origin
Definition: ioapi.h:144
UINT16 const * clusterMap
Definition: dwrite.idl:424
WCHAR const * localeName
Definition: dwrite.idl:421
IDWriteFontFace * fontFace
Definition: dwrite.idl:405
DWRITE_GLYPH_OFFSET const * glyphOffsets
Definition: dwrite.idl:410
UINT32 bidiLevel
Definition: dwrite.idl:412
FLOAT fontEmSize
Definition: dwrite.idl:406
UINT16 const * glyphIndices
Definition: dwrite.idl:408
FLOAT const * glyphAdvances
Definition: dwrite.idl:409
UINT32 glyphCount
Definition: dwrite.idl:407
DWRITE_GLYPH_RUN_DESCRIPTION * run_desc
Definition: command_list.c:187
DWRITE_MEASURING_MODE measuring_mode
Definition: command_list.c:184

Referenced by d2d_device_context_draw_glyph_run().

◆ d2d_command_list_draw_image()

void d2d_command_list_draw_image ( struct d2d_command_list *  command_list,
ID2D1Image *  image,
const D2D1_POINT_2F *  target_offset,
const D2D1_RECT_F *  image_rect,
D2D1_INTERPOLATION_MODE  interpolation_mode,
D2D1_COMPOSITE_MODE  composite_mode 
)

Definition at line 1027 of file command_list.c.

1030{
1032 size_t size;
1033 BYTE *data;
1034
1035 size = sizeof(*command);
1036 if (target_offset) size += sizeof(*target_offset);
1037 if (image_rect) size += sizeof(*image_rect);
1038
1040
1043 command->image = image;
1044 command->interpolation_mode = interpolation_mode;
1045 command->composite_mode = composite_mode;
1046
1047 data = (BYTE *)(command + 1);
1048
1051}
@ D2D_COMMAND_DRAW_IMAGE
Definition: command_list.c:43
D2D1_RECT_F * image_rect
Definition: command_list.c:208
D2D1_COMPOSITE_MODE composite_mode
Definition: command_list.c:206
D2D1_POINT_2F * target_offset
Definition: command_list.c:207
D2D1_INTERPOLATION_MODE interpolation_mode
Definition: command_list.c:205
Definition: image.c:84

Referenced by d2d_device_context_DrawImage().

◆ d2d_command_list_draw_line()

void d2d_command_list_draw_line ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
D2D1_POINT_2F  p0,
D2D1_POINT_2F  p1,
ID2D1Brush *  orig_brush,
float  stroke_width,
ID2D1StrokeStyle *  stroke_style 
)

Definition at line 756 of file command_list.c.

759{
762
763 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
764 {
765 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
766 return;
767 }
768
770
771 command = d2d_command_list_require_space(command_list, sizeof(*command));
773 command->p0 = p0;
774 command->p1 = p1;
775 command->brush = brush;
776 command->stroke_width = stroke_width;
777 command->stroke_style = stroke_style;
778}
@ D2D_COMMAND_DRAW_LINE
Definition: command_list.c:39
ID2D1StrokeStyle * stroke_style
Definition: command_list.c:128

Referenced by d2d_device_context_DrawLine().

◆ d2d_command_list_draw_rectangle()

void d2d_command_list_draw_rectangle ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
const D2D1_RECT_F *  rect,
ID2D1Brush *  orig_brush,
float  stroke_width,
ID2D1StrokeStyle *  stroke_style 
)

Definition at line 803 of file command_list.c.

805{
808
809 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
810 {
811 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
812 return;
813 }
814
816
817 command = d2d_command_list_require_space(command_list, sizeof(*command));
819 command->rect = *rect;
820 command->brush = brush;
821 command->stroke_width = stroke_width;
822 command->stroke_style = stroke_style;
823}
@ D2D_COMMAND_DRAW_RECTANGLE
Definition: command_list.c:41
ID2D1StrokeStyle * stroke_style
Definition: command_list.c:146

Referenced by d2d_device_context_DrawRectangle().

◆ d2d_command_list_fill_geometry()

void d2d_command_list_fill_geometry ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
ID2D1Geometry *  geometry,
ID2D1Brush *  orig_brush,
ID2D1Brush *  orig_opacity_brush 
)

Definition at line 825 of file command_list.c.

828{
829 ID2D1Brush *brush, *opacity_brush = NULL;
831
832 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
833 {
834 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
835 return;
836 }
837
838 if (orig_opacity_brush && FAILED(d2d_command_list_create_brush(command_list, context,
839 orig_opacity_brush, &opacity_brush)))
840 {
841 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
842 ID2D1Brush_Release(brush);
843 return;
844 }
845
847
848 command = d2d_command_list_require_space(command_list, sizeof(*command));
850 command->geometry = geometry;
851 command->brush = brush;
852 command->opacity_brush = opacity_brush;
853}
@ D2D_COMMAND_FILL_GEOMETRY
Definition: command_list.c:46
ID2D1Geometry * geometry
Definition: command_list.c:168

Referenced by d2d_device_context_FillGeometry().

◆ d2d_command_list_fill_mesh()

void d2d_command_list_fill_mesh ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
ID2D1Mesh *  mesh,
ID2D1Brush *  orig_brush 
)

Definition at line 1053 of file command_list.c.

1055{
1058
1059 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
1060 {
1061 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
1062 return;
1063 }
1064
1066
1067 command = d2d_command_list_require_space(command_list, sizeof(*command));
1069 command->mesh = mesh;
1070 command->brush = brush;
1071}
@ D2D_COMMAND_FILL_MESH
Definition: command_list.c:44
Definition: mesh.c:189

Referenced by d2d_device_context_FillMesh().

◆ d2d_command_list_fill_opacity_mask()

void d2d_command_list_fill_opacity_mask ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
ID2D1Bitmap *  bitmap,
ID2D1Brush *  orig_brush,
const D2D1_RECT_F *  dst_rect,
const D2D1_RECT_F *  src_rect 
)

Definition at line 1073 of file command_list.c.

1075{
1078 size_t size;
1079 BYTE *data;
1080
1081 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
1082 {
1083 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
1084 return;
1085 }
1086
1087 size = sizeof(*command);
1088 if (dst_rect) size += sizeof(*dst_rect);
1089 if (src_rect) size += sizeof(*src_rect);
1090
1092
1095 command->bitmap = bitmap;
1096 command->brush = brush;
1097
1098 data = (BYTE *)(command + 1);
1099
1102}
@ D2D_COMMAND_FILL_OPACITY_MASK
Definition: command_list.c:45

Referenced by d2d_device_context_FillOpacityMask(), and d2d_device_context_ID2D1DeviceContext_FillOpacityMask().

◆ d2d_command_list_fill_rectangle()

void d2d_command_list_fill_rectangle ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
const D2D1_RECT_F *  rect,
ID2D1Brush *  orig_brush 
)

Definition at line 855 of file command_list.c.

857{
860
861 if (FAILED(d2d_command_list_create_brush(command_list, context, orig_brush, &brush)))
862 {
863 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
864 return;
865 }
866
867 command = d2d_command_list_require_space(command_list, sizeof(*command));
869 command->rect = *rect;
870 command->brush = brush;
871}
@ D2D_COMMAND_FILL_RECTANGLE
Definition: command_list.c:47

Referenced by d2d_device_context_FillRectangle().

◆ d2d_command_list_pop_clip()

void d2d_command_list_pop_clip ( struct d2d_command_list *  command_list)

Definition at line 707 of file command_list.c.

708{
709 struct d2d_command *command;
710
711 command = d2d_command_list_require_space(command_list, sizeof(*command));
713}
@ D2D_COMMAND_POP_CLIP
Definition: command_list.c:50

Referenced by d2d_device_context_PopAxisAlignedClip().

◆ d2d_command_list_pop_layer()

void d2d_command_list_pop_layer ( struct d2d_command_list *  command_list)

Definition at line 738 of file command_list.c.

739{
740 struct d2d_command *command;
741
742 command = d2d_command_list_require_space(command_list, sizeof(*command));
744}
@ D2D_COMMAND_POP_LAYER
Definition: command_list.c:51

Referenced by d2d_device_context_PopLayer().

◆ d2d_command_list_push_clip()

void d2d_command_list_push_clip ( struct d2d_command_list *  command_list,
const D2D1_RECT_F *  rect,
D2D1_ANTIALIAS_MODE  antialias_mode 
)

Definition at line 696 of file command_list.c.

698{
700
701 command = d2d_command_list_require_space(command_list, sizeof(*command));
703 command->rect = *rect;
704 command->mode = mode;
705}
@ D2D_COMMAND_PUSH_CLIP
Definition: command_list.c:48

Referenced by d2d_device_context_PushAxisAlignedClip().

◆ d2d_command_list_push_layer()

void d2d_command_list_push_layer ( struct d2d_command_list *  command_list,
const struct d2d_device_context *  context,
const D2D1_LAYER_PARAMETERS1 *  params,
ID2D1Layer *  layer 
)

Definition at line 715 of file command_list.c.

717{
719 ID2D1Brush *opacity_brush = NULL;
720
721 if (params->opacityBrush && FAILED(d2d_command_list_create_brush(command_list, context,
722 params->opacityBrush, &opacity_brush)))
723 {
724 command_list->state = D2D_COMMAND_LIST_STATE_ERROR;
725 return;
726 }
727
729 d2d_command_list_reference_object(command_list, params->geometricMask);
730
731 command = d2d_command_list_require_space(command_list, sizeof(*command));
733 command->params = *params;
734 command->params.opacityBrush = opacity_brush;
735 command->layer = layer;
736}
@ D2D_COMMAND_PUSH_LAYER
Definition: command_list.c:49
GLenum const GLfloat * params
Definition: glext.h:5645
GLenum GLuint GLint GLint layer
Definition: glext.h:7007

Referenced by d2d_device_context_ID2D1DeviceContext_PushLayer(), and d2d_device_context_PushLayer().

◆ d2d_command_list_set_antialias_mode()

void d2d_command_list_set_antialias_mode ( struct d2d_command_list *  command_list,
D2D1_ANTIALIAS_MODE  mode 
)

◆ d2d_command_list_set_primitive_blend()

void d2d_command_list_set_primitive_blend ( struct d2d_command_list *  command_list,
D2D1_PRIMITIVE_BLEND  primitive_blend 
)

◆ d2d_command_list_set_tags()

void d2d_command_list_set_tags ( struct d2d_command_list *  command_list,
D2D1_TAG  tag1,
D2D1_TAG  tag2 
)

Definition at line 656 of file command_list.c.

657{
659
660 command = d2d_command_list_require_space(command_list, sizeof(*command));
662 command->tag1 = tag1;
663 command->tag2 = tag2;
664}
@ D2D_COMMAND_SET_TAGS
Definition: command_list.c:31

Referenced by d2d_command_list_begin_draw(), d2d_device_context_RestoreDrawingState(), and d2d_device_context_SetTags().

◆ d2d_command_list_set_text_antialias_mode()

void d2d_command_list_set_text_antialias_mode ( struct d2d_command_list *  command_list,
D2D1_TEXT_ANTIALIAS_MODE  mode 
)

◆ d2d_command_list_set_text_rendering_params()

void d2d_command_list_set_text_rendering_params ( struct d2d_command_list *  command_list,
IDWriteRenderingParams *  params 
)

◆ d2d_command_list_set_transform()

void d2d_command_list_set_transform ( struct d2d_command_list *  command_list,
const D2D1_MATRIX_3X2_F *  transform 
)

Definition at line 666 of file command_list.c.

668{
670
671 command = d2d_command_list_require_space(command_list, sizeof(*command));
673 command->transform = *transform;
674}
@ D2D_COMMAND_SET_TRANSFORM
Definition: command_list.c:34
GLuint GLenum GLenum transform
Definition: glext.h:9407

Referenced by d2d_command_list_begin_draw(), d2d_device_context_RestoreDrawingState(), and d2d_device_context_SetTransform().

◆ d2d_command_list_set_unit_mode()

void d2d_command_list_set_unit_mode ( struct d2d_command_list *  command_list,
D2D1_UNIT_MODE  mode 
)

◆ d2d_d3d_create_render_target()

HRESULT d2d_d3d_create_render_target ( struct d2d_device *  device,
IDXGISurface *  surface,
IUnknown *  outer_unknown,
const struct d2d_device_context_ops *  ops,
const D2D1_RENDER_TARGET_PROPERTIES *  desc,
void **  render_target 
)

Definition at line 4183 of file device.c.

4185{
4186 D2D1_BITMAP_PROPERTIES1 bitmap_desc;
4187 struct d2d_device_context *object;
4189 HRESULT hr;
4190
4192 WARN("Ignoring render target type %#x.\n", desc->type);
4193 if (desc->usage != D2D1_RENDER_TARGET_USAGE_NONE)
4194 FIXME("Ignoring render target usage %#x.\n", desc->usage);
4195 if (desc->minLevel != D2D1_FEATURE_LEVEL_DEFAULT)
4196 WARN("Ignoring feature level %#x.\n", desc->minLevel);
4197
4198 bitmap_desc.dpiX = desc->dpiX;
4199 bitmap_desc.dpiY = desc->dpiY;
4200
4201 if (bitmap_desc.dpiX == 0.0f && bitmap_desc.dpiY == 0.0f)
4202 {
4203 bitmap_desc.dpiX = 96.0f;
4204 bitmap_desc.dpiY = 96.0f;
4205 }
4206 else if (bitmap_desc.dpiX <= 0.0f || bitmap_desc.dpiY <= 0.0f)
4207 return E_INVALIDARG;
4208
4209 if (!(object = calloc(1, sizeof(*object))))
4210 return E_OUTOFMEMORY;
4211
4213 {
4214 WARN("Failed to initialise render target, hr %#lx.\n", hr);
4215 free(object);
4216 return hr;
4217 }
4218
4219 ID2D1DeviceContext6_SetDpi(&object->ID2D1DeviceContext6_iface, bitmap_desc.dpiX, bitmap_desc.dpiY);
4220
4221 if (surface)
4222 {
4223 bitmap_desc.pixelFormat = desc->pixelFormat;
4227 bitmap_desc.colorContext = NULL;
4228
4229 if (FAILED(hr = ID2D1DeviceContext6_CreateBitmapFromDxgiSurface(&object->ID2D1DeviceContext6_iface,
4230 surface, &bitmap_desc, &bitmap)))
4231 {
4232 WARN("Failed to create target bitmap, hr %#lx.\n", hr);
4233 IUnknown_Release(&object->IUnknown_iface);
4234 return hr;
4235 }
4236
4237 ID2D1DeviceContext6_SetTarget(&object->ID2D1DeviceContext6_iface, (ID2D1Image *)bitmap);
4238 ID2D1Bitmap1_Release(bitmap);
4239 }
4240 else
4241 object->desc.pixelFormat = desc->pixelFormat;
4242
4243 TRACE("Created render target %p.\n", object);
4244 *render_target = outer_unknown ? &object->IUnknown_iface : (IUnknown *)&object->ID2D1DeviceContext6_iface;
4245
4246 return S_OK;
4247}
@ D2D1_FEATURE_LEVEL_DEFAULT
Definition: d2d1.idl:269
@ D2D1_RENDER_TARGET_TYPE_DEFAULT
Definition: d2d1.idl:253
@ D2D1_RENDER_TARGET_TYPE_HARDWARE
Definition: d2d1.idl:255
@ D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE
Definition: d2d1.idl:263
@ D2D1_RENDER_TARGET_USAGE_NONE
Definition: d2d1.idl:261
static HRESULT d2d_device_context_init(struct d2d_device_context *render_target, struct d2d_device *device, IUnknown *outer_unknown, const struct d2d_device_context_ops *ops)
Definition: device.c:3457
ID2D1Image * object
Definition: d2d1_private.h:191
IUnknown * outer_unknown
Definition: d2d1_private.h:181
struct d2d_bitmap * bitmap
Definition: d2d1_private.h:195

Referenced by d2d_bitmap_render_target_init(), d2d_dc_render_target_init(), d2d_factory_CreateDxgiSurfaceRenderTarget(), d2d_hwnd_render_target_init(), and d2d_wic_render_target_init().

◆ d2d_dc_render_target_init()

HRESULT d2d_dc_render_target_init ( struct d2d_dc_render_target *  render_target,
ID2D1Factory1 *  factory,
ID3D10Device1 *  d3d_device,
const D2D1_RENDER_TARGET_PROPERTIES *  desc 
)

Definition at line 825 of file dc_render_target.c.

827{
828 IDXGIDevice *dxgi_device;
830 HRESULT hr;
831
833
834 /* Set with BindDC(). */
835 SetRectEmpty(&render_target->dst_rect);
836 render_target->hdc = NULL;
837
838 render_target->desc = *desc;
840
841 switch (desc->pixelFormat.format)
842 {
844 if (desc->pixelFormat.alphaMode == D2D1_ALPHA_MODE_PREMULTIPLIED
845 || desc->pixelFormat.alphaMode == D2D1_ALPHA_MODE_IGNORE)
846 break;
847
848 default:
849 FIXME("Unhandled format %#x, alpha mode %u.\n", desc->pixelFormat.format, desc->pixelFormat.alphaMode);
851 }
852
853 if (FAILED(hr = ID3D10Device1_QueryInterface(d3d_device, &IID_IDXGIDevice, (void **)&dxgi_device)))
854 {
855 WARN("Failed to get DXGI device interface, hr %#lx.\n", hr);
856 return hr;
857 }
858
859 hr = d2d_factory_create_device(factory, dxgi_device, false, &IID_ID2D1Device, (void **)&device);
860 IDXGIDevice_Release(dxgi_device);
861 if (FAILED(hr))
862 {
863 WARN("Failed to create D2D device, hr %#lx.\n", hr);
864 return hr;
865 }
866
869 desc, (void **)&render_target->dxgi_inner);
870 ID2D1Device_Release(device);
871 if (FAILED(hr))
872 {
873 WARN("Failed to create DXGI surface render target, hr %#lx.\n", hr);
874 return hr;
875 }
876
877 if (FAILED(hr = IUnknown_QueryInterface(render_target->dxgi_inner,
878 &IID_ID2D1RenderTarget, (void **)&render_target->dxgi_target)))
879 {
880 WARN("Failed to retrieve ID2D1RenderTarget interface, hr %#lx.\n", hr);
881 IUnknown_Release(render_target->dxgi_inner);
882 return hr;
883 }
884
885 render_target->d3d_device = d3d_device;
886 ID3D10Device1_AddRef(render_target->d3d_device);
887
888 return S_OK;
889}
struct d2d_device * unsafe_impl_from_ID2D1Device(ID2D1Device1 *iface)
Definition: device.c:4522
HRESULT d2d_factory_create_device(ID2D1Factory1 *factory, IDXGIDevice *dxgi_device, bool allow_get_dxgi_device, REFIID iid, void **device)
Definition: factory.c:516
static const struct ID2D1DCRenderTargetVtbl d2d_dc_render_target_vtbl
static const struct d2d_device_context_ops d2d_dc_render_target_ops
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
D2D1_RENDER_TARGET_PROPERTIES desc
Definition: d2d1_private.h:267
ID3D10Device1 * d3d_device
Definition: d2d1_private.h:260
ID2D1DCRenderTarget ID2D1DCRenderTarget_iface
Definition: d2d1_private.h:256
ID2D1RenderTarget * dxgi_target
Definition: d2d1_private.h:261

Referenced by d2d_factory_CreateDCRenderTarget().

◆ d2d_device_add_indexed_object()

HRESULT d2d_device_add_indexed_object ( struct d2d_indexed_objects *  objects,
const GUID *  id,
IUnknown *  object 
)

Definition at line 4542 of file device.c.

4544{
4545 if (!d2d_array_reserve((void **)&objects->elements, &objects->size, objects->count + 1,
4546 sizeof(*objects->elements)))
4547 {
4548 WARN("Failed to resize elements array.\n");
4549 return E_OUTOFMEMORY;
4550 }
4551
4552 objects->elements[objects->count].id = *id;
4553 objects->elements[objects->count].object = object;
4554 IUnknown_AddRef(object);
4555 objects->count++;
4556
4557 return S_OK;
4558}
static BOOL d2d_array_reserve(void **elements, size_t *capacity, size_t count, size_t size)
Definition: d2d1_private.h:897
GLuint id
Definition: glext.h:5910
static const CLSID * objects[]
Definition: apphelp.c:112

Referenced by d2d_effect_context_CreateVertexBuffer(), d2d_effect_context_LoadComputeShader(), d2d_effect_context_LoadPixelShader(), and d2d_effect_context_LoadVertexShader().

◆ d2d_device_context_is_dxgi_target()

static BOOL d2d_device_context_is_dxgi_target ( const struct d2d_device_context *  context)
inlinestatic

Definition at line 230 of file d2d1_private.h.

231{
232 return !context->ops;
233}

Referenced by d2d_bitmap_init().

◆ d2d_device_get_indexed_object()

BOOL d2d_device_get_indexed_object ( struct d2d_indexed_objects *  objects,
const GUID *  id,
IUnknown **  object 
)

Definition at line 4560 of file device.c.

4562{
4563 size_t i;
4564
4565 for (i = 0; i < objects->count; ++i)
4566 {
4567 if (IsEqualGUID(id, &objects->elements[i].id))
4568 {
4569 if (object)
4570 {
4571 *object = objects->elements[i].object;
4572 IUnknown_AddRef(*object);
4573 }
4574 return TRUE;
4575 }
4576 }
4577
4578 if (object) *object = NULL;
4579 return FALSE;
4580}

Referenced by d2d_effect_context_CreateVertexBuffer(), d2d_effect_context_FindVertexBuffer(), d2d_effect_context_IsShaderLoaded(), d2d_effect_context_LoadComputeShader(), d2d_effect_context_LoadPixelShader(), and d2d_effect_context_LoadVertexShader().

◆ d2d_device_indexed_objects_clear()

void d2d_device_indexed_objects_clear ( struct d2d_indexed_objects *  objects)

Definition at line 4284 of file device.c.

4285{
4286 size_t i;
4287
4288 for (i = 0; i < objects->count; ++i)
4289 IUnknown_Release(objects->elements[i].object);
4290 free(objects->elements);
4291 objects->elements = NULL;
4292}

Referenced by d2d_device_context_inner_Release(), and d2d_device_Release().

◆ d2d_device_init()

void d2d_device_init ( struct d2d_device *  device,
ID2D1Factory1 *  factory,
IDXGIDevice *  dxgi_device,
bool  allow_get_dxgi_device 
)

Definition at line 4530 of file device.c.

4532{
4533 device->ID2D1Device6_iface.lpVtbl = &d2d_device_vtbl;
4534 device->refcount = 1;
4535 device->factory = factory;
4536 ID2D1Factory1_AddRef(device->factory);
4537 device->dxgi_device = dxgi_device;
4538 IDXGIDevice_AddRef(device->dxgi_device);
4539 device->allow_get_dxgi_device = allow_get_dxgi_device;
4540}
static const struct ID2D1Device6Vtbl d2d_device_vtbl
Definition: device.c:4497

Referenced by d2d_factory_create_device().

◆ d2d_effect_context_init()

void d2d_effect_context_init ( struct d2d_effect_context *  effect_context,
struct d2d_device_context *  device_context 
)

Definition at line 1840 of file effect.c.

1841{
1842 effect_context->ID2D1EffectContext_iface.lpVtbl = &d2d_effect_context_vtbl;
1843 effect_context->refcount = 1;
1844 effect_context->device_context = device_context;
1845 ID2D1DeviceContext6_AddRef(&device_context->ID2D1DeviceContext6_iface);
1846}
static const ID2D1EffectContextVtbl d2d_effect_context_vtbl
Definition: effect.c:1812
ID2D1DeviceContext6 ID2D1DeviceContext6_iface
Definition: d2d1_private.h:175
ID2D1EffectContext ID2D1EffectContext_iface
Definition: d2d1_private.h:630
struct d2d_device_context * device_context
Definition: d2d1_private.h:633

Referenced by d2d_effect_create().

◆ d2d_effect_create()

HRESULT d2d_effect_create ( struct d2d_device_context *  context,
const CLSID *  effect_id,
ID2D1Effect **  effect 
)

Definition at line 2660 of file effect.c.

2662{
2663 struct d2d_effect_context *effect_context;
2664 const struct d2d_effect_registration *reg;
2665 struct d2d_effect *object;
2667 WCHAR clsidW[39];
2668 HRESULT hr;
2669
2671 {
2672 WARN("Effect id %s not found.\n", wine_dbgstr_guid(effect_id));
2674 }
2675
2676 if (!(effect_context = calloc(1, sizeof(*effect_context))))
2677 return E_OUTOFMEMORY;
2679
2680 if (!(object = calloc(1, sizeof(*object))))
2681 {
2682 ID2D1EffectContext_Release(&effect_context->ID2D1EffectContext_iface);
2683 return E_OUTOFMEMORY;
2684 }
2685
2686 object->ID2D1Effect_iface.lpVtbl = &d2d_effect_vtbl;
2687 object->ID2D1Image_iface.lpVtbl = &d2d_effect_image_vtbl;
2688 object->refcount = 1;
2689 object->effect_context = effect_context;
2690
2691 /* Create properties */
2692 d2d_effect_duplicate_properties(object, &object->properties, reg->properties);
2693
2694 StringFromGUID2(effect_id, clsidW, ARRAY_SIZE(clsidW));
2698
2699 /* Sync instance input count with default input count from the description. */
2702
2704 {
2705 ID2D1EffectContext_Release(&effect_context->ID2D1EffectContext_iface);
2706 return hr;
2707 }
2708
2709 if (FAILED(hr = reg->factory((IUnknown **)&object->impl)))
2710 {
2711 WARN("Failed to create implementation object, hr %#lx.\n", hr);
2712 ID2D1Effect_Release(&object->ID2D1Effect_iface);
2713 return hr;
2714 }
2715
2716 if (FAILED(hr = ID2D1EffectImpl_Initialize(object->impl, &effect_context->ID2D1EffectContext_iface,
2717 &object->graph->ID2D1TransformGraph_iface)))
2718 {
2719 WARN("Failed to initialize effect, hr %#lx.\n", hr);
2720 ID2D1Effect_Release(&object->ID2D1Effect_iface);
2721 return hr;
2722 }
2723
2725 {
2726 WARN("Failed to initialize graph nodes, hr %#lx.\n", hr);
2727 ID2D1Effect_Release(&object->ID2D1Effect_iface);
2728 return hr;
2729 }
2730
2731 *effect = &object->ID2D1Effect_iface;
2732
2733 TRACE("Created effect %p.\n", *effect);
2734
2735 return S_OK;
2736}
@ D2D1_PROPERTY_CLSID
Definition: d2d1_1.idl:189
@ D2D1_PROPERTY_CACHED
Definition: d2d1_1.idl:195
@ D2D1_PROPERTY_PRECISION
Definition: d2d1_1.idl:196
@ D2D1_PROPERTY_INPUTS
Definition: d2d1_1.idl:194
@ D2D1_PROPERTY_TYPE_CLSID
Definition: d2d1_1.idl:178
@ D2D1_PROPERTY_TYPE_ENUM
Definition: d2d1_1.idl:176
@ D2D1_PROPERTY_TYPE_BOOL
Definition: d2d1_1.idl:167
@ D2D1_PROPERTY_TYPE_ARRAY
Definition: d2d1_1.idl:177
struct d2d_effect_registration * d2d_factory_get_registered_effect(ID2D1Factory *factory, const GUID *effect_id)
Definition: factory.c:66
static HRESULT d2d_effect_get_value(struct d2d_effect *effect, UINT32 index, D2D1_PROPERTY_TYPE type, BYTE *value, UINT32 value_size)
Definition: effect.c:2007
void d2d_effect_context_init(struct d2d_effect_context *effect_context, struct d2d_device_context *device_context)
Definition: effect.c:1840
static HRESULT d2d_effect_set_input_count(struct d2d_effect *effect, UINT32 count)
Definition: effect.c:2057
static HRESULT d2d_effect_duplicate_properties(struct d2d_effect *effect, struct d2d_effect_properties *dst, const struct d2d_effect_properties *src)
Definition: effect.c:1293
static HRESULT d2d_effect_transform_graph_initialize_nodes(struct d2d_transform_graph *graph)
Definition: effect.c:2625
HRESULT d2d_effect_properties_add(struct d2d_effect_properties *props, const WCHAR *name, UINT32 index, D2D1_PROPERTY_TYPE type, const WCHAR *value)
Definition: effect.c:1281
static const ID2D1ImageVtbl d2d_effect_image_vtbl
Definition: effect.c:2214
static const ID2D1EffectVtbl d2d_effect_vtbl
Definition: effect.c:2150
static HRESULT d2d_transform_graph_create(UINT32 input_count, struct d2d_transform_graph **graph)
Definition: effect.c:916
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
Definition: combase.c:1525
#define L(x)
Definition: resources.c:13
static int reg
Definition: i386-dis.c:1290
short WCHAR
Definition: pedump.c:58
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:181
struct d2d_effect_context * effect_context
Definition: d2d1_private.h:795
size_t input_count
Definition: d2d1_private.h:799
#define D2DERR_EFFECT_IS_NOT_REGISTERED
Definition: winerror.h:7391

Referenced by d2d_device_context_CreateEffect().

◆ d2d_effect_init_properties()

void d2d_effect_init_properties ( struct d2d_effect *  effect,
struct d2d_effect_properties *  properties 
)

Definition at line 2440 of file effect.c.

2442{
2444 properties->effect = effect;
2445 properties->refcount = 1;
2446}
static const ID2D1PropertiesVtbl d2d_effect_properties_vtbl
Definition: effect.c:2422
ID2D1Properties ID2D1Properties_iface
Definition: d2d1_private.h:658
struct d2d_effect * effect
Definition: d2d1_private.h:660

Referenced by d2d_factory_register_effect_from_stream(), and parse_effect_inputs().

◆ d2d_effect_properties_add()

HRESULT d2d_effect_properties_add ( struct d2d_effect_properties *  props,
const WCHAR *  name,
UINT32  index,
D2D1_PROPERTY_TYPE  type,
const WCHAR *  value 
)

Definition at line 1281 of file effect.c.

1283{
1285}
static HRESULT d2d_effect_properties_internal_add(struct d2d_effect_properties *props, const WCHAR *name, UINT32 index, BOOL subprop, D2D1_PROPERTY_TYPE type, const WCHAR *value)
Definition: effect.c:1146
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint index
Definition: glext.h:6031
Definition: name.c:39
Definition: pdh_main.c:64
static const WCHAR props[]
Definition: wbemdisp.c:288

Referenced by d2d_effect_create(), parse_effect_inputs(), and parse_effect_property().

◆ d2d_effect_properties_cleanup()

void d2d_effect_properties_cleanup ( struct d2d_effect_properties *  props)

Definition at line 1457 of file effect.c.

1458{
1459 struct d2d_effect_property *p;
1460 size_t i;
1461
1462 for (i = 0; i < props->count; ++i)
1463 {
1464 p = &props->properties[i];
1465 free(p->name);
1466 if (p->type == D2D1_PROPERTY_TYPE_STRING)
1467 free(p->data.ptr);
1468 if (p->subproperties)
1469 {
1470 d2d_effect_properties_cleanup(p->subproperties);
1471 free(p->subproperties);
1472 }
1473 }
1474 free(props->properties);
1475 free(props->data.ptr);
1476}
@ D2D1_PROPERTY_TYPE_STRING
Definition: d2d1_1.idl:166
void d2d_effect_properties_cleanup(struct d2d_effect_properties *props)
Definition: effect.c:1457
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by d2d_effect_cleanup(), d2d_effect_properties_cleanup(), and d2d_effect_properties_Release().

◆ d2d_effect_properties_get_property_by_name()

struct d2d_effect_property * d2d_effect_properties_get_property_by_name ( const struct d2d_effect_properties *  properties,
const WCHAR *  name 
)

Definition at line 1345 of file effect.c.

1347{
1348 unsigned int i;
1349
1350 for (i = 0; i < properties->count; ++i)
1351 {
1352 if (!wcscmp(properties->properties[i].name, name))
1353 return &properties->properties[i];
1354 }
1355
1356 return NULL;
1357}
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
struct d2d_effect_property * properties
Definition: d2d1_private.h:662

Referenced by d2d_effect_properties_GetPropertyIndex(), d2d_effect_properties_GetValueByName(), d2d_effect_properties_SetValueByName(), and parse_effect_inputs().

◆ d2d_effect_property_get_uint32_value()

HRESULT d2d_effect_property_get_uint32_value ( const struct d2d_effect_properties *  properties,
const struct d2d_effect_property *  prop,
UINT32 *  value 
)

Definition at line 1422 of file effect.c.

1424{
1426 (BYTE *)value, sizeof(*value));
1427}
@ D2D1_PROPERTY_TYPE_UINT32
Definition: d2d1_1.idl:168
static HRESULT d2d_effect_property_get_value(const struct d2d_effect_properties *properties, const struct d2d_effect_property *prop, D2D1_PROPERTY_TYPE type, BYTE *value, UINT32 size)
Definition: effect.c:1387

Referenced by parse_effect_inputs().

◆ d2d_effect_subproperties_add()

HRESULT d2d_effect_subproperties_add ( struct d2d_effect_properties *  props,
const WCHAR *  name,
UINT32  index,
D2D1_PROPERTY_TYPE  type,
const WCHAR *  value 
)

Definition at line 1287 of file effect.c.

Referenced by parse_effect_inputs().

◆ d2d_effects_init_builtins()

void d2d_effects_init_builtins ( struct d2d_factory *  factory)

Definition at line 1074 of file effect.c.

1075{
1076 static const struct builtin_description
1077 {
1078 const CLSID *clsid;
1079 const WCHAR *description;
1080 }
1081 builtin_effects[] =
1082 {
1083 { &CLSID_D2D12DAffineTransform, _2d_affine_transform_description },
1084 { &CLSID_D2D13DPerspectiveTransform, _3d_perspective_transform_description},
1085 { &CLSID_D2D1Composite, composite_description },
1086 { &CLSID_D2D1Crop, crop_description },
1087 { &CLSID_D2D1Shadow, shadow_description },
1088 { &CLSID_D2D1Grayscale, grayscale_description },
1089 };
1090 unsigned int i;
1091 HRESULT hr;
1092
1093 for (i = 0; i < ARRAY_SIZE(builtin_effects); ++i)
1094 {
1095 if (FAILED(hr = d2d_factory_register_builtin_effect(factory, builtin_effects[i].clsid, builtin_effects[i].description,
1097 {
1098 WARN("Failed to register the effect %s, hr %#lx.\n", wine_dbgstr_guid(builtin_effects[i].clsid), hr);
1099 }
1100 }
1101}
HRESULT d2d_factory_register_builtin_effect(struct d2d_factory *factory, REFCLSID effect_id, const WCHAR *property_xml, const D2D1_PROPERTY_BINDING *bindings, UINT32 binding_count, PD2D1_EFFECT_FACTORY effect_factory)
Definition: factory.c:1081
void * description
static const WCHAR _2d_affine_transform_description[]
Definition: effect.c:1000
static const WCHAR _3d_perspective_transform_description[]
Definition: effect.c:1012
static const WCHAR grayscale_description[]
Definition: effect.c:1062
static const WCHAR shadow_description[]
Definition: effect.c:1050
static HRESULT STDMETHODCALLTYPE builtin_factory_stub(IUnknown **effect_impl)
Definition: effect.c:991
static const WCHAR composite_description[]
Definition: effect.c:1024
static const WCHAR crop_description[]
Definition: effect.c:1037
const CLSID * clsid
Definition: msctf.cpp:50

Referenced by d2d_factory_builtins_initonce().

◆ d2d_ellipse_geometry_init()

HRESULT d2d_ellipse_geometry_init ( struct d2d_geometry *  geometry,
ID2D1Factory *  factory,
const D2D1_ELLIPSE *  ellipse 
)

Definition at line 4185 of file geometry.c.

4186{
4187 D2D1_POINT_2F *v, v1, v2, v3, v4;
4188 struct d2d_face *f;
4189 float l, r, t, b;
4190
4191 d2d_geometry_init(geometry, factory, &identity, (ID2D1GeometryVtbl *)&d2d_ellipse_geometry_vtbl);
4192 geometry->u.ellipse.ellipse = *ellipse;
4193
4194 if (!(geometry->fill.vertices = malloc(4 * sizeof(*geometry->fill.vertices))))
4195 goto fail;
4196 if (!d2d_array_reserve((void **)&geometry->fill.faces,
4197 &geometry->fill.faces_size, 2, sizeof(*geometry->fill.faces)))
4198 goto fail;
4199
4200 l = ellipse->point.x - ellipse->radiusX;
4201 r = ellipse->point.x + ellipse->radiusX;
4202 t = ellipse->point.y - ellipse->radiusY;
4203 b = ellipse->point.y + ellipse->radiusY;
4204
4205 d2d_point_set(&v1, r, t);
4206 d2d_point_set(&v2, r, b);
4207 d2d_point_set(&v3, l, b);
4208 d2d_point_set(&v4, l, t);
4209
4210 v = geometry->fill.vertices;
4211 d2d_point_set(&v[0], ellipse->point.x, t);
4212 d2d_point_set(&v[1], r, ellipse->point.y);
4213 d2d_point_set(&v[2], ellipse->point.x, b);
4214 d2d_point_set(&v[3], l, ellipse->point.y);
4215 geometry->fill.vertex_count = 4;
4216
4217 f = geometry->fill.faces;
4218 d2d_face_set(&f[0], 0, 3, 2);
4219 d2d_face_set(&f[1], 0, 2, 1);
4220 geometry->fill.face_count = 2;
4221
4222 if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[0], &v1, &v[1]))
4223 goto fail;
4224 if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[1], &v2, &v[2]))
4225 goto fail;
4226 if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[2], &v3, &v[3]))
4227 goto fail;
4228 if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[3], &v4, &v[0]))
4229 goto fail;
4230
4231 if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[0], &v1, &v[1]))
4232 goto fail;
4233 if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[1], &v2, &v[2]))
4234 goto fail;
4235 if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[2], &v3, &v[3]))
4236 goto fail;
4237 if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[3], &v4, &v[0]))
4238 goto fail;
4239
4240 return S_OK;
4241
4242fail:
4243 d2d_geometry_cleanup(geometry);
4244 return E_OUTOFMEMORY;
4245}
r l[0]
Definition: byte_order.h:168
#define malloc
Definition: debug_ros.c:4
static void d2d_geometry_cleanup(struct d2d_geometry *geometry)
Definition: geometry.c:2719
static const struct ID2D1EllipseGeometryVtbl d2d_ellipse_geometry_vtbl
Definition: geometry.c:4163
static void d2d_geometry_init(struct d2d_geometry *geometry, ID2D1Factory *factory, const D2D1_MATRIX_3X2_F *transform, const struct ID2D1GeometryVtbl *vtbl)
Definition: geometry.c:2734
static void d2d_face_set(struct d2d_face *f, UINT16 v0, UINT16 v1, UINT16 v2)
Definition: geometry.c:143
static BOOL d2d_geometry_outline_add_arc_quadrant(struct d2d_geometry *geometry, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_POINT_2F *p2)
Definition: geometry.c:2558
static BOOL d2d_geometry_fill_add_arc_triangle(struct d2d_geometry *geometry, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *p1, const D2D1_POINT_2F *p2)
Definition: geometry.c:2701
const GLdouble * v
Definition: gl.h:2040
GLfloat f
Definition: glext.h:7540
GLfloat GLfloat GLfloat GLfloat v3
Definition: glext.h:6064
GLfloat GLfloat v1
Definition: glext.h:6062
GLfloat GLfloat GLfloat v2
Definition: glext.h:6063
#define f
Definition: ke_i.h:83
float radiusY
Definition: d2d1.idl:327
D2D1_POINT_2F point
Definition: d2d1.idl:325
float radiusX
Definition: d2d1.idl:326
union d2d_geometry::@243 u
D2D1_ELLIPSE ellipse
Definition: d2d1_private.h:559
struct d2d_geometry::@241 fill

Referenced by d2d_factory_CreateEllipseGeometry().

◆ d2d_factory_create_device()

HRESULT d2d_factory_create_device ( ID2D1Factory1 *  factory,
IDXGIDevice *  dxgi_device,
bool  allow_get_dxgi_device,
REFIID  iid,
void **  device 
)

Definition at line 516 of file factory.c.

518{
519 struct d2d_device *object;
520 HRESULT hr;
521
522 if (!(object = calloc(1, sizeof(*object))))
523 return E_OUTOFMEMORY;
524
526
527 TRACE("Create device %p.\n", object);
528
529 hr = ID2D1Device6_QueryInterface(&object->ID2D1Device6_iface, iid, device);
530 ID2D1Device6_Release(&object->ID2D1Device6_iface);
531
532 return hr;
533}
void d2d_device_init(struct d2d_device *device, ID2D1Factory1 *factory, IDXGIDevice *dxgi_device, bool allow_get_dxgi_device)
Definition: device.c:4530
bool allow_get_dxgi_device
Definition: d2d1_private.h:616

Referenced by d2d_dc_render_target_init(), d2d_factory_CreateDevice(), d2d_factory_ID2D1Factory2_CreateDevice(), d2d_factory_ID2D1Factory3_CreateDevice(), d2d_factory_ID2D1Factory4_CreateDevice(), d2d_factory_ID2D1Factory5_CreateDevice(), d2d_factory_ID2D1Factory6_CreateDevice(), d2d_factory_ID2D1Factory7_CreateDevice(), d2d_hwnd_render_target_init(), and d2d_wic_render_target_init().

◆ d2d_factory_get_registered_effect()

struct d2d_effect_registration * d2d_factory_get_registered_effect ( ID2D1Factory *  factory,
const GUID *  effect_id 
)

Definition at line 66 of file factory.c.

68{
71
73
75 {
76 if (IsEqualGUID(id, &reg->id)) return reg;
77 }
78
79 return NULL;
80}
static struct d2d_factory * unsafe_impl_from_ID2D1Factory(ID2D1Factory *iface)
Definition: d2d1_private.h:704
static void d2d_factory_init_builtin_effects(struct d2d_factory *factory)
Definition: factory.c:56
uint32_t entry
Definition: isohybrid.c:63
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:236

Referenced by d2d_effect_create(), and d2d_factory_GetEffectProperties().

◆ d2d_factory_register_builtin_effect()

HRESULT d2d_factory_register_builtin_effect ( struct d2d_factory *  factory,
REFCLSID  effect_id,
const WCHAR *  property_xml,
const D2D1_PROPERTY_BINDING *  bindings,
UINT32  binding_count,
PD2D1_EFFECT_FACTORY  effect_factory 
)

Definition at line 1081 of file factory.c.

1084{
1085 return d2d_factory_register_effect_from_string(factory, effect_id, property_xml, bindings,
1086 binding_count, effect_factory, TRUE);
1087}
static HRESULT d2d_factory_register_effect_from_string(struct d2d_factory *factory, REFCLSID effect_id, const WCHAR *property_xml, const D2D1_PROPERTY_BINDING *bindings, UINT32 binding_count, PD2D1_EFFECT_FACTORY effect_factory, BOOL builtin)
Definition: factory.c:1057

Referenced by d2d_effects_init_builtins().

◆ d2d_factory_register_effect()

void d2d_factory_register_effect ( struct d2d_factory *  factory,
struct d2d_effect_registration *  effect 
)

Definition at line 61 of file factory.c.

62{
63 list_add_tail(&factory->effects, &effect->entry);
64}
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83

Referenced by d2d_factory_register_effect_from_stream().

◆ d2d_geometry_group_init()

HRESULT d2d_geometry_group_init ( struct d2d_geometry *  geometry,
ID2D1Factory *  factory,
D2D1_FILL_MODE  fill_mode,
ID2D1Geometry **  src_geometries,
unsigned int  geometry_count 
)

Definition at line 5497 of file geometry.c.

5499{
5500 unsigned int i;
5501
5502 d2d_geometry_init(geometry, factory, &identity, (ID2D1GeometryVtbl *)&d2d_geometry_group_vtbl);
5503
5504 if (!(geometry->u.group.src_geometries = calloc(geometry_count, sizeof(*geometries))))
5505 {
5506 d2d_geometry_cleanup(geometry);
5507 return E_OUTOFMEMORY;
5508 }
5509
5510 for (i = 0; i < geometry_count; ++i)
5511 {
5512 ID2D1Geometry_AddRef(geometry->u.group.src_geometries[i] = geometries[i]);
5513 }
5514 geometry->u.group.geometry_count = geometry_count;
5515 geometry->u.group.fill_mode = fill_mode;
5516
5517 return S_OK;
5518}
static const struct ID2D1GeometryGroupVtbl d2d_geometry_group_vtbl
Definition: geometry.c:5473
struct d2d_geometry::@243::@249 group

Referenced by d2d_factory_CreateGeometryGroup().

◆ 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().

◆ d2d_gradient_create()

HRESULT d2d_gradient_create ( ID2D1Factory *  factory,
ID3D11Device1 *  device,
const D2D1_GRADIENT_STOP *  stops,
UINT32  stop_count,
D2D1_GAMMA  gamma,
D2D1_EXTEND_MODE  extend_mode,
struct d2d_gradient **  gradient 
)

Definition at line 130 of file brush.c.

132{
133 D3D11_SHADER_RESOURCE_VIEW_DESC srv_desc;
134 D3D11_SUBRESOURCE_DATA buffer_data;
135 ID3D11ShaderResourceView *view;
136 struct d2d_gradient *gradient;
137 D3D11_BUFFER_DESC buffer_desc;
138 struct d2d_vec4 *data;
139 ID3D11Buffer *buffer;
140 unsigned int i;
141 HRESULT hr;
142
143 *out = NULL;
144 if (!(data = calloc(stop_count, 2 * sizeof(*data))))
145 {
146 ERR("Failed to allocate data.\n");
147 return E_OUTOFMEMORY;
148 }
149
150 for (i = 0; i < stop_count; ++i)
151 {
152 data[i * 2].x = stops[i].position;
153 data[i * 2 + 1].x = stops[i].color.r;
154 data[i * 2 + 1].y = stops[i].color.g;
155 data[i * 2 + 1].z = stops[i].color.b;
156 data[i * 2 + 1].w = stops[i].color.a;
157 }
158
159 buffer_desc.ByteWidth = 2 * stop_count * sizeof(*data);
160 buffer_desc.Usage = D3D11_USAGE_DEFAULT;
161 buffer_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
162 buffer_desc.CPUAccessFlags = 0;
163 buffer_desc.MiscFlags = 0;
164
165 buffer_data.pSysMem = data;
166 buffer_data.SysMemPitch = 0;
167 buffer_data.SysMemSlicePitch = 0;
168
169 hr = ID3D11Device1_CreateBuffer(device, &buffer_desc, &buffer_data, &buffer);
170 free(data);
171 if (FAILED(hr))
172 {
173 ERR("Failed to create buffer, hr %#lx.\n", hr);
174 return hr;
175 }
176
177 srv_desc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
178 srv_desc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
179 srv_desc.Buffer.ElementOffset = 0;
180 srv_desc.Buffer.ElementWidth = 2 * stop_count;
181
182 hr = ID3D11Device1_CreateShaderResourceView(device, (ID3D11Resource *)buffer, &srv_desc, &view);
183 ID3D11Buffer_Release(buffer);
184 if (FAILED(hr))
185 {
186 ERR("Failed to create view, hr %#lx.\n", hr);
187 return hr;
188 }
189
190 if (!(gradient = calloc(1, sizeof(*gradient))))
191 {
192 ID3D11ShaderResourceView_Release(view);
193 return E_OUTOFMEMORY;
194 }
195
196 if (gamma != D2D1_GAMMA_2_2)
197 FIXME("Ignoring gamma %#x.\n", gamma);
198 if (extend_mode != D2D1_EXTEND_MODE_CLAMP)
199 FIXME("Ignoring extend mode %#x.\n", extend_mode);
200
202 gradient->refcount = 1;
203 ID2D1Factory_AddRef(gradient->factory = factory);
204 gradient->view = view;
205
206 gradient->stop_count = stop_count;
207 if (!(gradient->stops = calloc(stop_count, sizeof(*stops))))
208 {
209 ID3D11ShaderResourceView_Release(view);
210 free(gradient);
211 return E_OUTOFMEMORY;
212 }
213 memcpy(gradient->stops, stops, stop_count * sizeof(*stops));
214
215 TRACE("Created gradient %p.\n", gradient);
216 *out = gradient;
217 return S_OK;
218}
@ D2D1_GAMMA_2_2
Definition: d2d1.idl:214
@ D3D11_SRV_DIMENSION_BUFFER
Definition: d3dcommon.idl:583
static const struct ID2D1GradientStopCollectionVtbl d2d_gradient_vtbl
Definition: brush.c:118
@ DXGI_FORMAT_R32G32B32A32_FLOAT
Definition: dxgiformat.idl:25
GLuint buffer
Definition: glext.h:5915
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
D2D1_COLOR_F color
Definition: d2d1.idl:357
D2D1_GRADIENT_STOP * stops
Definition: d2d1_private.h:313
ID2D1GradientStopCollection ID2D1GradientStopCollection_iface
Definition: d2d1_private.h:308
ID3D11ShaderResourceView * view
Definition: d2d1_private.h:312
ID2D1Factory * factory
Definition: d2d1_private.h:311
UINT32 stop_count
Definition: d2d1_private.h:314
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Referenced by d2d_device_context_CreateGradientStopCollection().

◆ d2d_hwnd_render_target_init()

HRESULT d2d_hwnd_render_target_init ( struct d2d_hwnd_render_target *  render_target,
ID2D1Factory1 *  factory,
ID3D10Device1 *  d3d_device,
const D2D1_RENDER_TARGET_PROPERTIES *  desc,
const D2D1_HWND_RENDER_TARGET_PROPERTIES *  hwnd_desc 
)

Definition at line 813 of file hwnd_render_target.c.

816{
818 DXGI_SWAP_CHAIN_DESC swapchain_desc;
821 IDXGISurface *dxgi_surface;
822 IDXGIDevice *dxgi_device;
824 HRESULT hr;
825
826 if (!IsWindow(hwnd_rt_desc->hwnd))
828
830 render_target->hwnd = hwnd_rt_desc->hwnd;
831 render_target->sync_interval = hwnd_rt_desc->presentOptions & D2D1_PRESENT_OPTIONS_IMMEDIATELY ? 0 : 1;
832
833 if (FAILED(hr = ID3D10Device1_QueryInterface(d3d_device, &IID_IDXGIDevice, (void **)&dxgi_device)))
834 {
835 WARN("Failed to get IDXGIDevice interface, hr %#lx.\n", hr);
836 return hr;
837 }
838
839 hr = IDXGIDevice_GetAdapter(dxgi_device, &dxgi_adapter);
840 IDXGIDevice_Release(dxgi_device);
841 if (FAILED(hr))
842 {
843 WARN("Failed to get IDXGIAdapter interface, hr %#lx.\n", hr);
844 return hr;
845 }
846
847 hr = IDXGIAdapter_GetParent(dxgi_adapter, &IID_IDXGIFactory, (void **)&dxgi_factory);
848 IDXGIAdapter_Release(dxgi_adapter);
849 if (FAILED(hr))
850 {
851 WARN("Failed to get IDXGIFactory interface, hr %#lx.\n", hr);
852 return hr;
853 }
854
855 dxgi_rt_desc = *desc;
856 if (dxgi_rt_desc.dpiX == 0.0f && dxgi_rt_desc.dpiY == 0.0f)
857 ID2D1Factory1_GetDesktopDpi(factory, &dxgi_rt_desc.dpiX, &dxgi_rt_desc.dpiY);
858
859 if (dxgi_rt_desc.pixelFormat.format == DXGI_FORMAT_UNKNOWN)
861
862 if (dxgi_rt_desc.pixelFormat.alphaMode == D2D1_ALPHA_MODE_UNKNOWN)
863 dxgi_rt_desc.pixelFormat.alphaMode = D2D1_ALPHA_MODE_IGNORE;
864
865 if (dxgi_rt_desc.pixelFormat.alphaMode == D2D1_ALPHA_MODE_STRAIGHT)
866 {
867 IDXGIFactory_Release(dxgi_factory);
868 WARN("Alpha mode %u is not supported.\n", dxgi_rt_desc.pixelFormat.alphaMode);
870 }
871
872 render_target->desc = dxgi_rt_desc;
873 /* FIXME: should be resolved to either HW or SW type. */
874 if (render_target->desc.type == D2D1_RENDER_TARGET_TYPE_DEFAULT)
876
877 swapchain_desc.BufferDesc.Width = hwnd_rt_desc->pixelSize.width;
878 swapchain_desc.BufferDesc.Height = hwnd_rt_desc->pixelSize.height;
879 swapchain_desc.BufferDesc.RefreshRate.Numerator = 60;
880 swapchain_desc.BufferDesc.RefreshRate.Denominator = 1;
881 swapchain_desc.BufferDesc.Format = dxgi_rt_desc.pixelFormat.format;
884 swapchain_desc.SampleDesc.Count = 1;
885 swapchain_desc.SampleDesc.Quality = 0;
887 swapchain_desc.BufferCount = 1;
888 swapchain_desc.OutputWindow = hwnd_rt_desc->hwnd;
889 swapchain_desc.Windowed = TRUE;
890 swapchain_desc.SwapEffect = hwnd_rt_desc->presentOptions & D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS ?
892 swapchain_desc.Flags = 0;
895
896 hr = IDXGIFactory_CreateSwapChain(dxgi_factory, (IUnknown *)d3d_device, &swapchain_desc, &render_target->swapchain);
897 IDXGIFactory_Release(dxgi_factory);
898 if (FAILED(hr))
899 {
900 WARN("Failed to create a swapchain, hr %#lx.\n", hr);
901 return hr;
902 }
903
904 if (FAILED(hr = IDXGISwapChain_GetBuffer(render_target->swapchain, 0, &IID_IDXGISurface, (void **)&dxgi_surface)))
905 {
906 WARN("Failed to get buffer, hr %#lx.\n", hr);
907 IDXGISwapChain_Release(render_target->swapchain);
908 return hr;
909 }
910
912
913 if (FAILED(hr = IDXGISurface_GetDevice(dxgi_surface, &IID_IDXGIDevice, (void **)&dxgi_device)))
914 {
915 WARN("Failed to get DXGI device, hr %#lx.\n", hr);
916 IDXGISurface_Release(dxgi_surface);
917 IDXGISwapChain_Release(render_target->swapchain);
918 return hr;
919 }
920
921 hr = d2d_factory_create_device(factory, dxgi_device, false, &IID_ID2D1Device, (void **)&device);
922 IDXGIDevice_Release(dxgi_device);
923 if (FAILED(hr))
924 {
925 WARN("Failed to create D2D device, hr %#lx.\n", hr);
926 IDXGISurface_Release(dxgi_surface);
927 IDXGISwapChain_Release(render_target->swapchain);
928 return hr;
929 }
930
933 &dxgi_rt_desc, (void **)&render_target->dxgi_inner);
934 IDXGISurface_Release(dxgi_surface);
935 ID2D1Device_Release(device);
936 if (FAILED(hr))
937 {
938 WARN("Failed to create DXGI surface render target, hr %#lx.\n", hr);
939 IDXGISwapChain_Release(render_target->swapchain);
940 return hr;
941 }
942
943 if (FAILED(hr = IUnknown_QueryInterface(render_target->dxgi_inner,
944 &IID_ID2D1RenderTarget, (void **)&render_target->dxgi_target)))
945 {
946 WARN("Failed to retrieve ID2D1RenderTarget interface, hr %#lx.\n", hr);
947 IUnknown_Release(render_target->dxgi_inner);
948 IDXGISwapChain_Release(render_target->swapchain);
949 return hr;
950 }
951
952 return S_OK;
953}
@ D2D1_PRESENT_OPTIONS_IMMEDIATELY
Definition: d2d1.idl:293
@ D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS
Definition: d2d1.idl:292
@ DXGI_SWAP_EFFECT_SEQUENTIAL
Definition: dxgi.idl:66
@ DXGI_SWAP_EFFECT_DISCARD
Definition: dxgi.idl:65
@ DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE
Definition: dxgi.idl:121
const DXGI_USAGE DXGI_USAGE_RENDER_TARGET_OUTPUT
Definition: dxgi.idl:44
@ DXGI_MODE_SCALING_UNSPECIFIED
Definition: dxgitype.idl:46
@ DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED
Definition: dxgitype.idl:38
static const struct ID2D1HwndRenderTargetVtbl d2d_hwnd_render_target_vtbl
static const struct d2d_device_context_ops d2d_hwnd_render_target_ops
BOOL WINAPI IsWindow(_In_opt_ HWND)
DXGI_FORMAT Format
Definition: dxgitype.idl:68
DXGI_MODE_SCANLINE_ORDER ScanlineOrdering
Definition: dxgitype.idl:69
DXGI_MODE_SCALING Scaling
Definition: dxgitype.idl:70
DXGI_RATIONAL RefreshRate
Definition: dxgitype.idl:67
DXGI_SWAP_EFFECT SwapEffect
Definition: dxgi.idl:141
DXGI_SAMPLE_DESC SampleDesc
Definition: dxgi.idl:136
DXGI_MODE_DESC BufferDesc
Definition: dxgi.idl:135
DXGI_USAGE BufferUsage
Definition: dxgi.idl:137
ID2D1RenderTarget * dxgi_target
Definition: d2d1_private.h:278
ID2D1HwndRenderTarget ID2D1HwndRenderTarget_iface
Definition: d2d1_private.h:275
D2D1_RENDER_TARGET_PROPERTIES desc
Definition: d2d1_private.h:284
IDXGISwapChain * swapchain
Definition: d2d1_private.h:280
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define ERROR_INVALID_WINDOW_HANDLE
Definition: winerror.h:1226

Referenced by d2d_factory_CreateHwndRenderTarget().

◆ d2d_image_brush_create()

HRESULT d2d_image_brush_create ( ID2D1Factory *  factory,
ID2D1Image *  image,
const D2D1_IMAGE_BRUSH_PROPERTIES *  image_brush_desc,
const D2D1_BRUSH_PROPERTIES *  brush_desc,
struct d2d_brush **  brush 
)

Definition at line 1323 of file brush.c.

1326{
1327 if (!(*brush = calloc(1, sizeof(**brush))))
1328 return E_OUTOFMEMORY;
1329
1331 brush_desc, (ID2D1BrushVtbl *)&d2d_image_brush_vtbl);
1332 if (((*brush)->u.image.image = image))
1333 ID2D1Image_AddRef((*brush)->u.image.image);
1334
1335 (*brush)->u.image.source_rect = image_brush_desc->sourceRectangle;
1336 (*brush)->u.image.extend_mode_x = image_brush_desc->extendModeX;
1337 (*brush)->u.image.extend_mode_y = image_brush_desc->extendModeY;
1338 (*brush)->u.image.interpolation_mode = image_brush_desc->interpolationMode;
1339
1340 TRACE("Created brush %p.\n", *brush);
1341 return S_OK;
1342}
static const struct ID2D1ImageBrushVtbl d2d_image_brush_vtbl
Definition: brush.c:1301
D2D1_INTERPOLATION_MODE interpolationMode
Definition: d2d1_1.idl:278
D2D1_EXTEND_MODE extendModeX
Definition: d2d1_1.idl:276
D2D1_EXTEND_MODE extendModeY
Definition: d2d1_1.idl:277
D2D1_RECT_F sourceRectangle
Definition: d2d1_1.idl:275

Referenced by d2d_device_context_CreateImageBrush().

◆ d2d_layer_create()

HRESULT d2d_layer_create ( ID2D1Factory *  factory,
const D2D1_SIZE_F *  size,
struct d2d_layer **  layer 
)

Definition at line 101 of file layer.c.

102{
103 if (!(*layer = calloc(1, sizeof(**layer))))
104 return E_OUTOFMEMORY;
105
106 (*layer)->ID2D1Layer_iface.lpVtbl = &d2d_layer_vtbl;
107 (*layer)->refcount = 1;
108 ID2D1Factory_AddRef((*layer)->factory = factory);
109 if (size)
110 (*layer)->size = *size;
111
112 TRACE("Created layer %p.\n", *layer);
113
114 return S_OK;
115}
static const struct ID2D1LayerVtbl d2d_layer_vtbl
Definition: layer.c:92

Referenced by d2d_device_context_CreateLayer().

◆ d2d_linear_gradient_brush_create()

HRESULT d2d_linear_gradient_brush_create ( ID2D1Factory *  factory,
const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *  gradient_desc,
const D2D1_BRUSH_PROPERTIES *  brush_desc,
ID2D1GradientStopCollection *  gradient,
struct d2d_brush **  brush 
)

Definition at line 572 of file brush.c.

575{
576 if (!(*brush = calloc(1, sizeof(**brush))))
577 return E_OUTOFMEMORY;
578
579 d2d_brush_init(*brush, factory, D2D_BRUSH_TYPE_LINEAR, brush_desc,
580 (ID2D1BrushVtbl *)&d2d_linear_gradient_brush_vtbl);
581 (*brush)->u.linear.gradient = unsafe_impl_from_ID2D1GradientStopCollection(gradient);
582 ID2D1GradientStopCollection_AddRef(&(*brush)->u.linear.gradient->ID2D1GradientStopCollection_iface);
583 (*brush)->u.linear.start = gradient_brush_desc->startPoint;
584 (*brush)->u.linear.end = gradient_brush_desc->endPoint;
585
586 TRACE("Created brush %p.\n", *brush);
587 return S_OK;
588}
static const struct ID2D1LinearGradientBrushVtbl d2d_linear_gradient_brush_vtbl
Definition: brush.c:555
static struct d2d_gradient * unsafe_impl_from_ID2D1GradientStopCollection(ID2D1GradientStopCollection *iface)
Definition: brush.c:220

Referenced by d2d_device_context_CreateLinearGradientBrush().

◆ d2d_matrix_invert()

static BOOL d2d_matrix_invert ( D2D_MATRIX_3X2_F *  dst,
const D2D_MATRIX_3X2_F *  src 
)
inlinestatic

Definition at line 936 of file d2d1_private.h.

937{
938 float d = src->_11 * src->_22 - src->_21 * src->_12;
939
940 if (d == 0.0f)
941 return FALSE;
942 dst->_11 = src->_22 / d;
943 dst->_21 = -src->_21 / d;
944 dst->_31 = (src->_21 * src->_32 - src->_31 * src->_22) / d;
945 dst->_12 = -src->_12 / d;
946 dst->_22 = src->_11 / d;
947 dst->_32 = -(src->_11 * src->_32 - src->_31 * src->_12) / d;
948
949 return TRUE;
950}
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340

Referenced by D2D1InvertMatrix(), d2d_path_geometry_FillContainsPoint(), and d2d_rectangle_geometry_FillContainsPoint().

◆ d2d_matrix_multiply()

static void d2d_matrix_multiply ( D2D_MATRIX_3X2_F *  a,
const D2D_MATRIX_3X2_F *  b 
)
inlinestatic

Definition at line 923 of file d2d1_private.h.

924{
925 D2D_MATRIX_3X2_F tmp = *a;
926
927 a->_11 = tmp._11 * b->_11 + tmp._12 * b->_21;
928 a->_12 = tmp._11 * b->_12 + tmp._12 * b->_22;
929 a->_21 = tmp._21 * b->_11 + tmp._22 * b->_21;
930 a->_22 = tmp._21 * b->_12 + tmp._22 * b->_22;
931 a->_31 = tmp._31 * b->_11 + tmp._32 * b->_21 + b->_31;
932 a->_32 = tmp._31 * b->_12 + tmp._32 * b->_22 + b->_32;
933}
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
#define a
Definition: ke_i.h:78

Referenced by d2d_transformed_geometry_FillContainsPoint(), d2d_transformed_geometry_GetBounds(), d2d_transformed_geometry_init(), d2d_transformed_geometry_Simplify(), and d2d_transformed_geometry_StrokeContainsPoint().

◆ d2d_mesh_create()

HRESULT d2d_mesh_create ( ID2D1Factory *  factory,
struct d2d_mesh **  mesh 
)

Definition at line 98 of file mesh.c.

99{
100 if (!(*mesh = calloc(1, sizeof(**mesh))))
101 return E_OUTOFMEMORY;
102
103 (*mesh)->ID2D1Mesh_iface.lpVtbl = &d2d_mesh_vtbl;
104 (*mesh)->refcount = 1;
105 ID2D1Factory_AddRef((*mesh)->factory = factory);
106
107 TRACE("Created mesh %p.\n", *mesh);
108 return S_OK;
109}
static const struct ID2D1MeshVtbl d2d_mesh_vtbl
Definition: mesh.c:89

Referenced by d2d_device_context_CreateMesh().

◆ d2d_path_geometry_init()

void d2d_path_geometry_init ( struct d2d_geometry *  geometry,
ID2D1Factory *  factory 
)

Definition at line 3965 of file geometry.c.

3966{
3967 d2d_geometry_init(geometry, factory, &identity, (ID2D1GeometryVtbl *)&d2d_path_geometry_vtbl);
3968 geometry->u.path.ID2D1GeometrySink_iface.lpVtbl = &d2d_geometry_sink_vtbl;
3969 geometry->u.path.bounds.left = FLT_MAX;
3970 geometry->u.path.bounds.right = -FLT_MAX;
3971 geometry->u.path.bounds.top = FLT_MAX;
3972 geometry->u.path.bounds.bottom = -FLT_MAX;
3973}
static const struct ID2D1PathGeometry1Vtbl d2d_path_geometry_vtbl
Definition: geometry.c:3939
static const struct ID2D1GeometrySinkVtbl d2d_geometry_sink_vtbl
Definition: geometry.c:3355
#define FLT_MAX
Definition: float.h:37
struct d2d_geometry::@243::@245 path

Referenced by d2d_factory_CreatePathGeometry(), and d2d_factory_CreatePathGeometry1().

◆ d2d_point_dot()

static float d2d_point_dot ( const D2D1_POINT_2F *  p0,
const D2D1_POINT_2F *  p1 
)
inlinestatic

Definition at line 958 of file d2d1_private.h.

959{
960 return p0->x * p1->x + p0->y * p1->y;
961}

Referenced by d2d_brush_fill_cb(), d2d_point_length(), d2d_point_on_bezier_segment(), d2d_point_on_line_segment(), and d2d_rectangle_geometry_StrokeContainsPoint().

◆ d2d_point_set()

static void d2d_point_set ( D2D1_POINT_2F *  dst,
float  x,
float  y 
)
inlinestatic

◆ d2d_point_transform()

◆ d2d_radial_gradient_brush_create()

HRESULT d2d_radial_gradient_brush_create ( ID2D1Factory *  factory,
const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *  gradient_desc,
const D2D1_BRUSH_PROPERTIES *  brush_desc,
ID2D1GradientStopCollection *  gradient,
struct d2d_brush **  brush 
)

Definition at line 799 of file brush.c.

802{
803 struct d2d_brush *b;
804
805 if (!(b = calloc(1, sizeof(*b))))
806 return E_OUTOFMEMORY;
807
810 ID2D1GradientStopCollection_AddRef(&b->u.radial.gradient->ID2D1GradientStopCollection_iface);
811 b->u.radial.centre = gradient_desc->center;
812 b->u.radial.offset = gradient_desc->gradientOriginOffset;
813 b->u.radial.radius.x = gradient_desc->radiusX;
814 b->u.radial.radius.y = gradient_desc->radiusY;
815
816 TRACE("Created brush %p.\n", b);
817 *brush = b;
818
819 return S_OK;
820}
static const struct ID2D1RadialGradientBrushVtbl d2d_radial_gradient_brush_vtbl
Definition: brush.c:778
struct d2d_gradient * gradient
Definition: d2d1_private.h:339

Referenced by d2d_device_context_CreateRadialGradientBrush().

◆ d2d_rect_expand()

static void d2d_rect_expand ( D2D1_RECT_F *  dst,
const D2D1_POINT_2F *  point 
)
inlinestatic

Definition at line 969 of file d2d1_private.h.

970{
971 if (point->x < dst->left)
972 dst->left = point->x;
973 if (point->x > dst->right)
974 dst->right = point->x;
975 if (point->y < dst->top)
976 dst->top = point->y;
977 if (point->y > dst->bottom)
978 dst->bottom = point->y;
979}
POINTL point
Definition: edittest.c:50
LONG y
Definition: windef.h:130
LONG x
Definition: windef.h:129

Referenced by d2d_device_context_PushAxisAlignedClip(), d2d_figure_add_vertex(), d2d_figure_insert_vertex(), d2d_path_geometry_GetBounds(), d2d_rect_get_bezier_bounds(), and d2d_rectangle_geometry_GetBounds().

◆ d2d_rectangle_geometry_init()

HRESULT d2d_rectangle_geometry_init ( struct d2d_geometry *  geometry,
ID2D1Factory *  factory,
const D2D1_RECT_F *  rect 
)

Definition at line 4591 of file geometry.c.

4592{
4593 struct d2d_face *f;
4595 float l, r, t, b;
4596
4597 static const D2D1_POINT_2F prev[] =
4598 {
4599 { 1.0f, 0.0f},
4600 { 0.0f, -1.0f},
4601 {-1.0f, 0.0f},
4602 { 0.0f, 1.0f},
4603 };
4604 static const D2D1_POINT_2F next[] =
4605 {
4606 { 0.0f, 1.0f},
4607 { 1.0f, 0.0f},
4608 { 0.0f, -1.0f},
4609 {-1.0f, 0.0f},
4610 };
4611
4612 d2d_geometry_init(geometry, factory, &identity, (ID2D1GeometryVtbl *)&d2d_rectangle_geometry_vtbl);
4613 geometry->u.rectangle.rect = *rect;
4614
4615 if (!(geometry->fill.vertices = malloc(4 * sizeof(*geometry->fill.vertices))))
4616 goto fail;
4617 if (!d2d_array_reserve((void **)&geometry->fill.faces,
4618 &geometry->fill.faces_size, 2, sizeof(*geometry->fill.faces)))
4619 goto fail;
4620
4621 l = min(rect->left, rect->right);
4622 r = max(rect->left, rect->right);
4623 t = min(rect->top, rect->bottom);
4624 b = max(rect->top, rect->bottom);
4625
4626 v = geometry->fill.vertices;
4627 d2d_point_set(&v[0], l, t);
4628 d2d_point_set(&v[1], l, b);
4629 d2d_point_set(&v[2], r, b);
4630 d2d_point_set(&v[3], r, t);
4631 geometry->fill.vertex_count = 4;
4632
4633 f = geometry->fill.faces;
4634 d2d_face_set(&f[0], 1, 2, 0);
4635 d2d_face_set(&f[1], 0, 2, 3);
4636 geometry->fill.face_count = 2;
4637
4638 if (!d2d_geometry_outline_add_line_segment(geometry, &v[0], &v[1]))
4639 goto fail;
4640 if (!d2d_geometry_outline_add_line_segment(geometry, &v[1], &v[2]))
4641 goto fail;
4642 if (!d2d_geometry_outline_add_line_segment(geometry, &v[2], &v[3]))
4643 goto fail;
4644 if (!d2d_geometry_outline_add_line_segment(geometry, &v[3], &v[0]))
4645 goto fail;
4646
4647 if (!d2d_geometry_outline_add_join(geometry, &prev[0], &v[0], &next[0]))
4648 goto fail;
4649 if (!d2d_geometry_outline_add_join(geometry, &prev[1], &v[1], &next[1]))
4650 goto fail;
4651 if (!d2d_geometry_outline_add_join(geometry, &prev[2], &v[2], &next[2]))
4652 goto fail;
4653 if (!d2d_geometry_outline_add_join(geometry, &prev[3], &v[3], &next[3]))
4654 goto fail;
4655
4656 return S_OK;
4657
4658fail:
4659 d2d_geometry_cleanup(geometry);
4660 return E_OUTOFMEMORY;
4661}
static const struct ID2D1RectangleGeometryVtbl d2d_rectangle_geometry_vtbl
Definition: geometry.c:4569
static BOOL d2d_geometry_outline_add_join(struct d2d_geometry *geometry, const D2D1_POINT_2F *prev, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *next)
Definition: geometry.c:2394
static BOOL d2d_geometry_outline_add_line_segment(struct d2d_geometry *geometry, const D2D1_POINT_2F *p0, const D2D1_POINT_2F *next)
Definition: geometry.c:2453
#define min(a, b)
Definition: monoChain.cc:55
static unsigned __int64 next
Definition: rand_nt.c:6
long bottom
Definition: dcommon.idl:29
long right
Definition: dcommon.idl:29
long left
Definition: dcommon.idl:29
long top
Definition: dcommon.idl:29
struct d2d_geometry::@243::@246 rectangle

Referenced by d2d_factory_CreateRectangleGeometry().

◆ d2d_rounded_rectangle_geometry_init()

HRESULT d2d_rounded_rectangle_geometry_init ( struct d2d_geometry *  geometry,
ID2D1Factory *  factory,
const D2D1_ROUNDED_RECT *  rounded_rect 
)

Definition at line 4876 of file geometry.c.

4878{
4879 D2D1_POINT_2F *v, v1, v2, v3, v4;
4880 struct d2d_face *f;
4881 float l, r, t, b;
4882 float rx, ry;
4883
4884 d2d_geometry_init(geometry, factory, &identity, (ID2D1GeometryVtbl *)&d2d_rounded_rectangle_geometry_vtbl);
4885 geometry->u.rounded_rectangle.rounded_rect = *rounded_rect;
4886
4887 if (!(geometry->fill.vertices = malloc(8 * sizeof(*geometry->fill.vertices))))
4888 goto fail;
4889 if (!d2d_array_reserve((void **)&geometry->fill.faces,
4890 &geometry->fill.faces_size, 6, sizeof(*geometry->fill.faces)))
4891 goto fail;
4892
4893 l = min(rounded_rect->rect.left, rounded_rect->rect.right);
4894 r = max(rounded_rect->rect.left, rounded_rect->rect.right);
4895 t = min(rounded_rect->rect.top, rounded_rect->rect.bottom);
4896 b = max(rounded_rect->rect.top, rounded_rect->rect.bottom);
4897
4898 rx = min(rounded_rect->radiusX, 0.5f * (r - l));
4899 ry = min(rounded_rect->radiusY, 0.5f * (b - t));
4900
4901 d2d_point_set(&v1, r, t);
4902 d2d_point_set(&v2, r, b);
4903 d2d_point_set(&v3, l, b);
4904 d2d_point_set(&v4, l, t);
4905
4906 v = geometry->fill.vertices;
4907 d2d_point_set(&v[0], l + rx, t);
4908 d2d_point_set(&v[1], r - rx, t);
4909 d2d_point_set(&v[2], r, t + ry);
4910 d2d_point_set(&v[3], r, b - ry);
4911 d2d_point_set(&v[4], r - rx, b);
4912 d2d_point_set(&v[5], l + rx, b);
4913 d2d_point_set(&v[6], l, b - ry);
4914 d2d_point_set(&v[7], l, t + ry);
4915 geometry->fill.vertex_count = 8;
4916
4917 f = geometry->fill.faces;
4918 d2d_face_set(&f[0], 0, 7, 6);
4919 d2d_face_set(&f[1], 0, 6, 5);
4920 d2d_face_set(&f[2], 0, 5, 4);
4921 d2d_face_set(&f[3], 0, 4, 1);
4922 d2d_face_set(&f[4], 1, 4, 3);
4923 d2d_face_set(&f[5], 1, 3, 2);
4924 geometry->fill.face_count = 6;
4925
4926 if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[1], &v1, &v[2]))
4927 goto fail;
4928 if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[3], &v2, &v[4]))
4929 goto fail;
4930 if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[5], &v3, &v[6]))
4931 goto fail;
4932 if (!d2d_geometry_fill_add_arc_triangle(geometry, &v[7], &v4, &v[0]))
4933 goto fail;
4934
4935 if (!d2d_geometry_outline_add_line_segment(geometry, &v[0], &v[1]))
4936 goto fail;
4937 if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[1], &v1, &v[2]))
4938 goto fail;
4939 if (!d2d_geometry_outline_add_line_segment(geometry, &v[2], &v[3]))
4940 goto fail;
4941 if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[3], &v2, &v[4]))
4942 goto fail;
4943 if (!d2d_geometry_outline_add_line_segment(geometry, &v[4], &v[5]))
4944 goto fail;
4945 if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[5], &v3, &v[6]))
4946 goto fail;
4947 if (!d2d_geometry_outline_add_line_segment(geometry, &v[6], &v[7]))
4948 goto fail;
4949 if (!d2d_geometry_outline_add_arc_quadrant(geometry, &v[7], &v4, &v[0]))
4950 goto fail;
4951
4952 return S_OK;
4953
4954fail:
4955 d2d_geometry_cleanup(geometry);
4956 return E_OUTOFMEMORY;
4957}
static const struct ID2D1RoundedRectangleGeometryVtbl d2d_rounded_rectangle_geometry_vtbl
Definition: geometry.c:4854
D2D1_RECT_F rect
Definition: d2d1.idl:318
float top
Definition: dcommon.idl:106
float bottom
Definition: dcommon.idl:108
float right
Definition: dcommon.idl:107
float left
Definition: dcommon.idl:105
struct d2d_geometry::@243::@247 rounded_rectangle

Referenced by d2d_factory_CreateRoundedRectangleGeometry().

◆ d2d_solid_color_brush_create()

HRESULT d2d_solid_color_brush_create ( ID2D1Factory *  factory,
const D2D1_COLOR_F *  color,
const D2D1_BRUSH_PROPERTIES *  desc,
struct d2d_brush **  brush 
)

Definition at line 389 of file brush.c.

391{
392 if (!(*brush = calloc(1, sizeof(**brush))))
393 return E_OUTOFMEMORY;
394
396 (ID2D1BrushVtbl *)&d2d_solid_color_brush_vtbl);
397 (*brush)->u.solid.color = *color;
398
399 TRACE("Created brush %p.\n", *brush);
400 return S_OK;
401}
static const struct ID2D1SolidColorBrushVtbl d2d_solid_color_brush_vtbl
Definition: brush.c:375

Referenced by d2d_device_context_CreateSolidColorBrush().

◆ d2d_state_block_init()

void d2d_state_block_init ( struct d2d_state_block *  state_block,
ID2D1Factory *  factory,
const D2D1_DRAWING_STATE_DESCRIPTION1 *  desc,
IDWriteRenderingParams *  text_rendering_params 
)

Definition at line 164 of file state_block.c.

166{
167 static const D2D1_MATRIX_3X2_F identity =
168 {{{
169 1.0f, 0.0f,
170 0.0f, 1.0f,
171 0.0f, 0.0f,
172 }}};
173
175 state_block->refcount = 1;
176 ID2D1Factory_AddRef(state_block->factory = factory);
177 if (desc)
178 state_block->drawing_state = *desc;
179 else
180 state_block->drawing_state.transform = identity;
181 if ((state_block->text_rendering_params = text_rendering_params))
182 IDWriteRenderingParams_AddRef(state_block->text_rendering_params);
183}
static const struct ID2D1DrawingStateBlock1Vtbl d2d_state_block_vtbl
Definition: state_block.c:150
D2D1_MATRIX_3X2_F transform
Definition: d2d1_1.idl:246
IDWriteRenderingParams * text_rendering_params
Definition: d2d1_private.h:457
ID2D1DrawingStateBlock1 ID2D1DrawingStateBlock1_iface
Definition: d2d1_private.h:452
ID2D1Factory * factory
Definition: d2d1_private.h:455
D2D1_DRAWING_STATE_DESCRIPTION1 drawing_state
Definition: d2d1_private.h:456

Referenced by d2d_factory_CreateDrawingStateBlock(), and d2d_factory_CreateDrawingStateBlock1().

◆ d2d_stroke_style_init()

HRESULT d2d_stroke_style_init ( struct d2d_stroke_style *  style,
ID2D1Factory *  factory,
const D2D1_STROKE_STYLE_PROPERTIES1 *  desc,
const float *  dashes,
UINT32  dash_count 
)

Definition at line 202 of file stroke.c.

204{
205 static const struct
206 {
207 UINT32 dash_count;
208 float dashes[6];
209 }
210 builtin_dash_styles[] =
211 {
212 /* D2D1_DASH_STYLE_SOLID */ { 0 },
213 /* D2D1_DASH_STYLE_DASH */ { 2, {2.0f, 2.0f}},
214 /* D2D1_DASH_STYLE_DOT */ { 2, {0.0f, 2.0f}},
215 /* D2D1_DASH_STYLE_DASH_DOT */ { 4, {2.0f, 2.0f, 0.0f, 2.0f}},
216 /* D2D1_DASH_STYLE_DASH_DOT_DOT */ { 6, {2.0f, 2.0f, 0.0f, 2.0f, 0.0f, 2.0f}},
217 };
218
219 if (desc->dashStyle > D2D1_DASH_STYLE_CUSTOM)
220 return E_INVALIDARG;
221
222 if (desc->transformType != D2D1_STROKE_TRANSFORM_TYPE_NORMAL)
223 FIXME("transformType %d is not supported\n", desc->transformType);
224
225 style->ID2D1StrokeStyle1_iface.lpVtbl = &d2d_stroke_style_vtbl;
226 style->refcount = 1;
227
228 if (desc->dashStyle == D2D1_DASH_STYLE_CUSTOM)
229 {
230 if (!dashes || !dash_count)
231 return E_INVALIDARG;
232
233 if (!(style->dashes = calloc(dash_count, sizeof(*style->dashes))))
234 return E_OUTOFMEMORY;
235 memcpy(style->dashes, dashes, dash_count * sizeof(*style->dashes));
236 style->dash_count = dash_count;
237 }
238 else
239 {
240 if (dashes)
241 return E_INVALIDARG;
242
243 style->dashes = (float *)builtin_dash_styles[desc->dashStyle].dashes;
244 style->dash_count = builtin_dash_styles[desc->dashStyle].dash_count;
245 }
246
247 ID2D1Factory_AddRef(style->factory = factory);
248 style->desc = *desc;
249
250 return S_OK;
251}
@ D2D1_DASH_STYLE_CUSTOM
Definition: d2d1.idl:137
@ D2D1_STROKE_TRANSFORM_TYPE_NORMAL
Definition: d2d1_1.idl:47
static const struct ID2D1StrokeStyle1Vtbl d2d_stroke_style_vtbl
Definition: stroke.c:176
Definition: style.c:91

Referenced by d2d_factory_CreateStrokeStyle(), and d2d_factory_CreateStrokeStyle1().

◆ d2d_transformed_geometry_init()

void d2d_transformed_geometry_init ( struct d2d_geometry *  geometry,
ID2D1Factory *  factory,
ID2D1Geometry *  src_geometry,
const D2D_MATRIX_3X2_F *  transform 
)

Definition at line 5226 of file geometry.c.

5228{
5229 struct d2d_geometry *src_impl;
5231
5233
5234 g = src_impl->transform;
5236 d2d_geometry_init(geometry, factory, &g, (ID2D1GeometryVtbl *)&d2d_transformed_geometry_vtbl);
5237 ID2D1Geometry_AddRef(geometry->u.transformed.src_geometry = src_geometry);
5238 geometry->u.transformed.transform = *transform;
5239 geometry->fill = src_impl->fill;
5240 geometry->outline = src_impl->outline;
5241}
static void d2d_matrix_multiply(D2D_MATRIX_3X2_F *a, const D2D_MATRIX_3X2_F *b)
Definition: d2d1_private.h:923
struct d2d_geometry * unsafe_impl_from_ID2D1Geometry(ID2D1Geometry *iface)
Definition: geometry.c:5520
static const struct ID2D1TransformedGeometryVtbl d2d_transformed_geometry_vtbl
Definition: geometry.c:5203
GLboolean GLboolean g
Definition: glext.h:6204
struct d2d_geometry::@243::@248 transformed
ID2D1Geometry * src_geometry
Definition: d2d1_private.h:585
D2D_MATRIX_3X2_F transform
Definition: d2d1_private.h:508
struct d2d_geometry::@242 outline

Referenced by d2d_factory_CreateTransformedGeometry().

◆ d2d_wic_render_target_init()

HRESULT d2d_wic_render_target_init ( struct d2d_wic_render_target *  render_target,
ID2D1Factory1 *  factory,
ID3D10Device1 *  d3d_device,
IWICBitmap *  bitmap,
const D2D1_RENDER_TARGET_PROPERTIES *  desc 
)

Definition at line 152 of file wic_render_target.c.

154{
155 D3D10_TEXTURE2D_DESC texture_desc;
157 IDXGIDevice *dxgi_device;
159 HRESULT hr;
160
161 render_target->IUnknown_iface.lpVtbl = &d2d_wic_render_target_vtbl;
162
163 if (FAILED(hr = IWICBitmap_GetSize(bitmap, &render_target->width, &render_target->height)))
164 {
165 WARN("Failed to get bitmap dimensions, hr %#lx.\n", hr);
166 return hr;
167 }
168
169 texture_desc.Width = render_target->width;
170 texture_desc.Height = render_target->height;
171 texture_desc.MipLevels = 1;
172 texture_desc.ArraySize = 1;
173
174 texture_desc.Format = desc->pixelFormat.format;
175 if (texture_desc.Format == DXGI_FORMAT_UNKNOWN)
176 {
177 WICPixelFormatGUID bitmap_format;
178
179 if (FAILED(hr = IWICBitmap_GetPixelFormat(bitmap, &bitmap_format)))
180 {
181 WARN("Failed to get bitmap format, hr %#lx.\n", hr);
182 return hr;
183 }
184
185 if (IsEqualGUID(&bitmap_format, &GUID_WICPixelFormat32bppPBGRA)
186 || IsEqualGUID(&bitmap_format, &GUID_WICPixelFormat32bppBGR))
187 {
188 texture_desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
189 }
190 else if (IsEqualGUID(&bitmap_format, &GUID_WICPixelFormat32bppPRGBA)
191 || IsEqualGUID(&bitmap_format, &GUID_WICPixelFormat32bppRGB))
192 {
193 texture_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
194 }
195 else
196 {
197 WARN("Unsupported WIC bitmap format %s.\n", debugstr_guid(&bitmap_format));
199 }
200 }
201
202 switch (texture_desc.Format)
203 {
206 render_target->bpp = 4;
207 break;
208
209 default:
210 FIXME("Unhandled format %#x.\n", texture_desc.Format);
212 }
213
214 texture_desc.SampleDesc.Count = 1;
215 texture_desc.SampleDesc.Quality = 0;
216 texture_desc.Usage = D3D10_USAGE_DEFAULT;
218 texture_desc.CPUAccessFlags = 0;
221
222 if (FAILED(hr = ID3D10Device1_CreateTexture2D(d3d_device, &texture_desc, NULL, &texture)))
223 {
224 WARN("Failed to create texture, hr %#lx.\n", hr);
225 return hr;
226 }
227
228 hr = ID3D10Texture2D_QueryInterface(texture, &IID_IDXGISurface, (void **)&render_target->dxgi_surface);
229 ID3D10Texture2D_Release(texture);
230 if (FAILED(hr))
231 {
232 WARN("Failed to get DXGI surface interface, hr %#lx.\n", hr);
233 return hr;
234 }
235
236 texture_desc.Usage = D3D10_USAGE_STAGING;
237 texture_desc.BindFlags = 0;
239 texture_desc.MiscFlags = 0;
240
241 if (FAILED(hr = ID3D10Device1_CreateTexture2D(d3d_device, &texture_desc, NULL, &render_target->readback_texture)))
242 {
243 WARN("Failed to create readback texture, hr %#lx.\n", hr);
244 IDXGISurface_Release(render_target->dxgi_surface);
245 return hr;
246 }
247
248 if (FAILED(hr = ID3D10Device1_QueryInterface(d3d_device, &IID_IDXGIDevice, (void **)&dxgi_device)))
249 {
250 WARN("Failed to get DXGI device, hr %#lx.\n", hr);
251 IDXGISurface_Release(render_target->dxgi_surface);
252 return hr;
253 }
254
255 hr = d2d_factory_create_device(factory, dxgi_device, false, &IID_ID2D1Device, (void **)&device);
256 IDXGIDevice_Release(dxgi_device);
257 if (FAILED(hr))
258 {
259 WARN("Failed to create D2D device, hr %#lx.\n", hr);
260 IDXGISurface_Release(render_target->dxgi_surface);
261 return hr;
262 }
263
265 render_target->dxgi_surface, &render_target->IUnknown_iface,
266 &d2d_wic_render_target_ops, desc, (void **)&render_target->dxgi_inner);
267 ID2D1Device_Release(device);
268 if (FAILED(hr))
269 {
270 WARN("Failed to create DXGI surface render target, hr %#lx.\n", hr);
271 ID3D10Texture2D_Release(render_target->readback_texture);
272 IDXGISurface_Release(render_target->dxgi_surface);
273 return hr;
274 }
275
276 if (FAILED(hr = IUnknown_QueryInterface(render_target->dxgi_inner,
277 &IID_ID2D1RenderTarget, (void **)&render_target->dxgi_target)))
278 {
279 WARN("Failed to retrieve ID2D1RenderTarget interface, hr %#lx.\n", hr);
280 IUnknown_Release(render_target->dxgi_inner);
281 ID3D10Texture2D_Release(render_target->readback_texture);
282 IDXGISurface_Release(render_target->dxgi_surface);
283 return hr;
284 }
285
286 render_target->bitmap = bitmap;
287 IWICBitmap_AddRef(bitmap);
288
289 return S_OK;
290}
@ D3D10_USAGE_DEFAULT
Definition: d3d10.idl:461
@ D3D10_USAGE_STAGING
Definition: d3d10.idl:464
@ D3D10_CPU_ACCESS_READ
Definition: d3d10.idl:884
@ D3D10_RESOURCE_MISC_GDI_COMPATIBLE
Definition: d3d10.idl:892
@ D3D10_BIND_SHADER_RESOURCE
Definition: d3d10.idl:471
@ D3D10_BIND_RENDER_TARGET
Definition: d3d10.idl:473
DXGI_FORMAT Format
Definition: d3d10.idl:550
DXGI_SAMPLE_DESC SampleDesc
Definition: d3d10.idl:551
D3D10_USAGE Usage
Definition: d3d10.idl:552
ID3D10Texture2D * readback_texture
Definition: d2d1_private.h:243
ID2D1RenderTarget * dxgi_target
Definition: d2d1_private.h:241
IDXGISurface * dxgi_surface
Definition: d2d1_private.h:240
static const struct IUnknownVtbl d2d_wic_render_target_vtbl
static const struct d2d_device_context_ops d2d_wic_render_target_ops

Referenced by d2d_factory_CreateWicBitmapRenderTarget().

◆ debug_d2d_color_f()

static const char * debug_d2d_color_f ( const D2D1_COLOR_F *  colour)
inlinestatic

Definition at line 986 of file d2d1_private.h.

987{
988 if (!colour)
989 return "(null)";
990 return wine_dbg_sprintf("{%.8e, %.8e, %.8e, %.8e}", colour->r, colour->g, colour->b, colour->a);
991}
const char * wine_dbg_sprintf(const char *format,...)
Definition: compat.c:296

Referenced by D2D1ConvertColorSpace().

◆ debug_d2d_ellipse()

static const char * debug_d2d_ellipse ( const D2D1_ELLIPSE *  ellipse)
inlinestatic

Definition at line 1029 of file d2d1_private.h.

1030{
1031 if (!ellipse)
1032 return "(null)";
1033 return wine_dbg_sprintf("(%.8e, %.8e)[%.8e, %.8e]",
1034 ellipse->point.x, ellipse->point.y, ellipse->radiusX, ellipse->radiusY);
1035}

Referenced by d2d_factory_CreateEllipseGeometry().

◆ debug_d2d_point_2f()

static const char * debug_d2d_point_2f ( const D2D1_POINT_2F *  point)
inlinestatic

Definition at line 993 of file d2d1_private.h.

994{
995 if (!point)
996 return "(null)";
997 return wine_dbg_sprintf("{%.8e, %.8e}", point->x, point->y);
998}

Referenced by D2D1MakeRotateMatrix(), D2D1MakeSkewMatrix(), d2d_bitmap_render_target_DrawGlyphRun(), d2d_bitmap_render_target_DrawLine(), d2d_bitmap_render_target_DrawTextLayout(), d2d_dc_render_target_DrawGlyphRun(), d2d_dc_render_target_DrawLine(), d2d_dc_render_target_DrawTextLayout(), d2d_device_context_BlendImage(), d2d_device_context_DrawColorBitmapGlyphRun(), d2d_device_context_DrawGdiMetafile(), d2d_device_context_DrawGlyphRun(), d2d_device_context_DrawImage(), d2d_device_context_DrawLine(), d2d_device_context_DrawSvgGlyphRun(), d2d_device_context_DrawTextLayout(), d2d_device_context_GetColorBitmapGlyphImage(), d2d_device_context_GetGlyphRunWorldBounds(), d2d_device_context_GetSvgGlyphImage(), d2d_device_context_ID2D1DeviceContext4_DrawTextLayout(), d2d_device_context_ID2D1DeviceContext_DrawGlyphRun(), d2d_ellipse_geometry_FillContainsPoint(), d2d_ellipse_geometry_StrokeContainsPoint(), d2d_geometry_group_FillContainsPoint(), d2d_geometry_group_StrokeContainsPoint(), d2d_geometry_sink_AddLine(), d2d_geometry_sink_BeginFigure(), d2d_hwnd_render_target_DrawGlyphRun(), d2d_hwnd_render_target_DrawLine(), d2d_hwnd_render_target_DrawTextLayout(), d2d_linear_gradient_brush_SetEndPoint(), d2d_linear_gradient_brush_SetStartPoint(), d2d_path_geometry_FillContainsPoint(), d2d_path_geometry_StrokeContainsPoint(), d2d_radial_gradient_brush_SetCenter(), d2d_radial_gradient_brush_SetGradientOriginOffset(), d2d_rectangle_geometry_FillContainsPoint(), d2d_rectangle_geometry_StrokeContainsPoint(), d2d_rounded_rectangle_geometry_FillContainsPoint(), d2d_rounded_rectangle_geometry_StrokeContainsPoint(), d2d_transformed_geometry_FillContainsPoint(), and d2d_transformed_geometry_StrokeContainsPoint().

◆ debug_d2d_point_2l()

static const char * debug_d2d_point_2l ( const D2D1_POINT_2L *  point)
inlinestatic

Definition at line 1000 of file d2d1_private.h.

1001{
1002 if (!point)
1003 return "(null)";
1004 return wine_dbg_sprintf("{%ld, %ld}", point->x, point->y);
1005}

Referenced by d2d_effect_context_CreateOffsetTransform(), and d2d_offset_transform_SetOffset().

◆ debug_d2d_rect_f()

static const char * debug_d2d_rect_f ( const D2D1_RECT_F *  rect)
inlinestatic

Definition at line 1007 of file d2d1_private.h.

1008{
1009 if (!rect)
1010 return "(null)";
1011 return wine_dbg_sprintf("(%.8e, %.8e)-(%.8e, %.8e)", rect->left, rect->top, rect->right, rect->bottom);
1012}

Referenced by d2d_bitmap_render_target_DrawBitmap(), d2d_bitmap_render_target_DrawRectangle(), d2d_bitmap_render_target_DrawText(), d2d_bitmap_render_target_FillOpacityMask(), d2d_bitmap_render_target_FillRectangle(), d2d_bitmap_render_target_PushAxisAlignedClip(), d2d_dc_render_target_DrawBitmap(), d2d_dc_render_target_DrawRectangle(), d2d_dc_render_target_DrawText(), d2d_dc_render_target_FillOpacityMask(), d2d_dc_render_target_FillRectangle(), d2d_dc_render_target_PushAxisAlignedClip(), d2d_device_context_BlendImage(), d2d_device_context_DrawBitmap(), d2d_device_context_DrawImage(), d2d_device_context_DrawRectangle(), d2d_device_context_DrawText(), d2d_device_context_FillOpacityMask(), d2d_device_context_FillRectangle(), d2d_device_context_GetEffectRequiredInputRectangles(), d2d_device_context_ID2D1DeviceContext2_DrawGdiMetafile(), d2d_device_context_ID2D1DeviceContext4_DrawText(), d2d_device_context_ID2D1DeviceContext_DrawBitmap(), d2d_device_context_ID2D1DeviceContext_FillOpacityMask(), d2d_device_context_InvalidateEffectInputRectangle(), d2d_device_context_PushAxisAlignedClip(), d2d_factory_CreateRectangleGeometry(), d2d_hwnd_render_target_DrawBitmap(), d2d_hwnd_render_target_DrawRectangle(), d2d_hwnd_render_target_DrawText(), d2d_hwnd_render_target_FillOpacityMask(), d2d_hwnd_render_target_FillRectangle(), d2d_hwnd_render_target_PushAxisAlignedClip(), and d2d_image_brush_SetSourceRectangle().

◆ debug_d2d_rect_l()

static const char * debug_d2d_rect_l ( const D2D1_RECT_L *  rect)
inlinestatic

Definition at line 1014 of file d2d1_private.h.

1015{
1016 if (!rect)
1017 return "(null)";
1018 return wine_dbg_sprintf("(%ld, %ld)-(%ld, %ld)", rect->left, rect->top, rect->right, rect->bottom);
1019}

Referenced by d2d_effect_context_CreateBoundsAdjustmentTransform().

◆ debug_d2d_rounded_rect()

static const char * debug_d2d_rounded_rect ( const D2D1_ROUNDED_RECT *  rounded_rect)
inlinestatic

Definition at line 1021 of file d2d1_private.h.

1022{
1023 if (!rounded_rect)
1024 return "(null)";
1025 return wine_dbg_sprintf("(%.8e, %.8e)-(%.8e, %.8e)[%.8e, %.8e]", rounded_rect->rect.left, rounded_rect->rect.top,
1026 rounded_rect->rect.right, rounded_rect->rect.bottom, rounded_rect->radiusX, rounded_rect->radiusY);
1027}

Referenced by d2d_factory_CreateRoundedRectangleGeometry().

◆ 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}
static const struct ID2D1Bitmap1Vtbl d2d_bitmap_vtbl
Definition: bitmap.c:311
#define assert(_expr)
Definition: assert.h:32
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

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().

◆ unsafe_impl_from_ID2D1Brush()

struct d2d_brush * unsafe_impl_from_ID2D1Brush ( ID2D1Brush *  iface)

Definition at line 1344 of file brush.c.

1345{
1346 if (!iface)
1347 return NULL;
1348 assert(iface->lpVtbl == (const ID2D1BrushVtbl *)&d2d_solid_color_brush_vtbl
1349 || iface->lpVtbl == (const ID2D1BrushVtbl *)&d2d_linear_gradient_brush_vtbl
1350 || iface->lpVtbl == (const ID2D1BrushVtbl *)&d2d_radial_gradient_brush_vtbl
1351 || iface->lpVtbl == (const ID2D1BrushVtbl *)&d2d_bitmap_brush_vtbl
1352 || iface->lpVtbl == (const ID2D1BrushVtbl *)&d2d_image_brush_vtbl);
1353 return CONTAINING_RECORD(iface, struct d2d_brush, ID2D1Brush_iface);
1354}

Referenced by d2d_command_list_create_brush(), d2d_device_context_draw_glyph_run_bitmap(), d2d_device_context_draw_glyph_run_outline(), d2d_device_context_DrawGeometry(), and d2d_device_context_FillGeometry().

◆ unsafe_impl_from_ID2D1CommandList()

struct d2d_command_list * unsafe_impl_from_ID2D1CommandList ( ID2D1CommandList *  iface)

Definition at line 512 of file command_list.c.

513{
514 if (!iface)
515 return NULL;
516 assert(iface->lpVtbl == (ID2D1CommandListVtbl *)&d2d_command_list_vtbl);
517 return CONTAINING_RECORD(iface, struct d2d_command_list, ID2D1CommandList_iface);
518}

Referenced by d2d_device_context_SetTarget().

◆ unsafe_impl_from_ID2D1Device()

struct d2d_device * unsafe_impl_from_ID2D1Device ( ID2D1Device1 *  iface)

Definition at line 4522 of file device.c.

4523{
4524 if (!iface)
4525 return NULL;
4526 assert(iface->lpVtbl == (ID2D1Device1Vtbl *)&d2d_device_vtbl);
4527 return CONTAINING_RECORD(iface, struct d2d_device, ID2D1Device6_iface);
4528}

Referenced by d2d_dc_render_target_init(), d2d_factory_CreateDxgiSurfaceRenderTarget(), d2d_hwnd_render_target_init(), and d2d_wic_render_target_init().

◆ unsafe_impl_from_ID2D1DrawingStateBlock()

struct d2d_state_block * unsafe_impl_from_ID2D1DrawingStateBlock ( ID2D1DrawingStateBlock *  iface)

Definition at line 185 of file state_block.c.

186{
187 if (!iface)
188 return NULL;
189 if (iface->lpVtbl != (ID2D1DrawingStateBlockVtbl *)&d2d_state_block_vtbl)
190 {
191 WARN("Unexpected state block vtbl %p.\n", iface->lpVtbl);
192 return NULL;
193 }
194 return CONTAINING_RECORD(iface, struct d2d_state_block, ID2D1DrawingStateBlock1_iface);
195}

Referenced by d2d_device_context_RestoreDrawingState(), and d2d_device_context_SaveDrawingState().

◆ unsafe_impl_from_ID2D1Factory()

static struct d2d_factory * unsafe_impl_from_ID2D1Factory ( ID2D1Factory *  iface)
inlinestatic

Definition at line 704 of file d2d1_private.h.

705{
706 return CONTAINING_RECORD(iface, struct d2d_factory, ID2D1Factory7_iface);
707}

Referenced by d2d_device_context_init(), and d2d_factory_get_registered_effect().

◆ unsafe_impl_from_ID2D1Geometry()

struct d2d_geometry * unsafe_impl_from_ID2D1Geometry ( ID2D1Geometry *  iface)

Definition at line 5520 of file geometry.c.

5521{
5522 if (!iface)
5523 return NULL;
5524 assert(iface->lpVtbl == (const ID2D1GeometryVtbl *)&d2d_ellipse_geometry_vtbl
5525 || iface->lpVtbl == (const ID2D1GeometryVtbl *)&d2d_path_geometry_vtbl
5526 || iface->lpVtbl == (const ID2D1GeometryVtbl *)&d2d_rectangle_geometry_vtbl
5527 || iface->lpVtbl == (const ID2D1GeometryVtbl *)&d2d_rounded_rectangle_geometry_vtbl
5528 || iface->lpVtbl == (const ID2D1GeometryVtbl *)&d2d_transformed_geometry_vtbl
5529 || iface->lpVtbl == (const ID2D1GeometryVtbl *)&d2d_geometry_group_vtbl);
5530 return CONTAINING_RECORD(iface, struct d2d_geometry, ID2D1Geometry_iface);
5531}

Referenced by d2d_device_context_draw_glyph_run_bitmap(), d2d_device_context_draw_glyph_run_outline(), d2d_device_context_DrawGeometry(), d2d_device_context_FillGeometry(), and d2d_transformed_geometry_init().

◆ unsafe_impl_from_ID2D1StrokeStyle()

struct d2d_stroke_style * unsafe_impl_from_ID2D1StrokeStyle ( ID2D1StrokeStyle *  iface)

Definition at line 194 of file stroke.c.

195{
196 if (!iface)
197 return NULL;
198 assert((const struct ID2D1StrokeStyle1Vtbl *)iface->lpVtbl == &d2d_stroke_style_vtbl);
199 return CONTAINING_RECORD(iface, struct d2d_stroke_style, ID2D1StrokeStyle1_iface);
200}

Referenced by d2d_device_context_DrawGeometry().

Variable Documentation

◆ d2d_settings

Definition at line 28 of file factory.c.