Files
UnrealEngineUWP/Engine/Source/Developer/HTML5/HTML5TargetPlatform/Private/HTML5TargetPlatform.cpp
Matthew Griffin a466633b17 Copying //UE4/Release-Staging-4.14 to //UE4/Dev-Main (Source: //UE4/Release-4.14 @ 3195953)
#lockdown Nick.Penwarden
#rb none

==========================
MAJOR FEATURES + CHANGES
==========================

Change 3195953 on 2016/11/12 by Leslie.Nivison

	Rollback //UE4/Release-4.14/Engine/Plugins/Runtime/Nvidia to changelist 3193712
	New GameWorks license from NVIDIA

	#jira UEPROD-900

Change 3195944 on 2016/11/12 by Leslie.Nivison

	Removing GameWorks SDK license until we get a new one from NVIDIA
	#jira UEPROD-900

Change 3195942 on 2016/11/11 by Chris.Gagnon

	Removing Ansel from 4.14 until revised EULA is handle.

	#jira UE-none

Change 3195431 on 2016/11/11 by Mitchell.Wilson

	Rebuilt lighting in subway reflections sample
	#jira UE-38538

Change 3195080 on 2016/11/11 by mason.seay

	Extended floor to allow more driving space

	#jira UE-29618

Change 3194886 on 2016/11/11 by Chris.Babcock

	Correct handling for 6x6 blocksize in ASTC compressor
	#jira UE-38513
	#ue4
	#android

Change 3193712 on 2016/11/10 by Leslie.Nivison

	Updating Ansel TPS info per NVIDIA response
	#jira UEPROD-900

Change 3193691 on 2016/11/10 by Lina.Halper

	#jira: UE-38488

Change 3193532 on 2016/11/10 by Lauren.Ridge

	Fix to keep the user in VR editing mode after leaving VR PIE.

	#jira UE-38317

Change 3193468 on 2016/11/10 by Leslie.Nivison

	Removing unneeded license
	#jira UEPROD-900

Change 3193465 on 2016/11/10 by Leslie.Nivison

	Updating credits for 4.14
	#jira UEPROD-902

Change 3193416 on 2016/11/10 by Daniel.Lamb

	Changed default of exclude editor only content flag.
	#jira UE-38455

Change 3193399 on 2016/11/10 by Mitchell.Wilson

	Applied correct material to certain LODs of tree meshes in KiteDemo
	#jira UE-38472

Change 3193049 on 2016/11/10 by Thomas.Sarkanen

	Fix disappearing mesh on undo in skeletal mesh editor

	Also fixes crash on undo in morph target panel

	#jira UE-38430 - Undo in Skeletal Mesh Editor causes model to disappear
	#jira UE-38437 - Crash when Undo after editing a weight in Morph Target Previewer

Change 3192655 on 2016/11/09 by Ryan.Vance

	#jira UE-37238

	Pulling in 3164679 and 3169467 which didn't make the 4.14 cut. Also changed to a full inverse for InvTranslatedViewProjectionMatrix in FViewMatrices::UpdateViewMatrix.

Change 3192613 on 2016/11/09 by Leslie.Nivison

	Updating licenses due to TPS version updates.
	Logging undocumented TPS per engine audit

	#jira UEPROD-900

Change 3192197 on 2016/11/09 by Daniel.Wright

	Added SUPPORT_CONTACT_SHADOWS, only standard deferred lighting supports it.  Fixes scene depth texture bound in forward shading base pass.
	#jira UE-38340

Change 3192182 on 2016/11/09 by Rolando.Caloca

	UE4.14 - Fix recompute tangents not working when skin cache is enabled
	#jira UE-38398

Change 3191695 on 2016/11/09 by Chris.Wood

	Editor heartbeat changes for 4.14
	[AN-1003] - Make Editor heartbeat 1min
	[UE-38417] - Editor heartbeat changes (vanilla editor, new interval, debugger attached)

	Also added IsDebugger, IsVanilla and IntervalSec to Editor.Usage.Heartbeat

	#jira UE-38417

