1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-06 13:16:52 +02:00

Xbox One port (UWP)

This commit is contained in:
Timur Gagiev
2020-11-01 10:56:17 +03:00
parent e928908a41
commit 8cc844e9ea
31 changed files with 1868 additions and 83 deletions

View File

@@ -12,6 +12,10 @@
#define USE_SCREEN_TEX
#endif
#if defined(_GAPI_D3D8) || defined(_GAPI_D3D9) || defined(_GAPI_D3D11)
#define EARLY_CLEAR
#endif
struct ShaderCache {
enum Effect { FX_NONE = 0, FX_UNDERWATER = 1, FX_ALPHA_TEST = 2 };
@@ -86,8 +90,8 @@ struct ShaderCache {
void prepareSky(int fx) {
compile(Core::passSky, Shader::DEFAULT, fx, rsBase);
if (Core::support.tex3D) {
compile(Core::passSky, Shader::SKY_CLOUDS, fx, rsBase);
compile(Core::passSky, Shader::SKY_CLOUDS_AZURE, fx, rsBase);
compile(Core::passSky, Shader::SKY_CLOUDS, fx, rsBase);
compile(Core::passSky, Shader::SKY_AZURE, fx, rsBase);
}
}

View File

@@ -13,7 +13,16 @@
#define USE_CUBEMAP_MIPS
#ifdef WIN32
#ifdef __UWP__
#define _OS_UWP 1
#define _GAPI_D3D11 1
#ifdef __XB1__
#define _OS_XB1
#endif
#undef OS_PTHREAD_MT
#elif WIN32
#define _OS_WIN 1
#define _GAPI_GL 1
//#define _GAPI_D3D9 1
@@ -137,6 +146,12 @@
#define NOMINMAX
#include <xtl.h>
#include <xgraphics.h>
#elif _X360
#define _OS_X360 1
// TODO
#elif _XB1
#define _OS_XB1 1
#define _GAPI_D3D11 1
#endif
#ifndef _OS_PSP
@@ -1014,6 +1029,7 @@ namespace Core {
GAPI::deinit();
NAPI::deinit();
Sound::deinit();
Stream::deinit();
}
void setVSync(bool enable) {

View File

@@ -37,7 +37,11 @@
extern ID3D11Device *device;
extern ID3D11DeviceContext *deviceContext;
#ifdef _OS_XB1
extern IDXGISwapChain1 *swapChain;
#else
extern IDXGISwapChain *swapChain;
#endif
namespace GAPI {
using namespace Core;
@@ -134,7 +138,7 @@ namespace GAPI {
#define SHADER_U(S,P) (underwater ? SHADER(S##_u,P) : SHADER(S,P))
#define SHADER_AU(S,P) ((underwater && alphatest) ? SHADER(S##_au,P) : (alphatest ? SHADER(S##_a,P) : SHADER_U(S,P)))
const uint8 *vSrc, *fSrc;
const uint8 *vSrc = NULL, *fSrc = NULL;
switch (pass) {
case passCompose :
switch (type) {
@@ -161,7 +165,14 @@ namespace GAPI {
default : ASSERT(false);
}
break;
case passSky : SHADER ( gui, v ); SHADER ( gui, f ); break; // TODO
case passSky :
switch (type) {
case 0 : SHADER ( sky, v ); SHADER ( sky, f ); break;
case 1 : SHADER ( sky_clouds, v ); SHADER ( sky_clouds, f ); break;
case 2 : SHADER ( sky_azure, v ); SHADER ( sky_azure, f ); break;
default : ASSERT(false);
}
break;
case passWater :
switch (type) {
case 0 : SHADER ( water_drop, v ); SHADER ( water_drop, f ); break;
@@ -179,7 +190,7 @@ namespace GAPI {
case 1 : SHADER ( filter_downsample, v ); SHADER ( filter_downsample, f ); break;
case 3 : SHADER ( filter_grayscale, v ); SHADER ( filter_grayscale, f ); break;
case 4 : SHADER ( filter_blur, v ); SHADER ( filter_blur, f ); break;
case 5 : SHADER ( filter_anaglyph, v ); SHADER ( filter_anaglyph, f ); break; // TODO anaglyph
case 5 : SHADER ( filter_anaglyph, v ); SHADER ( filter_anaglyph, f ); break;
default : ASSERT(false);
}
break;

View File

@@ -82,8 +82,10 @@ struct OptionItem {
int maxWidth = UI::getTextSize(STR[color + value]).x;
maxWidth = maxWidth / 2 + 8;
x += w * 0.5f;
if (checkValue(value - 1)) UI::specOut(vec2(x - maxWidth - 16.0f, y), 108);
if (checkValue(value + 1)) UI::specOut(vec2(x + maxWidth, y), 109);
if (maxValue != 0xFF) {
if (checkValue(value - 1)) UI::specOut(vec2(x - maxWidth - 16.0f, y), 108);
if (checkValue(value + 1)) UI::specOut(vec2(x + maxWidth, y), 109);
}
}
return y + LINE_HEIGHT;
}
@@ -123,23 +125,51 @@ struct OptionItem {
}
};
#define SETTINGS(x) OFFSETOF(Core::Settings, x)
#define SETTINGS(x) int32(OFFSETOF(Core::Settings, x))
#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_CLOVER) || defined(_OS_PSC) || defined(_OS_XBOX) || defined(_OS_XB1)
#define INV_GAMEPAD_ONLY
#else
#define INV_QUALITY
#endif
#if !(defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_XBOX) || defined(_OS_XB1))
#define INV_STEREO
#endif
#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0)
#define INV_SINGLE_PLAYER
#endif
#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_CLOVER) || defined(_OS_XBOX)
#define INV_GAMEPAD_NO_TRIGGER
#endif
#ifdef INV_SINGLE_PLAYER
#define INV_CTRL_START_OPTION 1
#else
#define INV_CTRL_START_OPTION 2
#endif
#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_RPI) || defined(_OS_GCW0) || defined(_OS_XBOX) || defined(_OS_XB1)
#define INV_VIBRATION
#endif
static const OptionItem optDetail[] = {
OptionItem( OptionItem::TYPE_TITLE, STR_SELECT_DETAIL ),
OptionItem( ),
#ifdef INV_QUALITY
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_FILTER, SETTINGS( detail.filter ), STR_QUALITY_LOW, 0, 2 ),
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_LIGHTING, SETTINGS( detail.lighting ), STR_QUALITY_LOW, 0, 2 ),
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_SHADOWS, SETTINGS( detail.shadows ), STR_QUALITY_LOW, 0, 2 ),
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_WATER, SETTINGS( detail.water ), STR_QUALITY_LOW, 0, 2 ),
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_SIMPLE_ITEMS, SETTINGS( detail.simple ), STR_OFF, 0, 1 ),
#if !defined(_OS_3DS) && !defined(_OS_GCW0)
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_RESOLUTION, SETTINGS( detail.scale ), STR_SCALE_100, 0, 3 ),
#endif
#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_PSP) || defined(_OS_RPI) || defined(_OS_PSV)
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_SIMPLE_ITEMS, SETTINGS( detail.simple ), STR_OFF, 0, 1 ),
#ifdef INV_QUALITY
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_RESOLUTION, SETTINGS( detail.scale ), STR_SCALE_100, 0, 3 ),
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_VSYNC, SETTINGS( detail.vsync ), STR_OFF, 0, 1 ),
#endif
#if !defined(_OS_PSP) && !defined(_OS_PSV) && !defined(_OS_3DS) && !defined(_OS_GCW0)
#ifdef INV_STEREO
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_STEREO, SETTINGS( detail.stereo ), STR_NO_STEREO, 0,
#if defined(_OS_WIN) || defined(_OS_ANDROID)
4 /* with VR option */
@@ -164,28 +194,6 @@ static const OptionItem optSound[] = {
#endif
};
#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_CLOVER) || defined(_OS_PSC) || defined(_OS_XBOX)
#define INV_GAMEPAD_ONLY
#endif
#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0)
#define INV_SINGLE_PLAYER
#endif
#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_CLOVER)
#define INV_GAMEPAD_NO_TRIGGER
#endif
#ifdef INV_SINGLE_PLAYER
#define INV_CTRL_START_OPTION 1
#else
#define INV_CTRL_START_OPTION 2
#endif
#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_RPI) || defined(_OS_GCW0) || defined(_OS_XBOX)
#define INV_VIBRATION
#endif
static const OptionItem optControls[] = {
OptionItem( OptionItem::TYPE_TITLE, STR_SET_CONTROLS ),
OptionItem( ),
@@ -199,7 +207,7 @@ static const OptionItem optControls[] = {
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_RETARGET , SETTINGS( controls[0].retarget ), STR_OFF, 0, 1 ),
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_MULTIAIM , SETTINGS( controls[0].multiaim ), STR_OFF, 0, 1 ),
#ifdef INV_GAMEPAD_ONLY
OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY , SETTINGS( playerIndex ), STR_OPT_CONTROLS_GAMEPAD, 0, 0 ),
OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY , SETTINGS( ctrlIndex ), STR_OPT_CONTROLS_KEYBOARD, 0, 0xFF ),
#else
OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY , SETTINGS( ctrlIndex ), STR_OPT_CONTROLS_KEYBOARD, 0, 1 ),
#endif
@@ -499,14 +507,14 @@ struct Inventory {
case cUp : nextSlot(slot, -1); break;
case cDown : nextSlot(slot, +1); break;
case cLeft :
if (opt->type == OptionItem::TYPE_PARAM && opt->checkValue(value - 1)) {
if (opt->type == OptionItem::TYPE_PARAM && (opt->maxValue != 0xFF) && opt->checkValue(value - 1)) {
value--;
timer = 0.2f;
return opt;
}
break;
case cRight :
if (opt->type == OptionItem::TYPE_PARAM && opt->checkValue(value + 1)) {
if (opt->type == OptionItem::TYPE_PARAM && (opt->maxValue != 0xFF) && opt->checkValue(value + 1)) {
value++;
timer = 0.2f;
return opt;
@@ -2090,7 +2098,7 @@ struct Inventory {
const char *bSelect = STR[STR_KEY_FIRST + ikEnter];
const char *bBack = STR[STR_KEY_FIRST + Core::settings.controls[playerIndex].keys[cInventory].key];
#if defined(_OS_SWITCH) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_XBOX)
#if defined(_OS_SWITCH) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_XBOX) || defined(_OS_XB1)
bSelect = "A";
bBack = "B";
#endif

View File

@@ -1808,7 +1808,7 @@ struct Level : IGame {
}
void renderSky() {
#ifndef _GAPI_GL
#if !defined(_GAPI_GL) && !defined(_GAPI_D3D11)
return;
#endif
ASSERT(mesh->transparent == 0);
@@ -1819,7 +1819,7 @@ struct Level : IGame {
if (level.version & TR::VER_TR1) {
if (Core::settings.detail.lighting < Core::Settings::HIGH || !Core::support.tex3D || !TR::getSkyParams(level.id, skyParams))
return;
type = Shader::SKY_CLOUDS_AZURE;
type = Shader::SKY_AZURE;
} else { // TR2, TR3
if (level.extra.sky == -1)
return;
@@ -1857,7 +1857,7 @@ struct Level : IGame {
time = (time - int(time)) * SKY_TIME_PERIOD;
}
Core::active.shader->setParam(uParam, vec4(skyParams.wind * time, 1.0));
Core::active.shader->setParam(uParam, vec4(skyParams.wind * time * 2.0f, 1.0));
Core::active.shader->setParam(uLightProj, *(mat4*)&skyParams);
Core::active.shader->setParam(uPosScale, skyParams.cloudDownColor, 2);
@@ -2608,7 +2608,18 @@ struct Level : IGame {
Texture *screen = NULL;
if (water) {
screen = (waterCache && waterCache->visible) ? waterCache->getScreenTex() : NULL;
Core::setTarget(screen, NULL, RT_CLEAR_COLOR | RT_CLEAR_DEPTH | RT_STORE_COLOR | (screen ? RT_STORE_DEPTH : 0)); // render to screen texture (FUCK YOU iOS!) or back buffer
int clearFlags = RT_STORE_COLOR;
if (screen) {
clearFlags |= RT_CLEAR_COLOR | RT_CLEAR_DEPTH | RT_STORE_DEPTH;
}
#ifndef EARLY_CLEAR
clearFlags |= RT_CLEAR_COLOR | RT_CLEAR_DEPTH;
#endif
Core::setTarget(screen, NULL, clearFlags); // render to screen texture or back buffer
Core::validateRenderState();
setupBinding();
}
@@ -2649,7 +2660,7 @@ struct Level : IGame {
Core::Pass pass = Core::pass;
if (water && waterCache && waterCache->visible && screen) {
Core::setTarget(NULL, NULL, RT_STORE_COLOR);
Core::setTarget(NULL, NULL, RT_CLEAR_DEPTH | RT_STORE_COLOR);
Core::validateRenderState();
waterCache->blitTexture(screen);
}
@@ -3201,6 +3212,13 @@ struct Level : IGame {
#endif
}
}
#ifdef EARLY_CLEAR
if (view == 0 && eye <= 0) {
Core::setTarget(NULL, NULL, RT_CLEAR_COLOR | RT_CLEAR_DEPTH | RT_STORE_COLOR | RT_STORE_DEPTH);
Core::validateRenderState();
}
#endif
}
void renderEye(int eye, bool showUI, bool invBG) {

View File

@@ -303,7 +303,7 @@ static int tinf_inflate_block_data(TINF_DATA *d, TINF_TREE *lt, TINF_TREE *dt)
/* check for end of block */
if (sym == 256)
{
*d->destLen += d->dest - start;
*d->destLen += (unsigned int)(d->dest - start);
return TINF_OK;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -0,0 +1,51 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.1022
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenLara", "OpenLara.vcxproj", "{0DF8D188-E91B-49C5-A2C5-75C430648B5E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM.ActiveCfg = Debug|ARM
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM.Build.0 = Debug|ARM
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM.Deploy.0 = Debug|ARM
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM64.ActiveCfg = Debug|ARM64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM64.Build.0 = Debug|ARM64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM64.Deploy.0 = Debug|ARM64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x64.ActiveCfg = Debug|x64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x64.Build.0 = Debug|x64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x64.Deploy.0 = Debug|x64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x86.ActiveCfg = Debug|Win32
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x86.Build.0 = Debug|Win32
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x86.Deploy.0 = Debug|Win32
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM.ActiveCfg = Release|ARM
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM.Build.0 = Release|ARM
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM.Deploy.0 = Release|ARM
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM64.ActiveCfg = Release|ARM64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM64.Build.0 = Release|ARM64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM64.Deploy.0 = Release|ARM64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x64.ActiveCfg = Release|x64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x64.Build.0 = Release|x64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x64.Deploy.0 = Release|x64
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x86.ActiveCfg = Release|Win32
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x86.Build.0 = Release|Win32
{0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x86.Deploy.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {037CFBE7-50F7-492C-B712-18C42FD39BE3}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,332 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.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>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{0df8d188-e91b-49c5-a2c5-75c430648b5e}</ProjectGuid>
<Keyword>DirectXApp</Keyword>
<RootNamespace>OpenLara</RootNamespace>
<DefaultLanguage>en-US</DefaultLanguage>
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.16299.0</WindowsTargetPlatformMinVersion>
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v141</PlatformToolset>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v141</PlatformToolset>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v141</PlatformToolset>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v141</PlatformToolset>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VSINSTALLDIR)\Common7\IDE\Extensions\Microsoft\VsGraphics\ImageContentTask.props" />
<Import Project="$(VSINSTALLDIR)\Common7\IDE\Extensions\Microsoft\VsGraphics\MeshContentTask.props" />
<Import Project="$(VSINSTALLDIR)\Common7\IDE\Extensions\Microsoft\VsGraphics\ShaderGraphContentTask.props" />
</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>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<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|ARM'">
<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)'=='Debug|ARM64'">
<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|ARM64'">
<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)'=='Debug|x64'">
<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|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<PackageCertificateKeyFile>OpenLara_TemporaryKey.pfx</PackageCertificateKeyFile>
<GenerateAppInstallerFile>False</GenerateAppInstallerFile>
<AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>
<AppxBundle>Always</AppxBundle>
<AppxBundlePlatforms>x64</AppxBundlePlatforms>
<PackageCertificateThumbprint>0F7D3218F53B8902E26C7E787E16EB3520A9898C</PackageCertificateThumbprint>
<AppInstallerUpdateFrequency>1</AppInstallerUpdateFrequency>
<AppInstallerCheckForUpdateFrequency>OnApplicationRun</AppInstallerCheckForUpdateFrequency>
<AppxSymbolPackageEnabled>False</AppxSymbolPackageEnabled>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<IncludePath>..\..\libs\;..\..\;$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<IncludePath>..\..\libs\;..\..\;$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<Link>
<AdditionalDependencies>d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm; $(VCInstallDir)\lib\arm</AdditionalLibraryDirectories>
</Link>
<ClCompile>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalIncludeDirectories>$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<Link>
<AdditionalDependencies>d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm; $(VCInstallDir)\lib\arm</AdditionalLibraryDirectories>
</Link>
<ClCompile>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalIncludeDirectories>$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<Link>
<AdditionalDependencies>d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm64; $(VCInstallDir)\lib\arm64</AdditionalLibraryDirectories>
</Link>
<ClCompile>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalIncludeDirectories>$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<Link>
<AdditionalDependencies>d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm64; $(VCInstallDir)\lib\arm64</AdditionalLibraryDirectories>
</Link>
<ClCompile>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalIncludeDirectories>$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Link>
<AdditionalDependencies>d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store; $(VCInstallDir)\lib</AdditionalLibraryDirectories>
</Link>
<ClCompile>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalIncludeDirectories>$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Link>
<AdditionalDependencies>d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store; $(VCInstallDir)\lib</AdditionalLibraryDirectories>
</Link>
<ClCompile>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalIncludeDirectories>$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Link>
<AdditionalDependencies>d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\amd64; $(VCInstallDir)\lib\amd64</AdditionalLibraryDirectories>
</Link>
<ClCompile>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalIncludeDirectories>$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Link>
<AdditionalDependencies>vccorlib.lib; msvcrt.lib; d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\amd64; $(VCInstallDir)\lib\amd64</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>vccorlib;msvcrt</IgnoreSpecificDefaultLibraries>
</Link>
<ClCompile>
<AdditionalIncludeDirectories>$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<PreprocessorDefinitions>__XB1__;__UWP__;NOMINMAX;_CRT_SECURE_NO_WARNINGS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\..\animation.h" />
<ClInclude Include="..\..\cache.h" />
<ClInclude Include="..\..\camera.h" />
<ClInclude Include="..\..\character.h" />
<ClInclude Include="..\..\collision.h" />
<ClInclude Include="..\..\controller.h" />
<ClInclude Include="..\..\core.h" />
<ClInclude Include="..\..\debug.h" />
<ClInclude Include="..\..\enemy.h" />
<ClInclude Include="..\..\extension.h" />
<ClInclude Include="..\..\format.h" />
<ClInclude Include="..\..\frustum.h" />
<ClInclude Include="..\..\game.h" />
<ClInclude Include="..\..\gameflow.h" />
<ClInclude Include="..\..\gltf.h" />
<ClInclude Include="..\..\input.h" />
<ClInclude Include="..\..\inventory.h" />
<ClInclude Include="..\..\json.h" />
<ClInclude Include="..\..\lang.h" />
<ClInclude Include="..\..\lara.h" />
<ClInclude Include="..\..\level.h" />
<ClInclude Include="..\..\libs\tinf\tinf.h" />
<ClInclude Include="..\..\mesh.h" />
<ClInclude Include="..\..\napi_dummy.h" />
<ClInclude Include="..\..\napi_socket.h" />
<ClInclude Include="..\..\network.h" />
<ClInclude Include="..\..\objects.h" />
<ClInclude Include="..\..\savegame.h" />
<ClInclude Include="..\..\shader.h" />
<ClInclude Include="..\..\sound.h" />
<ClInclude Include="..\..\sprite.h" />
<ClInclude Include="..\..\texture.h" />
<ClInclude Include="..\..\ui.h" />
<ClInclude Include="..\..\utils.h" />
<ClInclude Include="..\..\video.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\libs\stb_vorbis\stb_vorbis.c">
<CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsWinRT>
</ClCompile>
<ClCompile Include="..\..\libs\tinf\tinflate.c">
<CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsWinRT>
</ClCompile>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest">
<SubType>Designer</SubType>
</AppxManifest>
<None Include="OpenLara_StoreKey.pfx" />
<None Include="OpenLara_TemporaryKey.pfx" />
</ItemGroup>
<ItemGroup>
<None Include="Package.StoreAssociation.xml" />
</ItemGroup>
<ItemGroup>
<Image Include="Assets\LargeTile.scale-200.png" />
<Image Include="Assets\SmallTile.scale-200.png" />
<Image Include="Assets\SplashScreen.scale-200.png" />
<Image Include="Assets\Square150x150Logo.scale-200.png" />
<Image Include="Assets\Square44x44Logo.altform-unplated_targetsize-48.png" />
<Image Include="Assets\Square44x44Logo.scale-200.png" />
<Image Include="Assets\Square44x44Logo.targetsize-48.png" />
<Image Include="Assets\StoreLogo.scale-200.png" />
<Image Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VSINSTALLDIR)\Common7\IDE\Extensions\Microsoft\VsGraphics\ImageContentTask.targets" />
<Import Project="$(VSINSTALLDIR)\Common7\IDE\Extensions\Microsoft\VsGraphics\MeshContentTask.targets" />
<Import Project="$(VSINSTALLDIR)\Common7\IDE\Extensions\Microsoft\VsGraphics\ShaderGraphContentTask.targets" />
</ImportGroup>
</Project>

View File

@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Assets">
<UniqueIdentifier>db6ab835-f1cb-4efb-94eb-2bdfd0c3a3d2</UniqueIdentifier>
<Extensions>bmp;fbx;gif;jpg;jpeg;tga;tiff;tif;png</Extensions>
</Filter>
<Filter Include="libs">
<UniqueIdentifier>{ba6867bc-3dac-49f7-b628-c02d534f8825}</UniqueIdentifier>
</Filter>
<Filter Include="libs\stb_vorbis">
<UniqueIdentifier>{d606bd3a-145c-432f-ae5a-66dcb178b466}</UniqueIdentifier>
</Filter>
<Filter Include="libs\tinf">
<UniqueIdentifier>{d5e2e716-2bc5-43a1-bebc-4c5631d0b1bc}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
<ClCompile Include="..\..\libs\tinf\tinflate.c">
<Filter>libs\tinf</Filter>
</ClCompile>
<ClCompile Include="..\..\libs\stb_vorbis\stb_vorbis.c">
<Filter>libs\stb_vorbis</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\libs\tinf\tinf.h">
<Filter>libs\tinf</Filter>
</ClInclude>
<ClInclude Include="..\..\utils.h" />
<ClInclude Include="..\..\animation.h" />
<ClInclude Include="..\..\cache.h" />
<ClInclude Include="..\..\camera.h" />
<ClInclude Include="..\..\character.h" />
<ClInclude Include="..\..\collision.h" />
<ClInclude Include="..\..\controller.h" />
<ClInclude Include="..\..\core.h" />
<ClInclude Include="..\..\debug.h" />
<ClInclude Include="..\..\enemy.h" />
<ClInclude Include="..\..\extension.h" />
<ClInclude Include="..\..\format.h" />
<ClInclude Include="..\..\frustum.h" />
<ClInclude Include="..\..\game.h" />
<ClInclude Include="..\..\gameflow.h" />
<ClInclude Include="..\..\gltf.h" />
<ClInclude Include="..\..\input.h" />
<ClInclude Include="..\..\inventory.h" />
<ClInclude Include="..\..\json.h" />
<ClInclude Include="..\..\lang.h" />
<ClInclude Include="..\..\lara.h" />
<ClInclude Include="..\..\level.h" />
<ClInclude Include="..\..\mesh.h" />
<ClInclude Include="..\..\napi_dummy.h" />
<ClInclude Include="..\..\napi_socket.h" />
<ClInclude Include="..\..\network.h" />
<ClInclude Include="..\..\objects.h" />
<ClInclude Include="..\..\savegame.h" />
<ClInclude Include="..\..\shader.h" />
<ClInclude Include="..\..\sound.h" />
<ClInclude Include="..\..\sprite.h" />
<ClInclude Include="..\..\texture.h" />
<ClInclude Include="..\..\ui.h" />
<ClInclude Include="..\..\video.h" />
</ItemGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest" />
</ItemGroup>
<ItemGroup>
<None Include="OpenLara_TemporaryKey.pfx" />
<None Include="Package.StoreAssociation.xml" />
<None Include="OpenLara_StoreKey.pfx" />
</ItemGroup>
<ItemGroup>
<Image Include="Assets\LargeTile.scale-200.png">
<Filter>Assets</Filter>
</Image>
<Image Include="Assets\SmallTile.scale-200.png">
<Filter>Assets</Filter>
</Image>
<Image Include="Assets\SplashScreen.scale-200.png">
<Filter>Assets</Filter>
</Image>
<Image Include="Assets\Square44x44Logo.altform-unplated_targetsize-48.png">
<Filter>Assets</Filter>
</Image>
<Image Include="Assets\Square44x44Logo.scale-200.png">
<Filter>Assets</Filter>
</Image>
<Image Include="Assets\Square44x44Logo.targetsize-48.png">
<Filter>Assets</Filter>
</Image>
<Image Include="Assets\Square150x150Logo.scale-200.png">
<Filter>Assets</Filter>
</Image>
<Image Include="Assets\StoreLogo.scale-200.png">
<Filter>Assets</Filter>
</Image>
<Image Include="Assets\Wide310x150Logo.scale-200.png">
<Filter>Assets</Filter>
</Image>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<DebuggerFlavor>UWPRemoteDebugger</DebuggerFlavor>
<DebuggerMachineName>192.168.1.49</DebuggerMachineName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<DebuggerFlavor>AppHostLocalDebugger</DebuggerFlavor>
<DebuggerMachineName>192.168.1.49</DebuggerMachineName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<DebuggerFlavor>UWPRemoteDebugger</DebuggerFlavor>
<DebuggerMachineName>192.168.1.49</DebuggerMachineName>
</PropertyGroup>
<PropertyGroup>
<AppxPackageIsForStore>True</AppxPackageIsForStore>
<AppxShowAllApps>False</AppxShowAllApps>
<AppxBuildConfigurationSelection>x64</AppxBuildConfigurationSelection>
<PackageOptionalProjectsInIdeBuilds>False</PackageOptionalProjectsInIdeBuilds>
<RemoteMachine0>192.168.1.49</RemoteMachine0>
<UseAuthentication0>True</UseAuthentication0>
</PropertyGroup>
</Project>

Binary file not shown.

View File

@@ -0,0 +1,371 @@
<?xml version="1.0" encoding="utf-8"?>
<StoreAssociation xmlns="http://schemas.microsoft.com/appx/2010/storeassociation">
<Publisher>CN=EAAE5CD2-DCE4-4EC0-B98D-40B753FDC939</Publisher>
<PublisherDisplayName>XProger</PublisherDisplayName>
<DeveloperAccountType>MSA</DeveloperAccountType>
<GeneratePackageHash>http://www.w3.org/2001/04/xmlenc#sha256</GeneratePackageHash>
<SupportedLocales>
<Language Code="af" InMinimumRequirementSet="true" />
<Language Code="af-za" InMinimumRequirementSet="true" />
<Language Code="am" InMinimumRequirementSet="true" />
<Language Code="am-et" InMinimumRequirementSet="true" />
<Language Code="ar" InMinimumRequirementSet="true" />
<Language Code="ar-ae" InMinimumRequirementSet="true" />
<Language Code="ar-bh" InMinimumRequirementSet="true" />
<Language Code="ar-dz" InMinimumRequirementSet="true" />
<Language Code="ar-eg" InMinimumRequirementSet="true" />
<Language Code="ar-iq" InMinimumRequirementSet="true" />
<Language Code="ar-jo" InMinimumRequirementSet="true" />
<Language Code="ar-kw" InMinimumRequirementSet="true" />
<Language Code="ar-lb" InMinimumRequirementSet="true" />
<Language Code="ar-ly" InMinimumRequirementSet="true" />
<Language Code="ar-ma" InMinimumRequirementSet="true" />
<Language Code="ar-om" InMinimumRequirementSet="true" />
<Language Code="ar-qa" InMinimumRequirementSet="true" />
<Language Code="ar-sa" InMinimumRequirementSet="true" />
<Language Code="ar-sy" InMinimumRequirementSet="true" />
<Language Code="ar-tn" InMinimumRequirementSet="true" />
<Language Code="ar-ye" InMinimumRequirementSet="true" />
<Language Code="as" InMinimumRequirementSet="true" />
<Language Code="as-in" InMinimumRequirementSet="true" />
<Language Code="az" InMinimumRequirementSet="true" />
<Language Code="az-arab" InMinimumRequirementSet="true" />
<Language Code="az-arab-az" InMinimumRequirementSet="true" />
<Language Code="az-cyrl" InMinimumRequirementSet="true" />
<Language Code="az-cyrl-az" InMinimumRequirementSet="true" />
<Language Code="az-latn" InMinimumRequirementSet="true" />
<Language Code="az-latn-az" InMinimumRequirementSet="true" />
<Language Code="be" InMinimumRequirementSet="true" />
<Language Code="be-by" InMinimumRequirementSet="true" />
<Language Code="bg" InMinimumRequirementSet="true" />
<Language Code="bg-bg" InMinimumRequirementSet="true" />
<Language Code="bn" InMinimumRequirementSet="true" />
<Language Code="bn-bd" InMinimumRequirementSet="true" />
<Language Code="bn-in" InMinimumRequirementSet="true" />
<Language Code="bs" InMinimumRequirementSet="true" />
<Language Code="bs-cyrl" InMinimumRequirementSet="true" />
<Language Code="bs-cyrl-ba" InMinimumRequirementSet="true" />
<Language Code="bs-latn" InMinimumRequirementSet="true" />
<Language Code="bs-latn-ba" InMinimumRequirementSet="true" />
<Language Code="ca" InMinimumRequirementSet="true" />
<Language Code="ca-es" InMinimumRequirementSet="true" />
<Language Code="ca-es-valencia" InMinimumRequirementSet="true" />
<Language Code="chr-cher" InMinimumRequirementSet="true" />
<Language Code="chr-cher-us" InMinimumRequirementSet="true" />
<Language Code="chr-latn" InMinimumRequirementSet="true" />
<Language Code="cs" InMinimumRequirementSet="true" />
<Language Code="cs-cz" InMinimumRequirementSet="true" />
<Language Code="cy" InMinimumRequirementSet="true" />
<Language Code="cy-gb" InMinimumRequirementSet="true" />
<Language Code="da" InMinimumRequirementSet="true" />
<Language Code="da-dk" InMinimumRequirementSet="true" />
<Language Code="de" InMinimumRequirementSet="true" />
<Language Code="de-at" InMinimumRequirementSet="true" />
<Language Code="de-ch" InMinimumRequirementSet="true" />
<Language Code="de-de" InMinimumRequirementSet="true" />
<Language Code="de-li" InMinimumRequirementSet="true" />
<Language Code="de-lu" InMinimumRequirementSet="true" />
<Language Code="el" InMinimumRequirementSet="true" />
<Language Code="el-gr" InMinimumRequirementSet="true" />
<Language Code="en" InMinimumRequirementSet="true" />
<Language Code="en-011" InMinimumRequirementSet="true" />
<Language Code="en-014" InMinimumRequirementSet="true" />
<Language Code="en-018" InMinimumRequirementSet="true" />
<Language Code="en-021" InMinimumRequirementSet="true" />
<Language Code="en-029" InMinimumRequirementSet="true" />
<Language Code="en-053" InMinimumRequirementSet="true" />
<Language Code="en-au" InMinimumRequirementSet="true" />
<Language Code="en-bz" InMinimumRequirementSet="true" />
<Language Code="en-ca" InMinimumRequirementSet="true" />
<Language Code="en-gb" InMinimumRequirementSet="true" />
<Language Code="en-hk" InMinimumRequirementSet="true" />
<Language Code="en-id" InMinimumRequirementSet="true" />
<Language Code="en-ie" InMinimumRequirementSet="true" />
<Language Code="en-in" InMinimumRequirementSet="true" />
<Language Code="en-jm" InMinimumRequirementSet="true" />
<Language Code="en-kz" InMinimumRequirementSet="true" />
<Language Code="en-mt" InMinimumRequirementSet="true" />
<Language Code="en-my" InMinimumRequirementSet="true" />
<Language Code="en-nz" InMinimumRequirementSet="true" />
<Language Code="en-ph" InMinimumRequirementSet="true" />
<Language Code="en-pk" InMinimumRequirementSet="true" />
<Language Code="en-sg" InMinimumRequirementSet="true" />
<Language Code="en-tt" InMinimumRequirementSet="true" />
<Language Code="en-us" InMinimumRequirementSet="true" />
<Language Code="en-vn" InMinimumRequirementSet="true" />
<Language Code="en-za" InMinimumRequirementSet="true" />
<Language Code="en-zw" InMinimumRequirementSet="true" />
<Language Code="es" InMinimumRequirementSet="true" />
<Language Code="es-019" InMinimumRequirementSet="true" />
<Language Code="es-419" InMinimumRequirementSet="true" />
<Language Code="es-ar" InMinimumRequirementSet="true" />
<Language Code="es-bo" InMinimumRequirementSet="true" />
<Language Code="es-cl" InMinimumRequirementSet="true" />
<Language Code="es-co" InMinimumRequirementSet="true" />
<Language Code="es-cr" InMinimumRequirementSet="true" />
<Language Code="es-do" InMinimumRequirementSet="true" />
<Language Code="es-ec" InMinimumRequirementSet="true" />
<Language Code="es-es" InMinimumRequirementSet="true" />
<Language Code="es-gt" InMinimumRequirementSet="true" />
<Language Code="es-hn" InMinimumRequirementSet="true" />
<Language Code="es-mx" InMinimumRequirementSet="true" />
<Language Code="es-ni" InMinimumRequirementSet="true" />
<Language Code="es-pa" InMinimumRequirementSet="true" />
<Language Code="es-pe" InMinimumRequirementSet="true" />
<Language Code="es-pr" InMinimumRequirementSet="true" />
<Language Code="es-py" InMinimumRequirementSet="true" />
<Language Code="es-sv" InMinimumRequirementSet="true" />
<Language Code="es-us" InMinimumRequirementSet="true" />
<Language Code="es-uy" InMinimumRequirementSet="true" />
<Language Code="es-ve" InMinimumRequirementSet="true" />
<Language Code="et" InMinimumRequirementSet="true" />
<Language Code="et-ee" InMinimumRequirementSet="true" />
<Language Code="eu" InMinimumRequirementSet="true" />
<Language Code="eu-es" InMinimumRequirementSet="true" />
<Language Code="fa" InMinimumRequirementSet="true" />
<Language Code="fa-ir" InMinimumRequirementSet="true" />
<Language Code="fi" InMinimumRequirementSet="true" />
<Language Code="fi-fi" InMinimumRequirementSet="true" />
<Language Code="fil" InMinimumRequirementSet="true" />
<Language Code="fil-latn" InMinimumRequirementSet="true" />
<Language Code="fil-ph" InMinimumRequirementSet="true" />
<Language Code="fr" InMinimumRequirementSet="true" />
<Language Code="fr-011" InMinimumRequirementSet="true" />
<Language Code="fr-015" InMinimumRequirementSet="true" />
<Language Code="fr-021" InMinimumRequirementSet="true" />
<Language Code="fr-029" InMinimumRequirementSet="true" />
<Language Code="fr-155" InMinimumRequirementSet="true" />
<Language Code="fr-be" InMinimumRequirementSet="true" />
<Language Code="fr-ca" InMinimumRequirementSet="true" />
<Language Code="fr-cd" InMinimumRequirementSet="true" />
<Language Code="fr-ch" InMinimumRequirementSet="true" />
<Language Code="fr-ci" InMinimumRequirementSet="true" />
<Language Code="fr-cm" InMinimumRequirementSet="true" />
<Language Code="fr-fr" InMinimumRequirementSet="true" />
<Language Code="fr-ht" InMinimumRequirementSet="true" />
<Language Code="fr-lu" InMinimumRequirementSet="true" />
<Language Code="fr-ma" InMinimumRequirementSet="true" />
<Language Code="fr-mc" InMinimumRequirementSet="true" />
<Language Code="fr-ml" InMinimumRequirementSet="true" />
<Language Code="fr-re" InMinimumRequirementSet="true" />
<Language Code="frc-latn" InMinimumRequirementSet="true" />
<Language Code="frp-latn" InMinimumRequirementSet="true" />
<Language Code="ga" InMinimumRequirementSet="true" />
<Language Code="ga-ie" InMinimumRequirementSet="true" />
<Language Code="gd-gb" InMinimumRequirementSet="true" />
<Language Code="gd-latn" InMinimumRequirementSet="true" />
<Language Code="gl" InMinimumRequirementSet="true" />
<Language Code="gl-es" InMinimumRequirementSet="true" />
<Language Code="gu" InMinimumRequirementSet="true" />
<Language Code="gu-in" InMinimumRequirementSet="true" />
<Language Code="ha" InMinimumRequirementSet="true" />
<Language Code="ha-latn" InMinimumRequirementSet="true" />
<Language Code="ha-latn-ng" InMinimumRequirementSet="true" />
<Language Code="he" InMinimumRequirementSet="true" />
<Language Code="he-il" InMinimumRequirementSet="true" />
<Language Code="hi" InMinimumRequirementSet="true" />
<Language Code="hi-in" InMinimumRequirementSet="true" />
<Language Code="hr" InMinimumRequirementSet="true" />
<Language Code="hr-ba" InMinimumRequirementSet="true" />
<Language Code="hr-hr" InMinimumRequirementSet="true" />
<Language Code="hu" InMinimumRequirementSet="true" />
<Language Code="hu-hu" InMinimumRequirementSet="true" />
<Language Code="hy" InMinimumRequirementSet="true" />
<Language Code="hy-am" InMinimumRequirementSet="true" />
<Language Code="id" InMinimumRequirementSet="true" />
<Language Code="id-id" InMinimumRequirementSet="true" />
<Language Code="ig-latn" InMinimumRequirementSet="true" />
<Language Code="ig-ng" InMinimumRequirementSet="true" />
<Language Code="is" InMinimumRequirementSet="true" />
<Language Code="is-is" InMinimumRequirementSet="true" />
<Language Code="it" InMinimumRequirementSet="true" />
<Language Code="it-ch" InMinimumRequirementSet="true" />
<Language Code="it-it" InMinimumRequirementSet="true" />
<Language Code="iu-cans" InMinimumRequirementSet="true" />
<Language Code="iu-latn" InMinimumRequirementSet="true" />
<Language Code="iu-latn-ca" InMinimumRequirementSet="true" />
<Language Code="ja" InMinimumRequirementSet="true" />
<Language Code="ja-jp" InMinimumRequirementSet="true" />
<Language Code="ka" InMinimumRequirementSet="true" />
<Language Code="ka-ge" InMinimumRequirementSet="true" />
<Language Code="kk" InMinimumRequirementSet="true" />
<Language Code="kk-kz" InMinimumRequirementSet="true" />
<Language Code="km" InMinimumRequirementSet="true" />
<Language Code="km-kh" InMinimumRequirementSet="true" />
<Language Code="kn" InMinimumRequirementSet="true" />
<Language Code="kn-in" InMinimumRequirementSet="true" />
<Language Code="ko" InMinimumRequirementSet="true" />
<Language Code="ko-kr" InMinimumRequirementSet="true" />
<Language Code="kok" InMinimumRequirementSet="true" />
<Language Code="kok-in" InMinimumRequirementSet="true" />
<Language Code="ku-arab" InMinimumRequirementSet="true" />
<Language Code="ku-arab-iq" InMinimumRequirementSet="true" />
<Language Code="ky-cyrl" InMinimumRequirementSet="true" />
<Language Code="ky-kg" InMinimumRequirementSet="true" />
<Language Code="lb" InMinimumRequirementSet="true" />
<Language Code="lb-lu" InMinimumRequirementSet="true" />
<Language Code="lo" InMinimumRequirementSet="true" />
<Language Code="lo-la" InMinimumRequirementSet="true" />
<Language Code="lt" InMinimumRequirementSet="true" />
<Language Code="lt-lt" InMinimumRequirementSet="true" />
<Language Code="lv" InMinimumRequirementSet="true" />
<Language Code="lv-lv" InMinimumRequirementSet="true" />
<Language Code="mi" InMinimumRequirementSet="true" />
<Language Code="mi-latn" InMinimumRequirementSet="true" />
<Language Code="mi-nz" InMinimumRequirementSet="true" />
<Language Code="mk" InMinimumRequirementSet="true" />
<Language Code="mk-mk" InMinimumRequirementSet="true" />
<Language Code="ml" InMinimumRequirementSet="true" />
<Language Code="ml-in" InMinimumRequirementSet="true" />
<Language Code="mn-cyrl" InMinimumRequirementSet="true" />
<Language Code="mn-mn" InMinimumRequirementSet="true" />
<Language Code="mn-mong" InMinimumRequirementSet="true" />
<Language Code="mn-phag" InMinimumRequirementSet="true" />
<Language Code="mr" InMinimumRequirementSet="true" />
<Language Code="mr-in" InMinimumRequirementSet="true" />
<Language Code="ms" InMinimumRequirementSet="true" />
<Language Code="ms-bn" InMinimumRequirementSet="true" />
<Language Code="ms-my" InMinimumRequirementSet="true" />
<Language Code="mt" InMinimumRequirementSet="true" />
<Language Code="mt-mt" InMinimumRequirementSet="true" />
<Language Code="nb" InMinimumRequirementSet="true" />
<Language Code="nb-no" InMinimumRequirementSet="true" />
<Language Code="ne" InMinimumRequirementSet="true" />
<Language Code="ne-np" InMinimumRequirementSet="true" />
<Language Code="nl" InMinimumRequirementSet="true" />
<Language Code="nl-be" InMinimumRequirementSet="true" />
<Language Code="nl-nl" InMinimumRequirementSet="true" />
<Language Code="nn" InMinimumRequirementSet="true" />
<Language Code="nn-no" InMinimumRequirementSet="true" />
<Language Code="no" InMinimumRequirementSet="true" />
<Language Code="no-no" InMinimumRequirementSet="true" />
<Language Code="nso" InMinimumRequirementSet="true" />
<Language Code="nso-za" InMinimumRequirementSet="true" />
<Language Code="om" InMinimumRequirementSet="false" />
<Language Code="om-et" InMinimumRequirementSet="false" />
<Language Code="or" InMinimumRequirementSet="true" />
<Language Code="or-in" InMinimumRequirementSet="true" />
<Language Code="pa" InMinimumRequirementSet="true" />
<Language Code="pa-arab" InMinimumRequirementSet="true" />
<Language Code="pa-arab-pk" InMinimumRequirementSet="true" />
<Language Code="pa-deva" InMinimumRequirementSet="true" />
<Language Code="pa-in" InMinimumRequirementSet="true" />
<Language Code="pl" InMinimumRequirementSet="true" />
<Language Code="pl-pl" InMinimumRequirementSet="true" />
<Language Code="prs" InMinimumRequirementSet="true" />
<Language Code="prs-af" InMinimumRequirementSet="true" />
<Language Code="prs-arab" InMinimumRequirementSet="true" />
<Language Code="pt" InMinimumRequirementSet="true" />
<Language Code="pt-br" InMinimumRequirementSet="true" />
<Language Code="pt-pt" InMinimumRequirementSet="true" />
<Language Code="quc-latn" InMinimumRequirementSet="true" />
<Language Code="qut-gt" InMinimumRequirementSet="true" />
<Language Code="qut-latn" InMinimumRequirementSet="true" />
<Language Code="quz" InMinimumRequirementSet="true" />
<Language Code="quz-bo" InMinimumRequirementSet="true" />
<Language Code="quz-ec" InMinimumRequirementSet="true" />
<Language Code="quz-pe" InMinimumRequirementSet="true" />
<Language Code="ro" InMinimumRequirementSet="true" />
<Language Code="ro-ro" InMinimumRequirementSet="true" />
<Language Code="ru" InMinimumRequirementSet="true" />
<Language Code="ru-ru" InMinimumRequirementSet="true" />
<Language Code="rw" InMinimumRequirementSet="true" />
<Language Code="rw-rw" InMinimumRequirementSet="true" />
<Language Code="sd-arab" InMinimumRequirementSet="true" />
<Language Code="sd-arab-pk" InMinimumRequirementSet="true" />
<Language Code="sd-deva" InMinimumRequirementSet="true" />
<Language Code="si" InMinimumRequirementSet="true" />
<Language Code="si-lk" InMinimumRequirementSet="true" />
<Language Code="sk" InMinimumRequirementSet="true" />
<Language Code="sk-sk" InMinimumRequirementSet="true" />
<Language Code="sl" InMinimumRequirementSet="true" />
<Language Code="sl-si" InMinimumRequirementSet="true" />
<Language Code="sq" InMinimumRequirementSet="true" />
<Language Code="sq-al" InMinimumRequirementSet="true" />
<Language Code="sr" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-ba" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-cs" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-me" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-rs" InMinimumRequirementSet="true" />
<Language Code="sr-latn" InMinimumRequirementSet="true" />
<Language Code="sr-latn-ba" InMinimumRequirementSet="true" />
<Language Code="sr-latn-cs" InMinimumRequirementSet="true" />
<Language Code="sr-latn-me" InMinimumRequirementSet="true" />
<Language Code="sr-latn-rs" InMinimumRequirementSet="true" />
<Language Code="sv" InMinimumRequirementSet="true" />
<Language Code="sv-fi" InMinimumRequirementSet="true" />
<Language Code="sv-se" InMinimumRequirementSet="true" />
<Language Code="sw" InMinimumRequirementSet="true" />
<Language Code="sw-ke" InMinimumRequirementSet="true" />
<Language Code="ta" InMinimumRequirementSet="true" />
<Language Code="ta-in" InMinimumRequirementSet="true" />
<Language Code="te" InMinimumRequirementSet="true" />
<Language Code="te-in" InMinimumRequirementSet="true" />
<Language Code="tg-arab" InMinimumRequirementSet="true" />
<Language Code="tg-cyrl" InMinimumRequirementSet="true" />
<Language Code="tg-cyrl-tj" InMinimumRequirementSet="true" />
<Language Code="tg-latn" InMinimumRequirementSet="true" />
<Language Code="th" InMinimumRequirementSet="true" />
<Language Code="th-th" InMinimumRequirementSet="true" />
<Language Code="ti" InMinimumRequirementSet="true" />
<Language Code="ti-et" InMinimumRequirementSet="true" />
<Language Code="tk-cyrl" InMinimumRequirementSet="true" />
<Language Code="tk-cyrl-tr" InMinimumRequirementSet="true" />
<Language Code="tk-latn" InMinimumRequirementSet="true" />
<Language Code="tk-latn-tr" InMinimumRequirementSet="true" />
<Language Code="tk-tm" InMinimumRequirementSet="true" />
<Language Code="tn" InMinimumRequirementSet="true" />
<Language Code="tn-bw" InMinimumRequirementSet="true" />
<Language Code="tn-za" InMinimumRequirementSet="true" />
<Language Code="tr" InMinimumRequirementSet="true" />
<Language Code="tr-tr" InMinimumRequirementSet="true" />
<Language Code="tt-arab" InMinimumRequirementSet="true" />
<Language Code="tt-cyrl" InMinimumRequirementSet="true" />
<Language Code="tt-latn" InMinimumRequirementSet="true" />
<Language Code="tt-ru" InMinimumRequirementSet="true" />
<Language Code="ug-arab" InMinimumRequirementSet="true" />
<Language Code="ug-cn" InMinimumRequirementSet="true" />
<Language Code="ug-cyrl" InMinimumRequirementSet="true" />
<Language Code="ug-latn" InMinimumRequirementSet="true" />
<Language Code="uk" InMinimumRequirementSet="true" />
<Language Code="uk-ua" InMinimumRequirementSet="true" />
<Language Code="ur" InMinimumRequirementSet="true" />
<Language Code="ur-pk" InMinimumRequirementSet="true" />
<Language Code="uz" InMinimumRequirementSet="true" />
<Language Code="uz-cyrl" InMinimumRequirementSet="true" />
<Language Code="uz-latn" InMinimumRequirementSet="true" />
<Language Code="uz-latn-uz" InMinimumRequirementSet="true" />
<Language Code="vi" InMinimumRequirementSet="true" />
<Language Code="vi-vn" InMinimumRequirementSet="true" />
<Language Code="wo" InMinimumRequirementSet="true" />
<Language Code="wo-sn" InMinimumRequirementSet="true" />
<Language Code="xh" InMinimumRequirementSet="true" />
<Language Code="xh-za" InMinimumRequirementSet="true" />
<Language Code="yo-latn" InMinimumRequirementSet="true" />
<Language Code="yo-ng" InMinimumRequirementSet="true" />
<Language Code="zh" InMinimumRequirementSet="true" />
<Language Code="zh-cn" InMinimumRequirementSet="true" />
<Language Code="zh-hans" InMinimumRequirementSet="true" />
<Language Code="zh-hans-cn" InMinimumRequirementSet="true" />
<Language Code="zh-hans-sg" InMinimumRequirementSet="true" />
<Language Code="zh-hant" InMinimumRequirementSet="true" />
<Language Code="zh-hant-hk" InMinimumRequirementSet="true" />
<Language Code="zh-hant-mo" InMinimumRequirementSet="true" />
<Language Code="zh-hant-tw" InMinimumRequirementSet="true" />
<Language Code="zh-hk" InMinimumRequirementSet="true" />
<Language Code="zh-mo" InMinimumRequirementSet="true" />
<Language Code="zh-sg" InMinimumRequirementSet="true" />
<Language Code="zh-tw" InMinimumRequirementSet="true" />
<Language Code="zu" InMinimumRequirementSet="true" />
<Language Code="zu-za" InMinimumRequirementSet="true" />
</SupportedLocales>
<ProductReservedInfo>
<MainPackageIdentityName>39822XProger.OpenLara</MainPackageIdentityName>
<ReservedNames>
<ReservedName>OpenLara</ReservedName>
</ReservedNames>
</ProductReservedInfo>
<AccountPackageIdentityNames />
<PackageInfoList LandingUrl="https://developer.microsoft.com/dashboard/Application?appId=9NDJK51DB5HC" />
</StoreAssociation>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
<Identity Name="OpenLara" Publisher="CN=XProger" Version="1.0.0.0" ProcessorArchitecture="x64" />
<mp:PhoneIdentity PhoneProductId="8edd1bfb-cba6-4709-9080-c0705cb96847" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
<Properties>
<DisplayName>OpenLara</DisplayName>
<PublisherDisplayName>XProger</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.15063.0" MaxVersionTested="10.0.18362.0" />
<PackageDependency Name="Microsoft.VCLibs.140.00" MinVersion="14.0.27810.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
</Dependencies>
<Resources>
<Resource Language="EN-US" />
<Resource uap:Scale="200" />
</Resources>
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="OpenLara.App">
<uap:VisualElements DisplayName="OpenLara" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="Classic Tomb Raider open-source engine" BackgroundColor="black">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" Square310x310Logo="Assets\LargeTile.png" Square71x71Logo="Assets\SmallTile.png" ShortName="OpenLara">
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="wide310x150Logo" />
</uap:ShowNameOnTiles>
</uap:DefaultTile>
<uap:SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="black" />
<uap:InitialRotationPreference>
<uap:Rotation Preference="landscape" />
</uap:InitialRotationPreference>
</uap:VisualElements>
</Application>
</Applications>
</Package>

503
src/platform/xb1/main.cpp Normal file
View File

@@ -0,0 +1,503 @@
#include <ppltasks.h>
#include <xaudio2.h>
#include <wrl/client.h>
#include <dxgi1_4.h>
#include "game.h"
using namespace Concurrency;
using namespace Windows;
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::UI::Core;
using namespace Windows::Foundation;
using namespace Windows::Graphics;
using namespace Windows::Gaming::Input;
using namespace Windows::Storage;
using namespace Windows::Globalization;
using namespace Windows::System::UserProfile;
using namespace Microsoft::WRL;
ID3D11Device *device;
ID3D11DeviceContext *deviceContext;
IDXGISwapChain1 *swapChain;
// multi-threading
void* osMutexInit()
{
CRITICAL_SECTION *CS = new CRITICAL_SECTION();
InitializeCriticalSection(CS);
return CS;
}
void osMutexFree(void *obj)
{
DeleteCriticalSection((CRITICAL_SECTION*)obj);
delete (CRITICAL_SECTION*)obj;
}
void osMutexLock(void *obj)
{
EnterCriticalSection((CRITICAL_SECTION*)obj);
}
void osMutexUnlock(void *obj)
{
LeaveCriticalSection((CRITICAL_SECTION*)obj);
}
// timing
LARGE_INTEGER timerFreq;
LARGE_INTEGER timerStart;
int osGetTimeMS()
{
LARGE_INTEGER time;
QueryPerformanceCounter(&time);
return int32((time.QuadPart - timerStart.QuadPart) * 1000L / timerFreq.QuadPart);
}
// input
struct JoyDevice {
Gamepad^ gamepad;
int time;
float vL, vR;
float oL, oR;
} joyDevice[INPUT_JOY_COUNT];
Core::Mutex joyLock;
#define JOY_MIN_UPDATE_FX_TIME 50
#define JOY_TRIGGER_THRESHOLD 0.1f
void osJoyVibrate(int index, float L, float R)
{
joyDevice[index].vL = L;
joyDevice[index].vR = R;
}
float joyTrigger(double value)
{
return clamp(((float)value - JOY_TRIGGER_THRESHOLD) / (1.0f - JOY_TRIGGER_THRESHOLD), 0.0f, 1.0f);
}
void joyUpdate()
{
OS_LOCK(joyLock);
#define JOY_BUTTON(index, btn, mask) Input::setJoyDown(index, btn, (state.Buttons & mask) == mask);
for (int i = 0; i < INPUT_JOY_COUNT; i++)
{
JoyDevice &joy = joyDevice[i];
if (!joy.gamepad) continue;
GamepadReading& state = joy.gamepad->GetCurrentReading();
JOY_BUTTON(i, jkA, GamepadButtons::A);
JOY_BUTTON(i, jkB, GamepadButtons::B);
JOY_BUTTON(i, jkX, GamepadButtons::X);
JOY_BUTTON(i, jkY, GamepadButtons::Y);
JOY_BUTTON(i, jkLeft, GamepadButtons::DPadLeft);
JOY_BUTTON(i, jkRight, GamepadButtons::DPadRight);
JOY_BUTTON(i, jkUp, GamepadButtons::DPadUp);
JOY_BUTTON(i, jkDown, GamepadButtons::DPadDown);
JOY_BUTTON(i, jkSelect, GamepadButtons::View);
JOY_BUTTON(i, jkStart, GamepadButtons::Menu);
JOY_BUTTON(i, jkL, GamepadButtons::LeftThumbstick);
JOY_BUTTON(i, jkR, GamepadButtons::RightThumbstick);
JOY_BUTTON(i, jkLB, GamepadButtons::LeftShoulder);
JOY_BUTTON(i, jkRB, GamepadButtons::RightShoulder);
Input::setJoyPos(i, jkL, vec2(float(state.LeftThumbstickX), -float(state.LeftThumbstickY)));
Input::setJoyPos(i, jkR, vec2(float(state.RightThumbstickX), -float(state.RightThumbstickY)));
Input::setJoyPos(i, jkLT, vec2(joyTrigger(state.LeftTrigger), 0.0f));
Input::setJoyPos(i, jkRT, vec2(joyTrigger(state.RightTrigger), 0.0f));
if ((joy.vL != joy.oL || joy.vR != joy.oR) && osGetTimeMS() >= joy.time) {
GamepadVibration vibration;
vibration.LeftMotor = joy.vL;
vibration.RightMotor = joy.vR;
joy.gamepad->Vibration = vibration;
joy.oL = joy.vL;
joy.oR = joy.vR;
joy.time = osGetTimeMS() + JOY_MIN_UPDATE_FX_TIME;
}
}
#undef JOY_BUTTON
}
void joyAdd(Platform::Object^, Gamepad^ args)
{
OS_LOCK(joyLock);
for (int i = 0; i < INPUT_JOY_COUNT; i++)
{
JoyDevice &joy = joyDevice[i];
if (joy.gamepad) continue;
joy.gamepad = args;
return;
}
}
void joyRemove(Platform::Object^, Gamepad^ args)
{
OS_LOCK(joyLock);
for (int i = 0; i < INPUT_JOY_COUNT; i++)
{
JoyDevice &joy = joyDevice[i];
if (!joy.gamepad) continue;
if (joy.gamepad == args) {
joy = {};
return;
}
}
}
void joyInit()
{
Gamepad::GamepadAdded += ref new EventHandler<Gamepad^>(&joyAdd);
Gamepad::GamepadRemoved += ref new EventHandler<Gamepad^>(&joyRemove);
}
// sound
#define SND_SIZE 4704*sizeof(int16)
#define SND_MAX_BUFFERS 2
struct AudioContext : public IXAudio2VoiceCallback
{
Microsoft::WRL::ComPtr<IXAudio2> pXAudio2;
HANDLE event;
virtual void STDMETHODCALLTYPE OnVoiceProcessingPassStart(UINT32) override {}
virtual void STDMETHODCALLTYPE OnVoiceProcessingPassEnd() override {}
virtual void STDMETHODCALLTYPE OnStreamEnd() override {}
virtual void STDMETHODCALLTYPE OnLoopEnd(void*) override {}
virtual void STDMETHODCALLTYPE OnVoiceError(void*, HRESULT) override {}
virtual void STDMETHODCALLTYPE OnBufferStart(void*) override {}
virtual void STDMETHODCALLTYPE OnBufferEnd(void* pBufferContext)
{
SetEvent(event);
}
AudioContext()
{
event = CreateEventEx(NULL, NULL, 0, EVENT_ALL_ACCESS);
}
virtual ~AudioContext()
{
CloseHandle(event);
}
void start()
{
CreateThread(NULL, 0, fill, this, 0, NULL);
}
void stop() {
SetEvent(event);
}
void suspend() {
pXAudio2->StopEngine();
}
void resume() {
pXAudio2->StartEngine();
}
static DWORD WINAPI fill(LPVOID lpParam)
{
AudioContext* context = (AudioContext*)lpParam;
IXAudio2MasteringVoice* masteringVoice;
IXAudio2SourceVoice* sourceVoice;
uint32 bufferIndex = 0;
if (FAILED(XAudio2Create(context->pXAudio2.GetAddressOf(), 0))) {
return 0;
}
if (FAILED(context->pXAudio2->CreateMasteringVoice(&masteringVoice))) {
return 0;
}
uint8* data = new uint8[SND_SIZE * SND_MAX_BUFFERS];
WAVEFORMATEX waveFmt = { WAVE_FORMAT_PCM, 2, 44100, 44100 * 4, 4, 16, sizeof(waveFmt) };
if (FAILED(context->pXAudio2->CreateSourceVoice(&sourceVoice, &waveFmt, 0, XAUDIO2_DEFAULT_FREQ_RATIO, context))) {
return 0;
}
if (FAILED(sourceVoice->Start(0))) {
return 0;
}
while (!Core::isQuit)
{
XAUDIO2_VOICE_STATE state;
sourceVoice->GetState(&state, XAUDIO2_VOICE_NOSAMPLESPLAYED);
if (state.BuffersQueued < SND_MAX_BUFFERS) {
XAUDIO2_BUFFER buffer = {};
buffer.AudioBytes = SND_SIZE;
buffer.pAudioData = data + SND_SIZE * bufferIndex;
Sound::fill((Sound::Frame*)buffer.pAudioData, buffer.AudioBytes / 4);
bufferIndex = (bufferIndex + 1) % SND_MAX_BUFFERS;
sourceVoice->SubmitSourceBuffer(&buffer);
} else {
WaitForSingleObject(context->event, INFINITE);
}
}
delete[] data;
return 0;
}
};
struct RenderContext
{
void init(CoreWindow^ window)
{
D3D_FEATURE_LEVEL featureLevels[] = {
D3D_FEATURE_LEVEL_10_0,
D3D_FEATURE_LEVEL_9_3,
D3D_FEATURE_LEVEL_9_2,
D3D_FEATURE_LEVEL_9_1
};
HRESULT ret;
ret = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, featureLevels, ARRAYSIZE(featureLevels), D3D11_SDK_VERSION, &device, NULL, &deviceContext);
ASSERT(ret == S_OK);
ComPtr<IDXGIDevice3> dxgiDevice;
ComPtr<ID3D11Device>(device).As(&dxgiDevice);
ComPtr<IDXGIAdapter> dxgiAdapter;
dxgiDevice->GetAdapter(&dxgiAdapter);
ComPtr<IDXGIFactory4> dxgiFactory;
dxgiAdapter->GetParent(IID_PPV_ARGS(&dxgiFactory));
DXGI_SWAP_CHAIN_DESC1 desc = {};
desc.Width = Core::width;
desc.Height = Core::height;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.BufferCount = 2;
desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
desc.Scaling = DXGI_SCALING_NONE;
desc.AlphaMode = DXGI_ALPHA_MODE_IGNORE;
ret = dxgiFactory->CreateSwapChainForCoreWindow(device, reinterpret_cast<IUnknown*>(window), &desc, NULL, &swapChain);
ASSERT(ret == S_OK);
dxgiDevice->SetMaximumFrameLatency(1);
}
void present()
{
swapChain->Present(Core::settings.detail.vsync ? 1 : 0, 0);
}
};
ref class View sealed : public ApplicationModel::Core::IFrameworkView
{
private:
AudioContext audioContext;
RenderContext renderContext;
bool m_windowVisible;
public:
View() : m_windowVisible(true) {};
virtual void Initialize(ApplicationModel::Core::CoreApplicationView^ applicationView)
{
applicationView->Activated += ref new TypedEventHandler<ApplicationModel::Core::CoreApplicationView^, IActivatedEventArgs^>(this, &View::OnActivated);
ApplicationModel::Core::CoreApplication::Suspending += ref new EventHandler<ApplicationModel::SuspendingEventArgs^>(this, &View::OnSuspending);
ApplicationModel::Core::CoreApplication::Resuming += ref new EventHandler<Platform::Object^>(this, &View::OnResuming);
}
virtual void SetWindow(CoreWindow^ window)
{
window->VisibilityChanged += ref new TypedEventHandler<CoreWindow^, VisibilityChangedEventArgs^>(this, &View::OnVisibilityChanged);
window->Closed += ref new TypedEventHandler<CoreWindow^, CoreWindowEventArgs^>(this, &View::OnWindowClosed);
SystemNavigationManager::GetForCurrentView()->BackRequested += ref new EventHandler<BackRequestedEventArgs^>(this, &View::OnBackRequested);
Core::width = 1920;
Core::height = 1080;
renderContext.init(window);
}
int checkLanguage()
{
Platform::String^ language = GlobalizationPreferences::Languages->GetAt(0);
const wchar_t* id = language->Begin();
#define CHECK(str) (wcsstr(id, L##str"-") != 0)
int str = STR_LANG_EN;
if (CHECK("fr")) {
str = STR_LANG_FR;
} else if (CHECK("de")) {
str = STR_LANG_DE;
} else if (CHECK("es")) {
str = STR_LANG_ES;
} else if (CHECK("it")) {
str = STR_LANG_IT;
} else if (CHECK("pl")) {
str = STR_LANG_PL;
} else if (CHECK("pt")) {
str = STR_LANG_PT;
} else if (CHECK("ru") || CHECK("be") || CHECK("uk")) {
str = STR_LANG_RU;
} else if (CHECK("ja")) {
str = STR_LANG_JA;
} else if (CHECK("gr")) {
str = STR_LANG_GR;
} else if (CHECK("fi")) {
str = STR_LANG_FI;
} else if (CHECK("cs")) {
str = STR_LANG_CZ;
} else if (CHECK("zh")) {
str = STR_LANG_CN;
}
return str - STR_LANG_EN;
}
virtual void Load(Platform::String^ entryPoint)
{
//
}
virtual void Run()
{
contentDir[0] = saveDir[0] = cacheDir[0] = 0;
StorageFolder^ localFolder = ApplicationData::Current->LocalFolder;
wcstombs(contentDir, localFolder->Path->Data(), sizeof(contentDir));
strcat(contentDir, "\\");
strcpy(saveDir, contentDir);
strcpy(cacheDir, contentDir);
Stream::addPack("content.zip");
GAPI::defRTV = NULL;
GAPI::defDSV = NULL;
QueryPerformanceFrequency(&timerFreq);
QueryPerformanceCounter(&timerStart);
Sound::channelsCount = 0;
joyInit();
audioContext.start();
Core::defLang = checkLanguage();
Game::init((const char*)NULL);
while (!Core::isQuit)
{
if (m_windowVisible)
{
CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);
joyUpdate();
if (Game::update()) {
Game::render();
renderContext.present();
}
} else {
CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending);
}
}
audioContext.stop();
Game::deinit();
}
virtual void Uninitialize()
{
// TODO save state?
}
protected:
void OnActivated(ApplicationModel::Core::CoreApplicationView^ applicationView, ApplicationModel::Activation::IActivatedEventArgs^ args)
{
CoreWindow::GetForCurrentThread()->Activate();
}
void OnSuspending(Platform::Object^ sender, ApplicationModel::SuspendingEventArgs^ args)
{
audioContext.suspend();
ApplicationModel::SuspendingDeferral^ deferral = args->SuspendingOperation->GetDeferral();
create_task([this, deferral]()
{
// TODO save state?
deferral->Complete();
});
}
void OnResuming(Platform::Object^ sender, Platform::Object^ args)
{
audioContext.resume();
// TODO load state?
}
void OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args)
{
m_windowVisible = args->Visible;
}
void OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args)
{
::Core::quit();
}
void OnBackRequested(Platform::Object^, BackRequestedEventArgs^ args)
{
args->Handled = true;
}
};
ref class ViewSource sealed : ApplicationModel::Core::IFrameworkViewSource
{
public:
virtual ApplicationModel::Core::IFrameworkView^ CreateView()
{
return ref new View();
}
};
[Platform::MTAThread]
int main(Platform::Array<Platform::String^>^) {
auto viewSource = ref new ViewSource();
ApplicationModel::Core::CoreApplication::Run(viewSource);
return 0;
}

View File

@@ -10,7 +10,7 @@ struct Shader : GAPI::Shader {
SPRITE = 0, FLASH, ROOM, ENTITY, MIRROR,
FILTER_UPSCALE = 0, FILTER_DOWNSAMPLE, FILTER_DOWNSAMPLE_DEPTH, FILTER_GRAYSCALE, FILTER_BLUR, FILTER_ANAGLYPH, FILTER_EQUIRECTANGULAR,
WATER_DROP = 0, WATER_SIMULATE, WATER_CAUSTICS, WATER_RAYS, WATER_MASK, WATER_COMPOSE,
SKY_TEXTURE = 0, SKY_CLOUDS, SKY_CLOUDS_AZURE,
SKY_TEXTURE = 0, SKY_CLOUDS, SKY_AZURE,
MAX = 6
};

View File

@@ -62,8 +62,8 @@ struct VS_INPUT {
#define SAMPLE_2D_LINEAR_WRAP(T,uv) T.Sample(smpLinearWrap, uv)
#define SAMPLE_2D_CMP(T,uv) T.SampleCmp(smpCmp, uv.xy, uv.z)
#define SAMPLE_2D_LOD0(T,uv) T.SampleLevel(smpLinear, uv, 0)
#define SAMPLE_3D(T,uv) T.Sample(smpLinear, uv)
#define SAMPLE_CUBE(T,uv) T.Sample(smpLinear, uv)
#define SAMPLE_3D(T,uv) T.SampleLevel(smpLinearWrap, uv, 0)
#define SAMPLE_CUBE(T,uv) T.Sample(smpLinear, uv)
#else
sampler2D sDiffuse : register(s0);
sampler2D sNormal : register(s1);
@@ -81,6 +81,8 @@ struct VS_INPUT {
#define SAMPLE_2D_CMP(T,uv) ((tex2D(T, uv.xy) => uv.z) ? 1 : 0)
#define SAMPLE_3D(T,uv) tex3D(T, uv)
#define SAMPLE_CUBE(T,uv) texCUBE(T, uv)
#define SV_POSITION POSITION
#endif
float4 uParam : register( c0 );
@@ -147,15 +149,16 @@ float calcCausticsV(float3 coord) {
return 0.5 + abs(sin(dot(coord.xyz, 1.0 / 1024.0) + uParam.x)) * 0.75;
}
#ifndef NORMAL_AS_3D
float3 calcHeightMapNormal(float2 tcR, float2 tcB, float base) {
float dx = SAMPLE_2D_LOD0(sNormal, tcR).x - base;
float dz = SAMPLE_2D_LOD0(sNormal, tcB).x - base;
return normalize( float3(dx, 64.0 / (1024.0 * 8.0), dz) );
}
#endif
half calcFresnel(half VoH, half f0) {
half f = (half)pow(1.0 - VoH, 5.0);
return f + f0 * (1.0h - f);
float calcFresnel(float NdotV, float f0) {
return f0 + (1.0 - f0) * pow(1.0 - NdotV, 5.0);
}
void applyFogUW(inout float3 color, float3 coord, float waterFogDist, float waterColorDist) {

View File

@@ -25,6 +25,10 @@ call :compile filter _grayscale "/DGRAYSCALE"
call :compile filter _blur "/DBLUR"
call :compile filter _anaglyph "/DANAGLYPH"
call :compile sky
call :compile sky _clouds "/DSKY_CLOUDS"
call :compile sky _azure "/DSKY_AZURE"
call :compile gui

116
src/shaders/sky.hlsl Normal file
View File

@@ -0,0 +1,116 @@
#define NORMAL_AS_3D
#include "common.hlsl"
struct VS_OUTPUT {
float4 pos : SV_POSITION;
half4 color : TEXCOORD0;
half2 texCoord : TEXCOORD1;
float3 coord : TEXCOORD2;
};
#ifdef VERTEX
VS_OUTPUT main(VS_INPUT In) {
VS_OUTPUT Out;
Out.color = (half4)In.aColor;
Out.texCoord = (half2)In.aTexCoord.xy;
Out.coord = float3(In.aCoord.x, -In.aCoord.y, In.aCoord.z);
Out.pos = mul(uViewProj, float4(In.aCoord.xyz * 5.0, 1.0));
Out.pos.z = Out.pos.w;
return Out;
}
#else // PIXEL
#ifdef SKY_AZURE
#define SKY_CLOUDS
#endif
#ifdef SKY_CLOUDS
#define STEPS 8.0
#define MIN_HEIGHT 2.0
#define MAX_HEIGHT 4.0
#define skyWind uParam.xyz
#define skyDown float3(uLightProj[0].x, uLightProj[1].x, uLightProj[2].x)
#define skyUp float3(uLightProj[0].y, uLightProj[1].y, uLightProj[2].y)
#define sunDir float3(uLightProj[0].z, uLightProj[1].z, uLightProj[2].z)
#define sunSize uLightProj[3].z
#define sunColor float3(uLightProj[0].w, uLightProj[1].w, uLightProj[2].w)
#define sunGlare uLightProj[3].w
#define cloudsDown uPosScale[0].xyz
#define cloudsUp uPosScale[1].xyz
// based on https://www.shadertoy.com/view/XsVGz3 / https://www.shadertoy.com/view/XslGRr
float noise3D(float3 p) {
p = p * 0.15 + skyWind;
return SAMPLE_3D(sNormal, p).x;
}
float density(float3 pos) {
float den = noise3D(pos) * 3.0 - 2.0 + (pos.y - MIN_HEIGHT);
float edge = 1.0 - smoothstep(MIN_HEIGHT, MAX_HEIGHT, pos.y);
den = clamp(den * edge * edge, 0.0, 1.0);
return den;
}
float3 raymarching(float2 screenPos, float3 dir, float t0, float t1, float3 backCol) {
float dither = SAMPLE_2D_POINT_WRAP(sMask, screenPos * (1.0 / 8.0)).x;
float3 step = dir * ((t1 - t0) / STEPS);
float3 pos = dir * t0 + step * dither;
float4 sum = 0.0;
for (float i = 0.0; i < STEPS; i++) {
float den = density(pos);
if (den > 0.01) {
float dif = max(0.0, den - density(pos + 0.3 * sunDir)) * 4.0;
float4 col = float4(lerp(cloudsUp, cloudsDown, den), den);
float3 lin = sunColor * dif + 1.0;
col.rgb *= lin;
col.a *= 0.5;
col.rgb *= col.a;
sum = sum + col * (1.0 - sum.a);
}
pos += step;
}
sum = clamp(sum, 0.0, 1.0);
float h = dir.y;
sum.rgb = lerp(sum.rgb, backCol, exp(-20.0 * h * h) );
return lerp(backCol, sum.xyz, sum.a);
}
#endif
half4 main(VS_OUTPUT In) : COLOR0 {
float3 dir = normalize(In.coord);
#ifdef SKY_AZURE
float3 col = lerp(skyDown, skyUp, dir.y);
#else
float3 col = SAMPLE_2D_LINEAR(sDiffuse, In.texCoord).xyz * In.color.xyz;
#endif
#ifdef SKY_CLOUDS
float sun = clamp(sunSize + dot(sunDir, dir), 0.0, 1.0);
col += sunColor * pow(sun, sunGlare);
float2 dist = float2(MIN_HEIGHT, MAX_HEIGHT) / dir.y;
if (dist.x > 0.0) {
col = raymarching(In.pos.xy, dir, dist.x, dist.y, col);
}
#endif
return half4(col, 1.0h);
}
#endif

View File

@@ -30,9 +30,9 @@ VS_OUTPUT main(VS_INPUT In) {
Out.pos = mul(uViewProj, float4(coord, 1.0));
Out.hpos = Out.pos.xyw;
Out.viewVec.xyz = uViewPos.xyz - coord;
Out.lightVec = uLightPos[0].xyz - coord;
Out.viewVec.y = abs(Out.viewVec.y);
Out.lightVec.y = abs(Out.lightVec.y);
Out.lightVec = uLightPos[0].xyz - coord;
Out.viewVec.w = step(uPosScale[0].y, uViewPos.y);
@@ -63,7 +63,7 @@ half4 main(VS_OUTPUT In) : COLOR0 {
half3 refr = lerp(refrA.xyz, refrB.xyz, refrA.w);
half3 refl = SAMPLE_2D_LINEAR(sReflect, float2(tc.x, tc.y) + dudv * uParam.w).xyz;
half fresnel = calcFresnel(max(0.0, dot(normal, viewVec)), 0.12);
half fresnel = calcFresnel(abs(dot(normal, viewVec)), 0.12);
half mask = SAMPLE_2D_POINT(sMask, In.maskCoord).r;
half4 color = half4(lerp(refr, refl, fresnel), mask);

View File

@@ -33,9 +33,9 @@ float boxIntersect(float3 rayPos, float3 rayDir, float3 center, float3 hsize) {
#ifdef _GAPI_GXM
float4 main(VS_OUTPUT In) : COLOR0 {
float2 pixelCoord = float2(__pixel_x(), __pixel_y());
#else
float4 main(VS_OUTPUT In/*, float2 pixelCoord: VPOS*/) : COLOR0 {
float2 pixelCoord = 0.0;
#else defined(_GAPI_D3D11
float4 main(VS_OUTPUT In) : COLOR0 {
float2 pixelCoord = In.pos.xy;
#endif
float3 viewVec = normalize(In.viewVec);

View File

@@ -8,7 +8,7 @@
#define DECODE_OGG
#if !defined(_OS_PSP) && !defined(_OS_WEB) && !defined(_OS_PSV) && !defined(_OS_3DS) && !defined(_OS_XBOX)
#if !defined(_OS_PSP) && !defined(_OS_WEB) && !defined(_OS_PSV) && !defined(_OS_3DS) && !defined(_OS_XBOX) && !defined(_OS_XB1)
#define DECODE_MP3
#endif

View File

@@ -23,6 +23,20 @@
#define LOG printf
#endif
#if defined(_OS_XBOX) || defined(_OS_XB1)
#define MAX_LOG_LENGTH 1024
#undef LOG
void LOG(const char *format, ...) {
char str[MAX_LOG_LENGTH];
va_list arglist;
va_start(arglist, format);
_vsnprintf(str, MAX_LOG_LENGTH, format, arglist);
va_end(arglist);
OutputDebugStringA(str);
}
#endif
#else
#define ASSERT(expr)
@@ -50,20 +64,6 @@
#define LOG(...) __android_log_print(ANDROID_LOG_INFO,"OpenLara",__VA_ARGS__)
#endif
#ifdef _OS_XBOX
#define MAX_LOG_LENGTH 1024
#undef LOG
void LOG(const char *format, ...) {
char str[MAX_LOG_LENGTH];
va_list arglist;
va_start(arglist, format);
_vsnprintf(str, MAX_LOG_LENGTH, format, arglist);
va_end(arglist);
OutputDebugStringA(str);
}
#endif
#ifdef _OS_PSP
extern "C" {
@@ -1572,6 +1572,8 @@ char contentDir[255];
#define STREAM_BUFFER_SIZE (16 * 1024)
#define MAX_PACKS 32
struct Stream {
typedef void (Callback)(Stream *stream, void *userData);
Callback *callback;
@@ -1584,12 +1586,144 @@ struct Stream {
char *buffer;
int bufferIndex;
bool buffering;
uint32 baseOffset;
struct Pack
{
Stream* stream;
uint8* table;
uint32 count;
struct FileInfo
{
uint32 size;
uint32 offset;
};
bool findFile(const char* name, FileInfo &info)
{
if (!table || !name || !name[0]) {
return false;
}
uint16 len = (uint16)strlen(name);
uint8* ptr = table;
for (uint32 i = 0; i < count; i++)
{
uint32 magic;
memcpy(&magic, ptr, sizeof(magic));
if (magic != 0x02014B50) {
ASSERT(false);
return false;
}
uint16 nameLen, extraLen, infoLen;
memcpy(&nameLen, ptr + 28, sizeof(nameLen));
memcpy(&extraLen, ptr + 30, sizeof(extraLen));
if ((nameLen == len) && (memcmp(ptr + 46, name, len) == 0))
{
uint16 compression;
memcpy(&compression, ptr + 10, sizeof(compression));
if (compression != 0)
{
ASSERT(false);
return false;
}
memcpy(&info.size, ptr + 24, sizeof(info.size));
memcpy(&info.offset, ptr + 42, sizeof(info.offset));
stream->setPos(info.offset);
magic = stream->readLE32();
if (magic != 0x04034B50) {
ASSERT(false);
return false;
}
stream->seek(22);
nameLen = stream->readLE16();
extraLen = stream->readLE16();
info.offset += 4 + 22 + 2 + 2 + nameLen + extraLen;
return true;
}
memcpy(&infoLen, ptr + 32, sizeof(infoLen));
ptr += 46 + nameLen + extraLen + infoLen;
}
return false;
}
Pack(const char *name) : stream(NULL), table(NULL), count(0)
{
stream = new Stream(name);
stream->buffering = false;
stream->setPos(stream->size - 22);
uint32 magic = stream->readLE32();
if (magic != 0x06054B50)
{
ASSERT(false);
return;
}
stream->seek(6);
count = stream->readLE16();
uint32 tableSize = stream->readLE32();
uint32 tableOffset = stream->readLE32();
stream->setPos(tableOffset);
table = new uint8[tableSize];
stream->raw(table, tableSize);
}
~Pack() {
delete stream;
delete[] table;
}
};
static Pack* packs[MAX_PACKS];
static bool addPack(const char *name)
{
if (!existsContent(name)) {
return false;
}
for (int i = 0; i < MAX_PACKS; i++)
{
if (!packs[i])
{
packs[i] = new Pack(name);
return true;
}
}
return false;
}
static void deinit()
{
for (int i = 0; i < MAX_PACKS; i++)
{
if (!packs[i]) break;
delete packs[i];
}
}
Stream(const char *name, const void *data, int size, Callback *callback = NULL, void *userData = NULL) : callback(callback), userData(userData), f(NULL), data((char*)data), name(NULL), size(size), pos(0), buffer(NULL) {
this->name = String::copy(name);
}
Stream(const char *name, Callback *callback = NULL, void *userData = NULL) : callback(callback), userData(userData), f(NULL), data(NULL), name(NULL), size(-1), pos(0), buffer(NULL) {
Stream(const char *name, Callback *callback = NULL, void *userData = NULL) : callback(callback), userData(userData), f(NULL), data(NULL), name(NULL), size(-1), pos(0), buffer(NULL), buffering(true), baseOffset(0) {
if (!name && callback) {
callback(NULL, userData);
delete this;
@@ -1600,10 +1734,45 @@ struct Stream {
ASSERT(false);
}
Stream::Pack::FileInfo info;
char path[256];
for (int i = 0; i < MAX_PACKS; i++)
{
if (!packs[i]) break;
if (packs[i]->findFile(name, info))
{
path[0] = 0;
if (contentDir[0] && (!cacheDir[0] || !strstr(name, cacheDir))) {
strcpy(path, contentDir);
}
strcat(path, packs[i]->stream->name);
fixBackslash(path);
f = fopen(path, "rb");
if (!f) {
LOG("error loading file from pack \"%s -> %s\"\n", packs[i]->stream->name, name);
ASSERT(false);
return;
}
baseOffset = info.offset;
fseek(f, info.offset, SEEK_SET);
size = info.size;
fpos = 0;
bufferIndex = -1;
this->name = String::copy(name);
if (callback) callback(this, userData);
return;
}
}
path[0] = 0;
if (contentDir[0] && (!cacheDir[0] || !strstr(name, cacheDir))) {
strcat(path, contentDir);
strcpy(path, contentDir);
}
strcat(path, name);
fixBackslash(path);
@@ -1627,14 +1796,12 @@ struct Stream {
fseek(f, 0, SEEK_END);
size = (int32)ftell(f);
fseek(f, 0, SEEK_SET);
fpos = 0;
fpos = 0;
bufferIndex = -1;
this->name = String::copy(name);
if (callback)
callback(this, userData);
if (callback) callback(this, userData);
}
}
@@ -1685,6 +1852,15 @@ struct Stream {
}
static bool existsContent(const char *name) {
for (uint32 i = 0; i < MAX_PACKS; i++)
{
if (!packs[i]) break;
Pack::FileInfo info;
if (packs[i]->findFile(name, info))
return true;
}
char fileName[1024];
strcpy(fileName, contentDir);
strcat(fileName, name);
@@ -1704,6 +1880,18 @@ struct Stream {
if (!count) return;
if (f) {
if (!buffering) {
if (fpos != pos) {
fseek(f, baseOffset + pos, SEEK_SET);
fpos = pos;
}
fread(data, 1, count, f);
pos += count;
fpos += count;
return;
}
uint8 *ptr = (uint8*)data;
while (count > 0) {
@@ -1712,16 +1900,16 @@ struct Stream {
if (bufferIndex != bIndex) {
bufferIndex = bIndex;
size_t readed;
int readed;
int part;
if (fpos == pos) {
part = min(count / STREAM_BUFFER_SIZE * STREAM_BUFFER_SIZE, size - fpos);
if (part > STREAM_BUFFER_SIZE) {
readed = fread(ptr, 1, part, f);
readed = (int)fread(ptr, 1, part, f);
#ifdef TEST_SLOW_FIO
LOG("%s read %d + %d\n", name, fpos, (int)readed);
LOG("%s read %d + %d\n", name, fpos, readed);
Sleep(5);
#endif
@@ -1742,7 +1930,7 @@ struct Stream {
if (fpos != bufferIndex * STREAM_BUFFER_SIZE) {
fpos = bufferIndex * STREAM_BUFFER_SIZE;
fseek(f, fpos, SEEK_SET);
fseek(f, baseOffset + fpos, SEEK_SET);
#ifdef TEST_SLOW_FIO
LOG("%s seek %d\n", name, fpos);
@@ -1755,7 +1943,7 @@ struct Stream {
}
part = min(STREAM_BUFFER_SIZE, size - fpos);
readed = fread(buffer, 1, part, f);
readed = (int)fread(buffer, 1, part, f);
#ifdef TEST_SLOW_FIO
LOG("%s read %d + %d\n", name, fpos, readed);
@@ -1829,6 +2017,7 @@ struct Stream {
}
};
Stream::Pack* Stream::packs[MAX_PACKS];
#ifdef OS_FILEIO_CACHE
void osDataWrite(Stream *stream, const char *dir) {