Bug 756767 - Part 1: Simplify SourceSurfaceD2D and add DataSourceSurface support. r=jrmuizel

This commit is contained in:
Bas Schouten 2012-05-21 17:27:30 +02:00
parent d6881666b8
commit b04ba2bf25
14 changed files with 288 additions and 188 deletions

View File

@ -311,7 +311,7 @@ class DataSourceSurface : public SourceSurface
public:
virtual SurfaceType GetType() const { return SURFACE_DATA; }
/* Get the raw bitmap data of the surface */
virtual unsigned char *GetData() = 0;
virtual uint8_t *GetData() = 0;
/*
* Stride of the surface, distance in bytes between the start of the image
* data belonging to row y and row y+1. This may be negative.
@ -810,7 +810,7 @@ public:
*/
static TemporaryRef<DataSourceSurface>
CreateDataSourceSurface(const IntSize &aSize, SurfaceFormat aFormat);
/*
* This creates a simple data source surface for some existing data. It will
* wrap this data and the data for this source surface. The caller is
@ -818,7 +818,7 @@ public:
* surface.
*/
static TemporaryRef<DataSourceSurface>
CreateDataSourceSurfaceFromData(unsigned char *aData, int32_t aStride,
CreateWrappingDataSourceSurface(uint8_t *aData, int32_t aStride,
const IntSize &aSize, SurfaceFormat aFormat);
#ifdef WIN32

View File

@ -258,25 +258,7 @@ DrawTargetD2D::DrawSurface(SourceSurface *aSurface,
bitmap = srcSurf->GetBitmap();
if (!bitmap) {
if (aSource.width > rt->GetMaximumBitmapSize() ||
aSource.height > rt->GetMaximumBitmapSize()) {
gfxDebug() << "Bitmap source larger than texture size specified. DrawBitmap will silently fail.";
// Don't know how to deal with this yet.
return;
}
int stride = srcSurf->GetSize().width * BytesPerPixel(srcSurf->GetFormat());
unsigned char *data = srcSurf->mRawData +
(uint32_t)aSource.y * stride +
(uint32_t)aSource.x * BytesPerPixel(srcSurf->GetFormat());
D2D1_BITMAP_PROPERTIES props =
D2D1::BitmapProperties(D2D1::PixelFormat(DXGIFormat(srcSurf->GetFormat()), AlphaMode(srcSurf->GetFormat())));
mRT->CreateBitmap(D2D1::SizeU(UINT32(aSource.width), UINT32(aSource.height)), data, stride, props, byRef(bitmap));
srcRect.x -= (uint32_t)aSource.x;
srcRect.y -= (uint32_t)aSource.y;
return;
}
}
break;
@ -287,6 +269,30 @@ DrawTargetD2D::DrawSurface(SourceSurface *aSurface,
AddDependencyOnSource(srcSurf);
}
break;
case SURFACE_DATA:
{
DataSourceSurface *srcSurf = static_cast<DataSourceSurface*>(aSurface);
if (aSource.width > rt->GetMaximumBitmapSize() ||
aSource.height > rt->GetMaximumBitmapSize()) {
gfxDebug() << "Bitmap source larger than texture size specified. DrawBitmap will silently fail.";
// Don't know how to deal with this yet.
return;
}
int stride = srcSurf->Stride();
unsigned char *data = srcSurf->GetData() +
(uint32_t)aSource.y * stride +
(uint32_t)aSource.x * BytesPerPixel(srcSurf->GetFormat());
D2D1_BITMAP_PROPERTIES props =
D2D1::BitmapProperties(D2D1::PixelFormat(DXGIFormat(srcSurf->GetFormat()), AlphaMode(srcSurf->GetFormat())));
mRT->CreateBitmap(D2D1::SizeU(UINT32(aSource.width), UINT32(aSource.height)), data, stride, props, byRef(bitmap));
srcRect.x -= (uint32_t)aSource.x;
srcRect.y -= (uint32_t)aSource.y;
}
break;
}
rt->DrawBitmap(bitmap, D2DRect(aDest), aOptions.mAlpha, D2DFilter(aSurfOptions.mFilter), D2DRect(srcRect));
@ -1980,11 +1986,7 @@ DrawTargetD2D::CreateBrushForPattern(const Pattern &aPattern, Float aAlpha)
bitmap = surf->mBitmap;
if (!bitmap) {
bitmap = CreatePartialBitmapForSurface(surf, mat);
if (!bitmap) {
return NULL;
}
return NULL;
}
}
break;
@ -1996,6 +1998,17 @@ DrawTargetD2D::CreateBrushForPattern(const Pattern &aPattern, Float aAlpha)
AddDependencyOnSource(surf);
}
break;
case SURFACE_DATA:
{
DataSourceSurface *dataSurf =
static_cast<DataSourceSurface*>(pat->mSurface.get());
bitmap = CreatePartialBitmapForSurface(dataSurf, mat);
if (!bitmap) {
return NULL;
}
}
break;
}
mRT->CreateBitmapBrush(bitmap,
@ -2217,7 +2230,7 @@ DrawTargetD2D::CreateTextureForAnalysis(IDWriteGlyphRunAnalysis *aAnalysis, cons
return tex;
}
TemporaryRef<ID2D1Bitmap>
DrawTargetD2D::CreatePartialBitmapForSurface(SourceSurfaceD2D *aSurface, Matrix &aMatrix)
DrawTargetD2D::CreatePartialBitmapForSurface(DataSourceSurface *aSurface, Matrix &aMatrix)
{
RefPtr<ID2D1Bitmap> bitmap;
@ -2239,7 +2252,9 @@ DrawTargetD2D::CreatePartialBitmapForSurface(SourceSurfaceD2D *aSurface, Matrix
rect = invTransform.TransformBounds(rect);
rect.RoundOut();
Rect uploadRect(0, 0, aSurface->mSize.width, aSurface->mSize.height);
IntSize size = aSurface->GetSize();
Rect uploadRect(0, 0, size.width, size.height);
// Calculate the rectangle on the source bitmap that touches our
// surface.
@ -2251,24 +2266,25 @@ DrawTargetD2D::CreatePartialBitmapForSurface(SourceSurfaceD2D *aSurface, Matrix
return NULL;
}
int stride = aSurface->Stride();
if (uploadRect.width <= mRT->GetMaximumBitmapSize() &&
uploadRect.height <= mRT->GetMaximumBitmapSize()) {
int Bpp = BytesPerPixel(aSurface->mFormat);
int stride = Bpp * aSurface->mSize.width;
int Bpp = BytesPerPixel(aSurface->GetFormat());
// A partial upload will suffice.
mRT->CreateBitmap(D2D1::SizeU(uint32_t(uploadRect.width), uint32_t(uploadRect.height)),
aSurface->mRawData + int(uploadRect.x) * 4 + int(uploadRect.y) * stride,
aSurface->GetData() + int(uploadRect.x) * 4 + int(uploadRect.y) * stride,
stride,
D2D1::BitmapProperties(D2DPixelFormat(aSurface->mFormat)),
D2D1::BitmapProperties(D2DPixelFormat(aSurface->GetFormat())),
byRef(bitmap));
aMatrix.Translate(uploadRect.x, uploadRect.y);
return bitmap;
} else {
int Bpp = BytesPerPixel(aSurface->mFormat);
int Bpp = BytesPerPixel(aSurface->GetFormat());
if (Bpp != 4) {
// This shouldn't actually happen in practice!
@ -2276,15 +2292,13 @@ DrawTargetD2D::CreatePartialBitmapForSurface(SourceSurfaceD2D *aSurface, Matrix
return NULL;
}
int stride = Bpp * aSurface->mSize.width;
ImageHalfScaler scaler(aSurface->mRawData, stride, IntSize(aSurface->mSize));
ImageHalfScaler scaler(aSurface->GetData(), stride, size);
// Calculate the maximum width/height of the image post transform.
Point topRight = transform * Point(aSurface->mSize.width, 0);
Point topRight = transform * Point(size.width, 0);
Point topLeft = transform * Point(0, 0);
Point bottomRight = transform * Point(aSurface->mSize.width, aSurface->mSize.height);
Point bottomLeft = transform * Point(0, aSurface->mSize.height);
Point bottomRight = transform * Point(size.width, size.height);
Point bottomLeft = transform * Point(0, size.height);
IntSize scaleSize;
@ -2307,10 +2321,10 @@ DrawTargetD2D::CreatePartialBitmapForSurface(SourceSurfaceD2D *aSurface, Matrix
mRT->CreateBitmap(D2D1::SizeU(newSize.width, newSize.height),
scaler.GetScaledData(), scaler.GetStride(),
D2D1::BitmapProperties(D2DPixelFormat(aSurface->mFormat)),
D2D1::BitmapProperties(D2DPixelFormat(aSurface->GetFormat())),
byRef(bitmap));
aMatrix.Scale(aSurface->mSize.width / newSize.width, aSurface->mSize.height / newSize.height);
aMatrix.Scale(size.width / newSize.width, size.height / newSize.height);
return bitmap;
}
}

View File

@ -180,10 +180,10 @@ private:
TemporaryRef<ID3D10Texture2D> CreateGradientTexture(const GradientStopsD2D *aStops);
TemporaryRef<ID3D10Texture2D> CreateTextureForAnalysis(IDWriteGlyphRunAnalysis *aAnalysis, const IntRect &aBounds);
// This creates a partially uploaded bitmap for a SourceSurfaceD2D that is
// too big to fit in a bitmap. It adjusts the passed Matrix to accomodate the
// partial upload.
TemporaryRef<ID2D1Bitmap> CreatePartialBitmapForSurface(SourceSurfaceD2D *aSurface, Matrix &aMatrix);
// This creates a (partially) uploaded bitmap for a DataSourceSurface. It
// uploads the minimum requirement and possibly downscales. It adjusts the
// input Matrix to compensate.
TemporaryRef<ID2D1Bitmap> CreatePartialBitmapForSurface(DataSourceSurface *aSurface, Matrix &aMatrix);
void SetupEffectForRadialGradient(const RadialGradientPattern *aPattern);
void SetupStateForRendering();

View File

@ -37,6 +37,8 @@
#include "DrawTargetDual.h"
#include "SourceSurfaceRawData.h"
#include "Logging.h"
#ifdef PR_LOGGING
@ -361,5 +363,19 @@ Factory::CreateDrawTargetForCairoSurface(cairo_surface_t* aSurface)
return NULL;
}
TemporaryRef<DataSourceSurface>
Factory::CreateWrappingDataSourceSurface(uint8_t *aData, int32_t aStride,
const IntSize &aSize,
SurfaceFormat aFormat)
{
RefPtr<SourceSurfaceRawData> newSurf = new SourceSurfaceRawData();
if (newSurf->InitWrappingData(aData, aSize, aStride, aFormat, false)) {
return newSurf;
}
return NULL;
}
}
}

View File

@ -132,16 +132,6 @@ static inline D2D1_PIXEL_FORMAT D2DPixelFormat(SurfaceFormat aFormat)
return D2D1::PixelFormat(DXGIFormat(aFormat), AlphaMode(aFormat));
}
static inline int BytesPerPixel(SurfaceFormat aFormat)
{
switch (aFormat) {
case FORMAT_A8:
return 1;
default:
return 4;
}
}
static bool IsPatternSupportedByD2D(const Pattern &aPattern)
{
if (aPattern.GetType() != PATTERN_RADIAL_GRADIENT) {

View File

@ -43,6 +43,7 @@ CPPSRCS = \
ScaledFontBase.cpp \
DrawTargetDual.cpp \
ImageScaling.cpp \
SourceSurfaceRawData.cpp \
$(NULL)
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))