Change 3191437 on 2016/11/09 by Jack.Porter

	Fix for LandscapeInfo crash when using Force Delete
	#jira UE-37172

Change 3191033 on 2016/11/08 by Leslie.Nivison

	Adding licenses for marketplace plugins

	#jira UEPROD-901

Change 3191028 on 2016/11/08 by Leslie.Nivison

	Updating licenses due to TPS version updates.
	Logging undocumented TPS per engine audit

	#jira UEPROD-900

Change 3190632 on 2016/11/08 by mason.seay

	Updated testmap and assets

	#jira UE-29618

Change 3190624 on 2016/11/08 by Jamie.Dale

	Fixed case where FHTML5TargetPlatform::RefreshHTML5Setup could incorrectly add an empty device

	Changes to UStrProperty::ExportTextItem caused FParse::Value to (correctly) read an empty string for DevicePath which passed the DirectoryExists check (where it would have previously read "))" which would fail that check).

	#jira UE-38157

Change 3190443 on 2016/11/08 by Josh.Adams

	- Somehow checking in my tested shelf messed up
	#jira UE-38304

Change 3190354 on 2016/11/08 by Josh.Adams

	- Vulkan now always being compiled in, if the SDK exists. Compiling not dependent on project settings
	#jira UE-38304

Change 3190123 on 2016/11/08 by zachary.wilson

	Updating testing content for sureface per-pixel improvements

	#jira UE-29618

Change 3190113 on 2016/11/08 by Alexis.Matte

	Make sure the default light map channel is 1 and not 0
	#jira UE-35627

Change 3190102 on 2016/11/08 by Dmitry.Rekman

	Linux: default to binned everywhere (UE-38287).

	- Fixes suspicious crashes happening in uncooked build. Workaround, needs separate investigation.

	#jira UE-38287

Change 3190000 on 2016/11/08 by Allan.Bentham

	Removed old protostar loadmap hack.
	#jira UE-38342

Change 3189914 on 2016/11/08 by Allan.Bentham

	Fix vulkan crash when rendering sky capture.
	Fix crash when rendering LDR scene capture on device.
	#jira UE-38291

