mirror of
https://github.com/libretro/RetroArch.git
synced 2024-12-01 04:00:32 +00:00
261 lines
6.9 KiB
C++
261 lines
6.9 KiB
C++
|
|
/*=========================================================================*\
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
File: D2D1_3Helper.h
|
|
|
|
Module Name: D2D
|
|
|
|
Description: Helper files over the D2D interfaces and APIs.
|
|
|
|
\*=========================================================================*/
|
|
|
|
#ifdef _MSC_VER
|
|
#pragma once
|
|
#endif // _MSC_VER
|
|
|
|
#ifndef _D2D1_3HELPER_H_
|
|
#define _D2D1_3HELPER_H_
|
|
|
|
#if NTDDI_VERSION >= NTDDI_WINTHRESHOLD
|
|
|
|
#ifndef _D2D1_3_H_
|
|
#include <d2d1_3.h>
|
|
#endif // #ifndef _D2D1_3_H_
|
|
|
|
#ifndef D2D_USE_C_DEFINITIONS
|
|
|
|
/*#include <winapifamily.h>*/
|
|
|
|
/*#pragma region Application Family*/
|
|
/*#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)*/
|
|
|
|
namespace D2D1
|
|
{
|
|
COM_DECLSPEC_NOTHROW
|
|
D2D1FORCEINLINE
|
|
D2D1_GRADIENT_MESH_PATCH
|
|
GradientMeshPatch(
|
|
D2D1_POINT_2F point00,
|
|
D2D1_POINT_2F point01,
|
|
D2D1_POINT_2F point02,
|
|
D2D1_POINT_2F point03,
|
|
D2D1_POINT_2F point10,
|
|
D2D1_POINT_2F point11,
|
|
D2D1_POINT_2F point12,
|
|
D2D1_POINT_2F point13,
|
|
D2D1_POINT_2F point20,
|
|
D2D1_POINT_2F point21,
|
|
D2D1_POINT_2F point22,
|
|
D2D1_POINT_2F point23,
|
|
D2D1_POINT_2F point30,
|
|
D2D1_POINT_2F point31,
|
|
D2D1_POINT_2F point32,
|
|
D2D1_POINT_2F point33,
|
|
D2D1_COLOR_F color00,
|
|
D2D1_COLOR_F color03,
|
|
D2D1_COLOR_F color30,
|
|
D2D1_COLOR_F color33,
|
|
D2D1_PATCH_EDGE_MODE topEdgeMode,
|
|
D2D1_PATCH_EDGE_MODE leftEdgeMode,
|
|
D2D1_PATCH_EDGE_MODE bottomEdgeMode,
|
|
D2D1_PATCH_EDGE_MODE rightEdgeMode
|
|
)
|
|
{
|
|
D2D1_GRADIENT_MESH_PATCH newPatch;
|
|
newPatch.point00 = point00;
|
|
newPatch.point01 = point01;
|
|
newPatch.point02 = point02;
|
|
newPatch.point03 = point03;
|
|
newPatch.point10 = point10;
|
|
newPatch.point11 = point11;
|
|
newPatch.point12 = point12;
|
|
newPatch.point13 = point13;
|
|
newPatch.point20 = point20;
|
|
newPatch.point21 = point21;
|
|
newPatch.point22 = point22;
|
|
newPatch.point23 = point23;
|
|
newPatch.point30 = point30;
|
|
newPatch.point31 = point31;
|
|
newPatch.point32 = point32;
|
|
newPatch.point33 = point33;
|
|
|
|
newPatch.color00 = color00;
|
|
newPatch.color03 = color03;
|
|
newPatch.color30 = color30;
|
|
newPatch.color33 = color33;
|
|
|
|
newPatch.topEdgeMode = topEdgeMode;
|
|
newPatch.leftEdgeMode = leftEdgeMode;
|
|
newPatch.bottomEdgeMode = bottomEdgeMode;
|
|
newPatch.rightEdgeMode = rightEdgeMode;
|
|
|
|
return newPatch;
|
|
}
|
|
|
|
COM_DECLSPEC_NOTHROW
|
|
D2D1FORCEINLINE
|
|
D2D1_GRADIENT_MESH_PATCH
|
|
GradientMeshPatchFromCoonsPatch(
|
|
D2D1_POINT_2F point0,
|
|
D2D1_POINT_2F point1,
|
|
D2D1_POINT_2F point2,
|
|
D2D1_POINT_2F point3,
|
|
D2D1_POINT_2F point4,
|
|
D2D1_POINT_2F point5,
|
|
D2D1_POINT_2F point6,
|
|
D2D1_POINT_2F point7,
|
|
D2D1_POINT_2F point8,
|
|
D2D1_POINT_2F point9,
|
|
D2D1_POINT_2F point10,
|
|
D2D1_POINT_2F point11,
|
|
D2D1_COLOR_F color0,
|
|
D2D1_COLOR_F color1,
|
|
D2D1_COLOR_F color2,
|
|
D2D1_COLOR_F color3,
|
|
D2D1_PATCH_EDGE_MODE topEdgeMode,
|
|
D2D1_PATCH_EDGE_MODE leftEdgeMode,
|
|
D2D1_PATCH_EDGE_MODE bottomEdgeMode,
|
|
D2D1_PATCH_EDGE_MODE rightEdgeMode
|
|
)
|
|
{
|
|
D2D1_GRADIENT_MESH_PATCH newPatch;
|
|
newPatch.point00 = point0;
|
|
newPatch.point01 = point1;
|
|
newPatch.point02 = point2;
|
|
newPatch.point03 = point3;
|
|
newPatch.point13 = point4;
|
|
newPatch.point23 = point5;
|
|
newPatch.point33 = point6;
|
|
newPatch.point32 = point7;
|
|
newPatch.point31 = point8;
|
|
newPatch.point30 = point9;
|
|
newPatch.point20 = point10;
|
|
newPatch.point10 = point11;
|
|
|
|
D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
|
|
&point0,
|
|
&point1,
|
|
&point2,
|
|
&point3,
|
|
&point4,
|
|
&point5,
|
|
&point6,
|
|
&point7,
|
|
&point8,
|
|
&point9,
|
|
&point10,
|
|
&point11,
|
|
&newPatch.point11,
|
|
&newPatch.point12,
|
|
&newPatch.point21,
|
|
&newPatch.point22
|
|
);
|
|
|
|
newPatch.color00 = color0;
|
|
newPatch.color03 = color1;
|
|
newPatch.color33 = color2;
|
|
newPatch.color30 = color3;
|
|
newPatch.topEdgeMode = topEdgeMode;
|
|
newPatch.leftEdgeMode = leftEdgeMode;
|
|
newPatch.bottomEdgeMode = bottomEdgeMode;
|
|
newPatch.rightEdgeMode = rightEdgeMode;
|
|
|
|
return newPatch;
|
|
}
|
|
|
|
COM_DECLSPEC_NOTHROW
|
|
D2D1FORCEINLINE
|
|
D2D1_INK_POINT
|
|
InkPoint(
|
|
const D2D1_POINT_2F &point,
|
|
FLOAT radius
|
|
)
|
|
{
|
|
D2D1_INK_POINT inkPoint;
|
|
|
|
inkPoint.x = point.x;
|
|
inkPoint.y = point.y;
|
|
inkPoint.radius = radius;
|
|
|
|
return inkPoint;
|
|
}
|
|
|
|
COM_DECLSPEC_NOTHROW
|
|
D2D1FORCEINLINE
|
|
D2D1_INK_BEZIER_SEGMENT
|
|
InkBezierSegment(
|
|
const D2D1_INK_POINT &point1,
|
|
const D2D1_INK_POINT &point2,
|
|
const D2D1_INK_POINT &point3
|
|
)
|
|
{
|
|
D2D1_INK_BEZIER_SEGMENT inkBezierSegment;
|
|
|
|
inkBezierSegment.point1 = point1;
|
|
inkBezierSegment.point2 = point2;
|
|
inkBezierSegment.point3 = point3;
|
|
|
|
return inkBezierSegment;
|
|
}
|
|
|
|
COM_DECLSPEC_NOTHROW
|
|
D2D1FORCEINLINE
|
|
D2D1_INK_STYLE_PROPERTIES
|
|
InkStyleProperties(
|
|
D2D1_INK_NIB_SHAPE nibShape,
|
|
const D2D1_MATRIX_3X2_F &nibTransform
|
|
)
|
|
{
|
|
D2D1_INK_STYLE_PROPERTIES inkStyleProperties;
|
|
|
|
inkStyleProperties.nibShape = nibShape;
|
|
inkStyleProperties.nibTransform = nibTransform;
|
|
|
|
return inkStyleProperties;
|
|
}
|
|
|
|
COM_DECLSPEC_NOTHROW
|
|
D2D1FORCEINLINE
|
|
D2D1_RECT_U
|
|
InfiniteRectU()
|
|
{
|
|
D2D1_RECT_U rect = { 0u, 0u, UINT_MAX, UINT_MAX };
|
|
|
|
return rect;
|
|
}
|
|
|
|
COM_DECLSPEC_NOTHROW
|
|
D2D1FORCEINLINE
|
|
D2D1_SIMPLE_COLOR_PROFILE
|
|
SimpleColorProfile(
|
|
const D2D1_POINT_2F &redPrimary,
|
|
const D2D1_POINT_2F &greenPrimary,
|
|
const D2D1_POINT_2F &bluePrimary,
|
|
const D2D1_GAMMA1 gamma,
|
|
const D2D1_POINT_2F &whitePointXZ
|
|
)
|
|
{
|
|
D2D1_SIMPLE_COLOR_PROFILE simpleColorProfile;
|
|
|
|
simpleColorProfile.redPrimary = redPrimary;
|
|
simpleColorProfile.greenPrimary = greenPrimary;
|
|
simpleColorProfile.bluePrimary = bluePrimary;
|
|
simpleColorProfile.gamma = gamma;
|
|
simpleColorProfile.whitePointXZ = whitePointXZ;
|
|
|
|
return simpleColorProfile;
|
|
}
|
|
} // namespace D2D1
|
|
|
|
/*#endif*/ /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
|
|
/*#pragma endregion*/
|
|
|
|
#endif // #ifndef D2D_USE_C_DEFINITIONS
|
|
|
|
#endif // #if NTDDI_VERSION >= NTDDI_WINTHRESHOLD
|
|
|
|
#endif // #ifndef _D2D1_HELPER_H_
|
|
|