View File

@ -10,13 +10,11 @@ namespace mozilla {
namespace gfx {
SourceSurfaceD2D::SourceSurfaceD2D()
: mRawData(NULL)
{
}
SourceSurfaceD2D::~SourceSurfaceD2D()
{
delete [] mRawData;
}
IntSize
@ -51,15 +49,8 @@ SourceSurfaceD2D::InitFromData(unsigned char *aData,
if ((uint32_t)aSize.width > aRT->GetMaximumBitmapSize() ||
(uint32_t)aSize.height > aRT->GetMaximumBitmapSize()) {
int newStride = BytesPerPixel(aFormat) * aSize.width;
// This should only be called once!
MOZ_ASSERT(!mRawData);
mRawData = new uint8_t[aSize.height * newStride];
for (int y = 0; y < aSize.height; y++) {
memcpy(mRawData + y * newStride, aData + y * aStride, newStride);
}
gfxDebug() << "Bitmap does not fit in texture, saving raw data.";
return true;
gfxDebug() << "Bitmap does not fit in texture.";
return false;
}
D2D1_BITMAP_PROPERTIES props =

View File

@ -39,7 +39,6 @@ private:
friend class DrawTargetD2D;
RefPtr<ID2D1Bitmap> mBitmap;
uint8_t *mRawData;
SurfaceFormat mFormat;
IntSize mSize;
};

View File

@ -208,7 +208,7 @@ DataSourceSurfaceD2DTarget::GetFormat() const
return mFormat;
}
unsigned char*
uint8_t*
DataSourceSurfaceD2DTarget::GetData()
{
EnsureMapped();

View File

@ -63,7 +63,7 @@ public:
virtual SurfaceType GetType() const { return SURFACE_DATA; }
virtual IntSize GetSize() const;
virtual SurfaceFormat GetFormat() const;
virtual unsigned char *GetData();
virtual uint8_t *GetData();
virtual int32_t Stride();
private:

View File

@ -0,0 +1,30 @@
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "SourceSurfaceRawData.h"
#include "Logging.h"
#include "Tools.h"
namespace mozilla {
namespace gfx {
bool
SourceSurfaceRawData::InitWrappingData(uint8_t *aData,
const IntSize &aSize,
int32_t aStride,
SurfaceFormat aFormat,
bool aOwnData)
{
mRawData = aData;
mSize = aSize;
mStride = aStride;
mFormat = aFormat;
mOwnData = aOwnData;
return true;
}
}
}

View File

@ -0,0 +1,44 @@
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef MOZILLA_GFX_SOURCESURFACERAWDATA_H_
#define MOZILLA_GFX_SOURCESURFACERAWDATA_H_
#include "2D.h"
namespace mozilla {
namespace gfx {
class SourceSurfaceRawData : public DataSourceSurface
{
public:
SourceSurfaceRawData() {}
~SourceSurfaceRawData() { if(mOwnData) delete [] mRawData; }
virtual uint8_t *GetData() { return mRawData; }
virtual int32_t Stride() { return mStride; }
virtual SurfaceType GetType() const { return SURFACE_DATA; }
virtual IntSize GetSize() const { return mSize; }
virtual SurfaceFormat GetFormat() const { return mFormat; }
bool InitWrappingData(unsigned char *aData,
const IntSize &aSize,
int32_t aStride,
SurfaceFormat aFormat,
bool aOwnData);
private:
uint8_t *mRawData;
int32_t mStride;
SurfaceFormat mFormat;
IntSize mSize;
bool mOwnData;
};
}
}
#endif /* MOZILLA_GFX_SOURCESURFACERAWDATA_H_ */

View File

@ -52,6 +52,19 @@ Distance(Point aA, Point aB)
return hypotf(aB.x - aA.x, aB.y - aA.y);
}
static inline int
BytesPerPixel(SurfaceFormat aFormat)
{
switch (aFormat) {
case FORMAT_A8:
return 1;
case FORMAT_R5G6B5:
return 2;
default:
return 4;
}
}
}
}