Change 3189861 on 2016/11/08 by Thomas.Sarkanen

	Fix out of bounds access when using hidden bones with master pose components

	Code was trying to to access the ReferenceToLocal array using a parent index from the master pose component. Now changed to only use indices known to be valid (i.e. this component's) to index the ReferenceToLocal array. Bone visibility is still master-authoratitive.

	#jira UE-38214 - [CrashReport] UE4Editor_Engine!UpdateRefToLocalMatrices() [skeletalrender.cpp:238]

Change 3189370 on 2016/11/07 by Daniel.Wright

	Only check transform mismatches for static lighting in UStaticMeshComponent::ApplyComponentInstanceData on components that actually can have static lighting
	#jira UE-38272

Change 3189358 on 2016/11/07 by Mark.Satterthwaite

	Intel Metal drivers can no longer compile our compute shaders reliably meaning Intel Macs must always use Metal SM4 as otehrwise they will crash.
	#jira UE-38299

Change 3189273 on 2016/11/07 by Rolando.Caloca

	UE4.14 - Integrate fix from 3161219
	#jira UE-38270

Change 3189084 on 2016/11/07 by Chris.Bunner

	Fix RemoveAAJitter from projection matrix.
	#jira UE-37701, UE-38003

Change 3188636 on 2016/11/07 by Allan.Bentham

	use glVertexAttribIPointer only on ES3.1 enabled projects.
	#jira UE-38241

Change 3188596 on 2016/11/07 by Yannick.Lange

	VR Editor: Fix crash when closing window while in VR Editor
	#jira UE-37995

Change 3188433 on 2016/11/07 by Matthew.Griffin

	Add starter content .upack files to starter_content tag so that they should still be installed if templates/feature packs option is de-selected in the Launcher

Change 3187739 on 2016/11/04 by Mitchell.Wilson

	Updating DefautlEditor and DefaultEngine ini to correct path to VehicleMenu level.
	#jira UE-29748

Change 3187536 on 2016/11/04 by Martin.Wilson

	Fix for "Renaming a montage section via its details panel doesn't update the section correctly"

	#jira UE-35929

Change 3187499 on 2016/11/04 by zachary.wilson

	Checking in content fixes for Lighting Scenarios test level

	#jira UE-29618

Change 3187492 on 2016/11/04 by mason.seay

	Updated map to improve testing

	#jira UE-29618

Change 3187438 on 2016/11/04 by Nick.Shin

	fix html5 port number for cook-on-the-fly option

	#jira UE-38032 - Quicklaunch HTML5 fails on Chrome. Browser returns "This site can't be reached 127.0.0.1 refused to connect"

Change 3187305 on 2016/11/04 by Martin.Wilson

	Fix log spam from animation sequence thumbnails

	#jira UE-38224

Change 3187260 on 2016/11/04 by Lauren.Ridge

	Fix for crash on opening a level in VR Editing mode. When closing VREditorMode for a level load, HMD no longer leaves stereo mode.

	#jira UE-32541

Change 3187224 on 2016/11/04 by Robert.Manuszewski

	Proper fix for a crash when launching BP-only project from the Editor with EDL enabled (does not modify UE4Game target binaries)

	#jira UE-37617

Change 3187136 on 2016/11/04 by Alexis.Matte

	Fbx importer for static mesh, make sure that we order the materials array to follow the section order.
	#jira UE-38242

Change 3187065 on 2016/11/04 by Mitchell.Wilson

	Updated BP_Commentary_Box to resolve warnings with array if the box opens then closes before the text is rendered.
	#jira UE-38266

Change 3187056 on 2016/11/04 by Mike.Beach

	Guarding against a rare crash that occurs when compiling a Blueprint after hot-reload. GUnrealEd was null, which is concerning (as it could have resounding effects in other systems), but as I could not repro it more than once (to figure it out more) I simply guarded the use of a null pointer here.

	#jira UE-38198

Change 3187040 on 2016/11/04 by Matthew.Griffin

	Corrected path to DotNETCommon folder
	Exclude all editor plugin pdbs from stripping
	#jira UE-37072

Change 3186984 on 2016/11/04 by Marc.Audy

	Fix crash when null component considered
	#jira UE-36493

Change 3186600 on 2016/11/04 by Max.Chen

	Sequencer: Fix crash in sequencer editor mode.

	#jira UE-38205

Change 3186564 on 2016/11/04 by Nick.Shin

	checking in latest physx libs for html5

	#jira UE-38179  HTML5 Player falls through world on Firefox 64-bit

Change 3186258 on 2016/11/03 by Nick.Shin

	fix for automation build to handle deleting of windows x86 & x64 libs properly

	#jira UE-38179  HTML5 Player falls through world on Firefox 64-bit

Change 3186225 on 2016/11/03 by Lauren.Ridge

	Fix for foliage brush not showing up until after first motion controller click.

	#jira UE-38002

Change 3186100 on 2016/11/03 by Chris.Babcock

	Update local notifications to deal with depreciated API
	#jira UE-38236
	#ue4
	#android

Change 3186074 on 2016/11/03 by Mitchell.Wilson

	Rebuilt lighting in Content Examples Welcome level
	#jira UE-38239

Change 3185923 on 2016/11/03 by Lina.Halper

	Fixed issue with animation not ticking in inactive world causing it to update parent animation

	#jira: UE-37933

Change 3185764 on 2016/11/03 by Mitchell.Wilson

	Updating deprecated node in MyCharacter_UMG.
	#jira UE-38229

Change 3185683 on 2016/11/03 by Nick.Shin

	non SSE2 version of PhysX for HTML5

	#jira UE-38179  HTML5 Player falls through world on Firefox 64-bit

Change 3185492 on 2016/11/03 by Ben.Woodhouse

	Workaround for very high render query memory overhead on D3D12. Add a cvar to limit timestamp queries allocated by the GPU profiler in a given frame. On D3D12 this limit is 1024 - other RHIs remain unbounded.

	Currently render queries are 64KB each on D3D12, so this prevents high memory overhead on particular frames, e.g when we render a large number of reflection captures.

	In practice, most frames are under 400 queries, so in practice we shouldn't hit the limit except in extreme cases.
	#jira UE-38139

Change 3185481 on 2016/11/03 by Dmitry.Rekman

	Remove version number from Linux README (UE-38059).

	#jira UE-38059

Change 3185322 on 2016/11/03 by Ryan.Gerleve

	Allow path names in NetFieldExportGroups to be remapped on the client.

	#jira UE-37990

Change 3185293 on 2016/11/03 by Matthew.Griffin

	Exclude UnrealControls and iPhonePackager from Build Tools CS node on non-Windows platforms as they don't compile
	#jira UE-34016

Change 3185252 on 2016/11/03 by Michael.Trepka

	Properly revert to OpenGL on Macs that do not support Metal

	#jira UE-38190

Change 3184835 on 2016/11/03 by Jurre.deBaare

	Crash when using undo in the preview scene settings of Persona
	#fix Ensure that the profile index is valid after undo-ing
	#misc Added transactions for adding/remove of the profiles
	#jira UE-38142

Change 3184833 on 2016/11/03 by Jack.Porter

	Fixed crash when ENABLE_VERIFY_GL and r.MobileOnChipMSAA is enabled on Android
	#jira UE-38186

Change 3184418 on 2016/11/02 by Ryan.Vance

	#jira UE-38161

	Adding ISceneViewExtension::UsePostInitView which will be used to enable/disable the usage of PostRenderViewFamily_RenderThread and PostRenderView_RenderThread which was added earlier. We need to enable this behavior based on the hmd's compositor behavior, so a simple cvar wont work.
	I missed the PostPresent implementation for steamvr in the earlier check in.

Change 3184286 on 2016/11/02 by Dan.Oconnor

	Fix for IsValidLowLevel check being rotten. More correct fix will go into Dev-BP, but this is a low risk stop-gap
	#jira UE-38149

Change 3184283 on 2016/11/02 by Arne.Schober

	DR - UE-38155 replicated MS CL 3183837 - PSO Dangling Pointers:  The PSO cache was returning pointers out of a Map which is based on a sparse Array and those pointers could become invalid if other insertions happen.
	#jira UE-38155

Change 3184244 on 2016/11/02 by Richard.Ugarte

	#jira UE-37534
	Checking in updated UE4_Demo_Head_D on behalf of MikeB

Change 3184171 on 2016/11/02 by Michael.Trepka

	Made Mac CrashReportClient high-DPI aware and fixed high-DPI handling in FMacWindow::IsPointInWindow()

	#jira UE-37697

Change 3184126 on 2016/11/02 by Lauren.Ridge

	VR Editor: Fixes for foliage painting only working on one controller, and for full press not painting foliage.

	#jira UE-38147
	#jira UE-38002

Change 3183997 on 2016/11/02 by Mitchell.Wilson

	Scaled and Rotated 3d Widget to the correct position on example 2.3 in Content Examples UMG.
	Adjusted collision on example 1.4 in Content Examples Physics. Updated collision on SM_ExampleMesh_Rocket.
	Realigned some text render actors in Content Examples Post Process.
	#jira UE-38099 UE-38078 UE-38064

Change 3183945 on 2016/11/02 by Mieszko.Zielinski

	Fixed changing AreaClass of NavLinkProxy point links not having any effect on navmesh generation #UE4

	#jira UE-38137

Change 3183906 on 2016/11/02 by Nick.Shin

	for OSX (release-4.14 stream):

	new OSX clang (from emscripten tool chain) configured by jukka from Mozilla

	see Engine/Extras/ThirdPartyNotUE/emsdk/emscripten/incoming/EPIC_VERSION for details on where did this version come from

	fixes for OSX -- update existing (bash shell script and UE4 c#) build files to use the new "incoming" emsdk

	#jira UE-37329 - Step 'Compile UE4Game HTML5' - 300 Warnings

Change 3183899 on 2016/11/02 by Mieszko.Zielinski

	Fixed EQS debugger not drawing item labels #UE4

	#jira UE-38122

Change 3183239 on 2016/11/02 by Peter.Sauerbrei

	fix for mobile provision with UUID only filename being allowed again by copying them to a new file name which allows them to be used.
	#jira UE-38006

Change 3183149 on 2016/11/02 by Luke.Thatcher

	[RELEASE] [SHOOTERGAME] [!] Fix "Is Talking" icon on ShooterGame scoreboard, after PS4 OSS refactor.
	 - ShooterGame was comparing FUniqueNetId::ToString() against AShooterPlayerState::GetShortPlayerName().
	 - This is wrong, since the NetId is not guaranteed to be equal to the player's name.

	#jira UE-38011

Change 3183005 on 2016/11/02 by Luke.Thatcher

	[RELEASE] [PS4] [^] Merging (as edit) PS4 OSS fixes from Engine to OrionGame.

	#jira UE-38017 UE-38020

	Original Changelists:

	3182765 [RELEASE] [PS4] [~] Additional logging for PS4 OSS "Play Together".

	3182766 [RELEASE] [PS4] [!] Fix assert in FUniqueNetIdPS4::FindOrCreate. We were assuming an online-only ID could never become a local ID. This isn't the case in the following scenario:

	 - Two users join a session on two separate PS4s.
	 - One user signs into the other user's PS4 with the same account, with a second controller. PSN logs him out of the first PS4.
	 - That user's Net ID has now migrated from being online-only, to local-with-online. This is a case that was not handled.

	3182767 [RELEASE] [PS4] [!] Fix PS4 session invitations.
	 - Was calling old Web API with SceNpOnlineId where SceNpAccountId is needed.
	 - Replaced with NpToolkit2's session invitation API.

	3182892 [RELEASE] [PS4] [!] Fix incorrect identity API implementation in PS4 OSS.
	 - System events directly drive the login state of a user. This also removes the blocking call to sceNpGetState().
	 - GetAuthToken is only called if the engine calls IOnlineIdentity::Login().

	3182951 [RELEASE] [PS4] [!] Fix "play together" invitations handling in PS4 OSS.
	 - Wrong condition in GetUserWebApiContext. Web API contexts can be created for local users (i.e. FUniqueNetIdPS4 instances with a valid SceUserServiceUserId).

Change 3182992 on 2016/11/02 by Nick.Darnell

	UMG Editor - Fixing a regression with the editor, closing the sequencer tab and reopening the editor should no longer cause a crash.

	#jira UE-38098

Change 3182951 on 2016/11/02 by Luke.Thatcher

	[RELEASE] [PS4] [!] Fix "play together" invitations handling in PS4 OSS.
	 - Wrong condition in GetUserWebApiContext. Web API contexts can be created for local users (i.e. FUniqueNetIdPS4 instances with a valid SceUserServiceUserId).

	#jira UE-38017

[CL 3201696 by Matthew Griffin in Main branch]
2016-11-17 04:29:30 -05:00

350 lines
9.5 KiB
C++

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
/*=============================================================================
HTML5TargetPlatform.cpp: Implements the FHTML5TargetPlatform class.
=============================================================================*/
#include "HTML5TargetPlatformPrivatePCH.h"
#if WITH_ENGINE
#include "DeviceProfiles/DeviceProfile.h"
#endif
DEFINE_LOG_CATEGORY_STATIC(LogHTML5TargetPlatform, Log, All);
/* Static initialization
*****************************************************************************/
FCriticalSection FHTML5TargetPlatform::DevicesCriticalSection;
/* FHTML5TargetPlatform structors
*****************************************************************************/
FHTML5TargetPlatform::FHTML5TargetPlatform( )
{
RefreshHTML5Setup();
#if WITH_ENGINE
// load up texture settings from the config file
HTML5LODSettings = nullptr;
StaticMeshLODSettings.Initialize(HTML5EngineSettings);
#endif
}
/* ITargetPlatform interface
*****************************************************************************/
void FHTML5TargetPlatform::GetAllDevices( TArray<ITargetDevicePtr>& OutDevices ) const
{
FScopeLock Lock( &DevicesCriticalSection );
OutDevices.Reset();
for( auto Iter = Devices.CreateConstIterator(); Iter; ++Iter )
{
OutDevices.Add( Iter.Value() );
}
}
ECompressionFlags FHTML5TargetPlatform::GetBaseCompressionMethod( ) const
{
return COMPRESS_ZLIB;
}
ITargetDevicePtr FHTML5TargetPlatform::GetDefaultDevice( ) const
{
FScopeLock Lock( &DevicesCriticalSection );
return Devices.FindRef( DefaultDeviceName );
}
ITargetDevicePtr FHTML5TargetPlatform::GetDevice( const FTargetDeviceId& DeviceId )
{
if( DeviceId.GetPlatformName() == this->PlatformName() )
{
FScopeLock Lock( &DevicesCriticalSection );
for( auto MapIt = Devices.CreateIterator(); MapIt; ++MapIt )
{
FHTML5TargetDevicePtr& Device = MapIt->Value;
if( Device->GetName() == DeviceId.GetDeviceName() )
{
return Device;
}
}
}
return nullptr;
}
bool FHTML5TargetPlatform::IsSdkInstalled(bool bProjectHasCode, FString& OutDocumentationPath) const
{
FString SDKPath = FPaths::EngineDir() / TEXT("Extras/ThirdPartyNotUE/emsdk") /
#if PLATFORM_WINDOWS
TEXT("Win64");
#elif PLATFORM_MAC
TEXT("Mac");
#elif PLATFORM_LINUX
TEXT("Linux");
#else
TEXT("UNKNOWN_PLATFORM");
#endif
FString SDKDirectory = FPaths::ConvertRelativePathToFull(SDKPath);
if (IFileManager::Get().DirectoryExists(*SDKDirectory))
{
return true;
}
return false;
}
bool FHTML5TargetPlatform::IsRunningPlatform( ) const
{
return false; // but this will never be called because this platform doesn't run the target platform framework
}
#if WITH_ENGINE
static FName NAME_GLSL_ES2_WEBGL(TEXT("GLSL_ES2_WEBGL"));
void FHTML5TargetPlatform::GetAllPossibleShaderFormats( TArray<FName>& OutFormats ) const
{
OutFormats.AddUnique(NAME_GLSL_ES2_WEBGL);
}
void FHTML5TargetPlatform::GetAllTargetedShaderFormats( TArray<FName>& OutFormats ) const
{
GetAllPossibleShaderFormats(OutFormats);
}
const class FStaticMeshLODSettings& FHTML5TargetPlatform::GetStaticMeshLODSettings( ) const
{
return StaticMeshLODSettings;
}
void FHTML5TargetPlatform::GetTextureFormats( const UTexture* Texture, TArray<FName>& OutFormats ) const
{
FName TextureFormatName = NAME_None;
#if WITH_EDITOR
// Supported texture format names.
static FName NameDXT1(TEXT("DXT1"));
static FName NameDXT3(TEXT("DXT3"));
static FName NameDXT5(TEXT("DXT5"));
static FName NameDXT5n(TEXT("DXT5n"));
static FName NameAutoDXT(TEXT("AutoDXT"));
static FName NameBGRA8(TEXT("BGRA8"));
static FName NameG8(TEXT("G8"));
static FName NameRGBA16F(TEXT("RGBA16F"));
static FName NameRGBA8(TEXT("RGBA8"));
bool bNoCompression = Texture->CompressionNone // Code wants the texture uncompressed.
|| (HasEditorOnlyData() && Texture->DeferCompression) // The user wishes to defer compression, this is ok for the Editor only.
|| (Texture->CompressionSettings == TC_EditorIcon)
|| (Texture->LODGroup == TEXTUREGROUP_ColorLookupTable) // Textures in certain LOD groups should remain uncompressed.
|| (Texture->LODGroup == TEXTUREGROUP_Bokeh)
|| (Texture->LODGroup == TEXTUREGROUP_IESLightProfile)
|| (Texture->Source.GetSizeX() < 4) // Don't compress textures smaller than the DXT block size.
|| (Texture->Source.GetSizeY() < 4)
|| (Texture->Source.GetSizeX() % 4 != 0)
|| (Texture->Source.GetSizeY() % 4 != 0);
ETextureSourceFormat SourceFormat = Texture->Source.GetFormat();
// Determine the pixel format of the (un/)compressed texture
if (bNoCompression)
{
if (Texture->HasHDRSource())
{
TextureFormatName = NameBGRA8;
}
else if (SourceFormat == TSF_G8 || Texture->CompressionSettings == TC_Grayscale)
{
TextureFormatName = NameG8;
}
else if (Texture->LODGroup == TEXTUREGROUP_Shadowmap)
{
TextureFormatName = NameG8;
}
else
{
TextureFormatName = NameRGBA8;
}
}
else if (Texture->CompressionSettings == TC_HDR
|| Texture->CompressionSettings == TC_HDR_Compressed)
{
TextureFormatName = NameRGBA16F;
}
else if (Texture->CompressionSettings == TC_Normalmap)
{
TextureFormatName = NameDXT5;
}
else if (Texture->CompressionSettings == TC_Displacementmap)
{
TextureFormatName = NameG8;
}
else if (Texture->CompressionSettings == TC_VectorDisplacementmap)
{
TextureFormatName = NameRGBA8;
}
else if (Texture->CompressionSettings == TC_Grayscale)
{
TextureFormatName = NameG8;
}
else if( Texture->CompressionSettings == TC_Alpha)
{
TextureFormatName = NameDXT5;
}
else if (Texture->CompressionSettings == TC_DistanceFieldFont)
{
TextureFormatName = NameG8;
}
else if (Texture->CompressionNoAlpha)
{
TextureFormatName = NameDXT1;
}
else if (Texture->bDitherMipMapAlpha)
{
TextureFormatName = NameDXT5;
}
else
{
TextureFormatName = NameAutoDXT;
}
// Some PC GPUs don't support sRGB read from G8 textures (e.g. AMD DX10 cards on ShaderModel3.0)
// This solution requires 4x more memory but a lot of PC HW emulate the format anyway
if ((TextureFormatName == NameG8) && Texture->SRGB && !SupportsFeature(ETargetPlatformFeatures::GrayscaleSRGB))
{
TextureFormatName = NameBGRA8;
}
#endif
OutFormats.Add( TextureFormatName);
}
const UTextureLODSettings& FHTML5TargetPlatform::GetTextureLODSettings() const
{
return *HTML5LODSettings;
}
FName FHTML5TargetPlatform::GetWaveFormat( const USoundWave* Wave ) const
{
static FName NAME_OGG(TEXT("OGG"));
return NAME_OGG;
}
#endif // WITH_ENGINE
void FHTML5TargetPlatform::RefreshHTML5Setup()
{
FString Temp;
if (!FHTML5TargetPlatform::IsSdkInstalled(true, Temp))
{
// nothing to do.
return;
}
// update available devices
TArray<FString> DeviceMaps;
GConfig->GetArray( TEXT("/Script/HTML5PlatformEditor.HTML5SDKSettings"), TEXT("DeviceMap"), DeviceMaps, GEngineIni );
if ( ! DeviceMaps.Num() )
{
// trash can: nukes everything
// default list will be repopulated
FScopeLock Lock( &DevicesCriticalSection );
for (auto Iter = Devices.CreateIterator(); Iter; ++Iter)
{
FHTML5TargetDevicePtr Device = Iter->Value;
Iter.RemoveCurrent();
DeviceLostEvent.Broadcast(Device.ToSharedRef());
}
DefaultDeviceName.Empty();
}
else
{
// add or update
for (auto It : DeviceMaps)
{
FString DeviceName = "";
FString DevicePath = "";
if( FParse::Value( *It, TEXT( "DeviceName=" ), DeviceName ) && !DeviceName.IsEmpty() &&
FParse::Value( *It, TEXT( "DevicePath=(FilePath=" ), DevicePath ) && !DevicePath.IsEmpty() )
{
if (FPlatformFileManager::Get().GetPlatformFile().FileExists(*DevicePath) ||
FPlatformFileManager::Get().GetPlatformFile().DirectoryExists(*DevicePath))
{
FScopeLock Lock( &DevicesCriticalSection );
DeviceName = TEXT("user: ") + DeviceName;
FHTML5TargetDevicePtr& Device = Devices.FindOrAdd( DeviceName );
if( Device.IsValid() )
{ // remove "existing" - so can "update" it
DeviceLostEvent.Broadcast(Device.ToSharedRef());
}
Device = MakeShareable( new FHTML5TargetDevice( *this, DeviceName, DevicePath ) );
DeviceDiscoveredEvent.Broadcast( Device.ToSharedRef() );
if ( DefaultDeviceName.IsEmpty() )
{
DefaultDeviceName = DeviceName;
}
}
}
}
}
struct FBrowserLocation
{
FString Name;
FString Path;
} PossibleLocations[] =
{
#if PLATFORM_WINDOWS
{ TEXT("Nightly(64bit)"), TEXT("C:/Program Files/Nightly/firefox.exe") },
{ TEXT("Nightly"), TEXT("C:/Program Files (x86)/Nightly/firefox.exe") },
{ TEXT("Firefox(64bit)"), TEXT("C:/Program Files/Mozilla Firefox/firefox.exe") },
{ TEXT("Firefox"), TEXT("C:/Program Files (x86)/Mozilla Firefox/firefox.exe") },
{ TEXT("Chrome"), TEXT("C:/Program Files (x86)/Google/Chrome/Application/chrome.exe") },
#elif PLATFORM_MAC
{ TEXT("Safari"), TEXT("/Applications/Safari.app") },
{ TEXT("Firefox"), TEXT("/Applications/Firefox.app") },
{ TEXT("Chrome"), TEXT("/Applications/Google Chrome.app") },
#elif PLATFORM_LINUX
{ TEXT("Firefox"), TEXT("/usr/bin/firefox") },
#else
{ TEXT("Firefox"), TEXT("") },
#endif
};
// Add default devices..
for (const auto& Loc : PossibleLocations)
{
if (FPlatformFileManager::Get().GetPlatformFile().FileExists(*Loc.Path) || FPlatformFileManager::Get().GetPlatformFile().DirectoryExists(*Loc.Path))
{
FScopeLock Lock( &DevicesCriticalSection );
FHTML5TargetDevicePtr& Device = Devices.FindOrAdd( *Loc.Name );
if( !Device.IsValid() )
{
Device = MakeShareable( new FHTML5TargetDevice( *this, *Loc.Name, *Loc.Path ) );
DeviceDiscoveredEvent.Broadcast(Device.ToSharedRef());
}
}
}
}