View File

@ -1,119 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<ExecutablePath>$(DXSDK_DIR)\Utilities\bin\x86;$(ExecutablePath)</ExecutablePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PreprocessorDefinitions>USE_SSE2;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);GFX_LOG_DEBUG;GFX_LOG_WARNING;MFBT_STAND_ALONE;XP_WIN</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<Optimization>Disabled</Optimization>
</ClCompile>
<Link>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<EntryPointSymbol>
</EntryPointSymbol>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PreprocessorDefinitions>USE_SSE2;WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="2D.h" />
<ClInclude Include="BaseMargin.h" />
<ClInclude Include="BasePoint.h" />
<ClInclude Include="BaseRect.h" />
<ClInclude Include="BaseSize.h" />
<ClInclude Include="DrawTargetD2D.h" />
<ClInclude Include="DrawTargetDual.h" />
<ClInclude Include="GradientStopsD2D.h" />
<ClInclude Include="HelpersD2D.h" />
<ClInclude Include="ImageScaling.h" />
<ClInclude Include="Logging.h" />
<ClInclude Include="Matrix.h" />
<ClInclude Include="PathD2D.h" />
<ClInclude Include="Point.h" />
<ClInclude Include="Rect.h" />
<ClInclude Include="ScaledFontDWrite.h" />
<ClInclude Include="SourceSurfaceD2D.h" />
<ClInclude Include="SourceSurfaceD2DTarget.h" />
<ClInclude Include="Tools.h" />
<ClInclude Include="Types.h" />
<ClInclude Include="UserData.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="DrawTargetD2D.cpp" />
<ClCompile Include="DrawTargetDual.cpp" />
<ClCompile Include="Factory.cpp" />
<ClCompile Include="ImageScaling.cpp" />
<ClCompile Include="ImageScalingSSE2.cpp" />
<ClCompile Include="Matrix.cpp" />
<ClCompile Include="PathD2D.cpp" />
<ClCompile Include="ScaledFontDWrite.cpp" />
<ClCompile Include="SourceSurfaceD2D.cpp" />
<ClCompile Include="SourceSurfaceD2DTarget.cpp" />
</ItemGroup>
<ItemGroup>
<None Include="Makefile.in" />
<CustomBuild Include="ShadersD2D.fx">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">fxc /Tfx_4_0 /FhShadersD2D.h ShadersD2D.fx /Vn d2deffect</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">ShadersD2D.h</Outputs>
</CustomBuild>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<ExecutablePath>$(DXSDK_DIR)\Utilities\bin\x86;$(ExecutablePath)</ExecutablePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PreprocessorDefinitions>USE_SSE2;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);GFX_LOG_DEBUG;GFX_LOG_WARNING;MFBT_STAND_ALONE;XP_WIN</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<Optimization>Disabled</Optimization>
</ClCompile>
<Link>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<EntryPointSymbol>
</EntryPointSymbol>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PreprocessorDefinitions>USE_SSE2;WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="2D.h" />
<ClInclude Include="BaseMargin.h" />
<ClInclude Include="BasePoint.h" />
<ClInclude Include="BaseRect.h" />
<ClInclude Include="BaseSize.h" />
<ClInclude Include="DrawTargetD2D.h" />
<ClInclude Include="DrawTargetDual.h" />
<ClInclude Include="GradientStopsD2D.h" />
<ClInclude Include="HelpersD2D.h" />
<ClInclude Include="ImageScaling.h" />
<ClInclude Include="Logging.h" />
<ClInclude Include="Matrix.h" />
<ClInclude Include="PathD2D.h" />
<ClInclude Include="Point.h" />
<ClInclude Include="Rect.h" />
<ClInclude Include="ScaledFontDWrite.h" />
<ClInclude Include="SourceSurfaceD2D.h" />
<ClInclude Include="SourceSurfaceD2DTarget.h" />
<ClInclude Include="SourceSurfaceRawData.h" />
<ClInclude Include="Tools.h" />
<ClInclude Include="Types.h" />
<ClInclude Include="UserData.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="DrawTargetD2D.cpp" />
<ClCompile Include="DrawTargetDual.cpp" />
<ClCompile Include="Factory.cpp" />
<ClCompile Include="ImageScaling.cpp" />
<ClCompile Include="ImageScalingSSE2.cpp" />
<ClCompile Include="Matrix.cpp" />
<ClCompile Include="PathD2D.cpp" />
<ClCompile Include="ScaledFontDWrite.cpp" />
<ClCompile Include="SourceSurfaceD2D.cpp" />
<ClCompile Include="SourceSurfaceD2DTarget.cpp" />
<ClCompile Include="SourceSurfaceRawData.cpp" />
</ItemGroup>
<ItemGroup>
<None Include="Makefile.in" />
<CustomBuild Include="ShadersD2D.fx">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">fxc /Tfx_4_0 /FhShadersD2D.h ShadersD2D.fx /Vn d2deffect</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">ShadersD2D.h</Outputs>
</CustomBuild>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>