⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 285846 in webkit


Ignore:
Timestamp:
Nov 15, 2021, 6:11:27 PM (5 years ago)
Author:
weinig@apple.com
Message:

Add another <model> backend backed by SceneKit to prove out ModelPlayer infrastructure a bit more
https://bugs.webkit.org/show_bug.cgi?id=233112

Reviewed by Dean Jackson.

Source/WebCore:

Adds basic SceneKit based ModelPlayer implementation. Like the ARKit player, this one
also requires writing the USD file to a temporary file as SceneKit does not support
loading USD files from NSData, and therefore is not actually something that can be used
for production yet.

The player is backed by a SceneKitModel class, which is created via a SceneKitModelLoader.
Both SceneKitModel and SceneKitModelLoader are abstract so that different types of models
can be supported. Currently, there is only a USD loader implemented for parity with the
ARKit based implementation.

  • SourcesCocoa.txt:
  • WebCore.xcodeproj/project.pbxproj:

Add new files.

  • Modules/model-element/scenekit: Added.
  • Modules/model-element/scenekit/SceneKitModel.h: Added.
  • Modules/model-element/scenekit/SceneKitModel.mm: Added.

Abstract base class for loader specific implementations.

  • Modules/model-element/scenekit/SceneKitModelLoader.h: Added.
  • Modules/model-element/scenekit/SceneKitModelLoader.mm: Added.

(WebCore::loadSceneKitModel):
Entry point where different loaders can be referenced for different
file types. As noted above, currenly only a USD loader is implementend.

  • Modules/model-element/scenekit/SceneKitModelLoaderClient.h: Added.
  • Modules/model-element/scenekit/SceneKitModelLoaderClient.mm: Added.

Interface to pass state back to whatever requested the load.

  • Modules/model-element/scenekit/SceneKitModelLoaderUSD.h: Added.
  • Modules/model-element/scenekit/SceneKitModelLoaderUSD.mm: Added.

Loads USD file into a SCNScene which the client can attach to a
renderer (e.g. the SCNMetalLayer).

  • Modules/model-element/scenekit/SceneKitModelPlayer.h: Added.
  • Modules/model-element/scenekit/SceneKitModelPlayer.mm: Added.

The SceneKitModelPlayer uses loadSceneKitModel() to load and build
a SCNScene asynchonously that it then attaches to its SCNMetalLayer.

Source/WebCore/PAL:

  • PAL.xcodeproj/project.pbxproj:
  • pal/spi/cocoa/SceneKitSPI.h: Added.

Adds forward declaration of SCNMetalLayer SPI so SceneKit can be used
without an NSView/UIView.

Source/WebKit:

Add support for instantiating the new SceneKit backed ModelPlayer.

If both ARKit based ModelPlayer and SceneKit based ModelPlayer are enabled,
the ARKit one wins.

  • WebProcess/Model/WebModelPlayerProvider.cpp:

(WebKit::WebModelPlayerProvider::createModelPlayer):
Add support for creating a SceneKit based ModelPlayer and add checks
for whether the backend is enabled.

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::updatePreferences):

  • WebProcess/WebPage/WebPage.h:

(WebKit::WebPage::useARKitForModel const):
(WebKit::WebPage::useSceneKitForModel const):
Add bits to store which <model> backends are enabled.

Source/WTF:

  • Scripts/Preferences/WebPreferencesInternal.yaml:

Add some internal settings to enable/disable the ARKit and SceneKit based
<model> backends.

  • wtf/PlatformHave.h:

Add HAVE macro for SceneKit. Only enabled for macOS at the moment, but could
probably be enabled for iOS if it is useful.

Location:
trunk/Source
Files:
11 added
13 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r285841 r285846  
     12021-11-15  Sam Weinig  <weinig@apple.com>
     2
     3        Add another <model> backend backed by SceneKit to prove out ModelPlayer infrastructure a bit more
     4        https://bugs.webkit.org/show_bug.cgi?id=233112
     5
     6        Reviewed by Dean Jackson.
     7
     8        * Scripts/Preferences/WebPreferencesInternal.yaml:
     9        Add some internal settings to enable/disable the ARKit and SceneKit based
     10        <model> backends.
     11
     12        * wtf/PlatformHave.h:
     13        Add HAVE macro for SceneKit. Only enabled for macOS at the moment, but could
     14        probably be enabled for iOS if it is useful.
     15
    1162021-11-15  Eric Liang  <ericliang@apple.com>
    217
  • trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml

    r285787 r285846  
    798798      default: true
    799799
     800UseARKitForModel:
     801  type: bool
     802  humanReadableName: "Use ARKit for <model>"
     803  humanReadableDescription: "Use ARKit for <model>"
     804  webcoreBinding: none
     805  exposed: [ WebKit ]
     806  condition: ENABLE(ARKIT_INLINE_PREVIEW)
     807  defaultValue:
     808    WebKit:
     809      default: true
     810
    800811UseCGDisplayListsForDOMRendering:
    801812  type: bool
     
    819830    WebKit:
    820831      default: defaultUseGPUProcessForDOMRenderingEnabled()
     832
     833UseSceneKitForModel:
     834  type: bool
     835  humanReadableName: "Use SceneKit for <model>"
     836  humanReadableDescription: "Use SceneKit for <model>"
     837  webcoreBinding: none
     838  exposed: [ WebKit ]
     839  condition: HAVE(SCENEKIT)
     840  defaultValue:
     841    WebKit:
     842      default: false
    821843
    822844# FIXME: Remove once <rdar://73830961> has been fixed
  • trunk/Source/WTF/wtf/PlatformHave.h

    r285841 r285846  
    10911091#define HAVE_NSTEXTLIST_MARKER_FORMATS 1
    10921092#endif
     1093
     1094#if PLATFORM(MAC)
     1095#define HAVE_SCENEKIT 1
     1096#endif
  • trunk/Source/WebCore/ChangeLog

    r285838 r285846  
     12021-11-15  Sam Weinig  <weinig@apple.com>
     2
     3        Add another <model> backend backed by SceneKit to prove out ModelPlayer infrastructure a bit more
     4        https://bugs.webkit.org/show_bug.cgi?id=233112
     5
     6        Reviewed by Dean Jackson.
     7
     8        Adds basic SceneKit based ModelPlayer implementation. Like the ARKit player, this one
     9        also requires writing the USD file to a temporary file as SceneKit does not support
     10        loading USD files from NSData, and therefore is not actually something that can be used
     11        for production yet.
     12
     13        The player is backed by a SceneKitModel class, which is created via a SceneKitModelLoader.
     14        Both SceneKitModel and SceneKitModelLoader are abstract so that different types of models
     15        can be supported. Currently, there is only a USD loader implemented for parity with the
     16        ARKit based implementation.
     17
     18        * SourcesCocoa.txt:
     19        * WebCore.xcodeproj/project.pbxproj:
     20        Add new files.
     21
     22        * Modules/model-element/scenekit: Added.
     23        * Modules/model-element/scenekit/SceneKitModel.h: Added.
     24        * Modules/model-element/scenekit/SceneKitModel.mm: Added.
     25        Abstract base class for loader specific implementations.
     26       
     27        * Modules/model-element/scenekit/SceneKitModelLoader.h: Added.
     28        * Modules/model-element/scenekit/SceneKitModelLoader.mm: Added.
     29        (WebCore::loadSceneKitModel):
     30        Entry point where different loaders can be referenced for different
     31        file types. As noted above, currenly only a USD loader is implementend.
     32
     33        * Modules/model-element/scenekit/SceneKitModelLoaderClient.h: Added.
     34        * Modules/model-element/scenekit/SceneKitModelLoaderClient.mm: Added.
     35        Interface to pass state back to whatever requested the load.
     36
     37        * Modules/model-element/scenekit/SceneKitModelLoaderUSD.h: Added.
     38        * Modules/model-element/scenekit/SceneKitModelLoaderUSD.mm: Added.
     39        Loads USD file into a SCNScene which the client can attach to a
     40        renderer (e.g. the SCNMetalLayer).
     41
     42        * Modules/model-element/scenekit/SceneKitModelPlayer.h: Added.
     43        * Modules/model-element/scenekit/SceneKitModelPlayer.mm: Added.
     44        The SceneKitModelPlayer uses loadSceneKitModel() to load and build
     45        a SCNScene asynchonously that it then attaches to its SCNMetalLayer.
     46
    1472021-11-15  Takashi Komori  <Takashi.Komori@sony.com>
    248
  • trunk/Source/WebCore/Configurations/WebCore.xcconfig

    r284383 r285846  
    127127WK_URL_FORMATTING_LDFLAGS_YES = -framework URLFormatting;
    128128
     129WK_SCENEKIT_LDFLAGS = $(WK_SCENEKIT_LDFLAGS_$(WK_PLATFORM_NAME));
     130WK_SCENEKIT_LDFLAGS_macosx = -weak_framework SceneKit;
     131
    129132// FIXME: Reduce the number of allowable_clients <rdar://problem/31823969>
    130 OTHER_LDFLAGS = $(inherited) $(WK_RELOCATABLE_FRAMEWORK_LDFLAGS) -lsqlite3 -lobjc -allowable_client WebCoreTestSupport -allowable_client WebKitLegacy -force_load $(BUILT_PRODUCTS_DIR)/libPAL.a -framework CFNetwork -framework CoreAudio -framework CoreGraphics -framework CoreText -framework Foundation -framework IOSurface -framework ImageIO -framework Metal $(OTHER_LDFLAGS_PLATFORM_$(WK_COCOA_TOUCH)) $(OTHER_LDFLAGS_PLATFORM_$(WK_PLATFORM_NAME)) $(WK_ANGLE_LDFLAGS) $(WK_APPKIT_LDFLAGS) $(WK_APPSUPPORT_LDFLAGS) $(WK_AUDIO_UNIT_LDFLAGS) $(WK_CARBON_LDFLAGS) $(WK_CORE_UI_LDFLAGS) $(WK_DATA_DETECTORS_CORE_LDFLAGS) $(WK_GRAPHICS_SERVICES_LDFLAGS) $(WK_IOSURFACE_ACCELERATOR_LDFLAGS) $(WK_LIBWEBRTC_LDFLAGS) $(WK_MOBILE_CORE_SERVICES_LDFLAGS) $(WK_MOBILE_GESTALT_LDFLAGS) $(WK_NETWORK_EXTENSION_LD_FLAGS) $(WK_SYSTEM_CONFIGURATION_LDFLAGS) $(WK_CORE_IMAGE_LDFLAGS) $(WK_URL_FORMATTING_LDFLAGS);
     133OTHER_LDFLAGS = $(inherited) $(WK_RELOCATABLE_FRAMEWORK_LDFLAGS) -lsqlite3 -lobjc -allowable_client WebCoreTestSupport -allowable_client WebKitLegacy -force_load $(BUILT_PRODUCTS_DIR)/libPAL.a -framework CFNetwork -framework CoreAudio -framework CoreGraphics -framework CoreText -framework Foundation -framework IOSurface -framework ImageIO -framework Metal $(OTHER_LDFLAGS_PLATFORM_$(WK_COCOA_TOUCH)) $(OTHER_LDFLAGS_PLATFORM_$(WK_PLATFORM_NAME)) $(WK_ANGLE_LDFLAGS) $(WK_APPKIT_LDFLAGS) $(WK_APPSUPPORT_LDFLAGS) $(WK_AUDIO_UNIT_LDFLAGS) $(WK_CARBON_LDFLAGS) $(WK_CORE_UI_LDFLAGS) $(WK_DATA_DETECTORS_CORE_LDFLAGS) $(WK_GRAPHICS_SERVICES_LDFLAGS) $(WK_IOSURFACE_ACCELERATOR_LDFLAGS) $(WK_LIBWEBRTC_LDFLAGS) $(WK_MOBILE_CORE_SERVICES_LDFLAGS) $(WK_MOBILE_GESTALT_LDFLAGS) $(WK_NETWORK_EXTENSION_LD_FLAGS) $(WK_SYSTEM_CONFIGURATION_LDFLAGS) $(WK_CORE_IMAGE_LDFLAGS) $(WK_URL_FORMATTING_LDFLAGS) $(WK_SCENEKIT_LDFLAGS);
    131134
    132135OTHER_LDFLAGS_PLATFORM_cocoatouch = -allowable_client WebKit -allowable_client iTunesU -allowable_client Casablanca -allowable_client Remote -allowable_client TVBooks -allowable_client DumpRenderTree -allowable_client WebKitTestRunner -allowable_client TestWebKitAPI;
  • trunk/Source/WebCore/PAL/ChangeLog

    r285836 r285846  
     12021-11-15  Sam Weinig  <weinig@apple.com>
     2
     3        Add another <model> backend backed by SceneKit to prove out ModelPlayer infrastructure a bit more
     4        https://bugs.webkit.org/show_bug.cgi?id=233112
     5
     6        Reviewed by Dean Jackson.
     7
     8        * PAL.xcodeproj/project.pbxproj:
     9        * pal/spi/cocoa/SceneKitSPI.h: Added.
     10        Adds forward declaration of SCNMetalLayer SPI so SceneKit can be used
     11        without an NSView/UIView.
     12
    1132021-11-15  Jer Noble  <jer.noble@apple.com>
    214
  • trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj

    r285831 r285846  
    352352                A3C66CDD1F462D6A009E6EE9 /* SessionID.h in Headers */ = {isa = PBXBuildFile; fileRef = A3C66CDB1F462D6A009E6EE9 /* SessionID.h */; };
    353353                ABCA536824895DB900361BFF /* CoreMotionSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = ABCA536724895DB900361BFF /* CoreMotionSPI.h */; };
     354                BC4DDD9F273EF56E00660EBB /* SceneKitSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = BC4DDD9E273EF56E00660EBB /* SceneKitSPI.h */; };
    354355                C15CBB3523F3548A00300CC7 /* NSUserDefaultsSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = C15CBB3223F34A1200300CC7 /* NSUserDefaultsSPI.h */; };
    355356                CD6122CC2559B6AC00FC657A /* OutputContext.h in Headers */ = {isa = PBXBuildFile; fileRef = CD6122CA2559B6AC00FC657A /* OutputContext.h */; };
     
    756757                A3C66CDB1F462D6A009E6EE9 /* SessionID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SessionID.h; sourceTree = "<group>"; };
    757758                ABCA536724895DB900361BFF /* CoreMotionSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreMotionSPI.h; sourceTree = "<group>"; };
     759                BC4DDD9E273EF56E00660EBB /* SceneKitSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneKitSPI.h; sourceTree = "<group>"; };
    758760                C037494124127CCB00D9A36E /* AccessibilitySupportSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AccessibilitySupportSPI.h; sourceTree = "<group>"; };
    759761                C138EA1A2436447200656DF1 /* CoreServicesSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CoreServicesSPI.h; sourceTree = "<group>"; };
     
    907909                                0C2DA13B1F3BEB4900DBC317 /* QuartzCoreSPI.h */,
    908910                                442956CC218A72DE0080DB54 /* RevealSPI.h */,
     911                                BC4DDD9E273EF56E00660EBB /* SceneKitSPI.h */,
    909912                                570AB8F020AE2E8D00B8BE87 /* SecKeyProxySPI.h */,
    910913                                0C2DA13C1F3BEB4900DBC317 /* ServersSPI.h */,
     
    15381541                                F4974EA3265EEA2200B49B8C /* RevealSoftLink.h in Headers */,
    15391542                                442956CD218A72DF0080DB54 /* RevealSPI.h in Headers */,
     1543                                BC4DDD9F273EF56E00660EBB /* SceneKitSPI.h in Headers */,
    15401544                                570AB8F120AE2E8D00B8BE87 /* SecKeyProxySPI.h in Headers */,
    15411545                                0C2DA1581F3BEB4900DBC317 /* ServersSPI.h in Headers */,
  • trunk/Source/WebCore/PAL/pal/spi/cocoa/SceneKitSPI.h

    r285843 r285846  
    2424 */
    2525
    26 #include "config.h"
    27 #include "WebModelPlayerProvider.h"
     26#pragma once
    2827
    29 #include <WebCore/ModelPlayer.h>
     28#if HAVE(SCENEKIT)
     29#if USE(APPLE_INTERNAL_SDK)
    3030
    31 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC)
    32 #include "ARKitInlinePreviewModelPlayer.h"
     31#import <SceneKit/SceneKitPrivate.h>
     32
     33#else
     34
     35#import <QuartzCore/CAMetalLayer.h>
     36#import <SceneKit/SceneKit.h>
     37
     38@interface SCNMetalLayer : CAMetalLayer <SCNSceneRenderer, SCNTechniqueSupport>
     39@property (nonatomic, retain, nullable) SCNScene *scene;
     40@end
     41
    3342#endif
    3443
    35 namespace WebKit {
    36 
    37 WebModelPlayerProvider::WebModelPlayerProvider(WebPage& page)
    38     : m_page { page }
    39 {
    40     UNUSED_PARAM(m_page);
    41 }
    42 
    43 WebModelPlayerProvider::~WebModelPlayerProvider() = default;
    44 
    45 // MARK: - WebCore::ModelPlayerProvider overrides.
    46 
    47 RefPtr<WebCore::ModelPlayer> WebModelPlayerProvider::createModelPlayer(WebCore::ModelPlayerClient& client)
    48 {
    49 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC)
    50     return ARKitInlinePreviewModelPlayer::create(m_page, client);
    51 #else
    52     UNUSED_PARAM(client);
    53     return nullptr;
    54 #endif
    55 }
    56 
    57 }
     44#endif // HAVE(SCENEKIT)
  • trunk/Source/WebCore/SourcesCocoa.txt

    r285637 r285846  
    102102Modules/async-clipboard/mac/ClipboardImageReaderMac.mm
    103103Modules/mediastream/RTCRtpSFrameTransformerCocoa.cpp
     104Modules/model-element/scenekit/SceneKitModel.mm
     105Modules/model-element/scenekit/SceneKitModelLoader.mm
     106Modules/model-element/scenekit/SceneKitModelLoaderClient.mm
     107Modules/model-element/scenekit/SceneKitModelLoaderUSD.mm
     108Modules/model-element/scenekit/SceneKitModelPlayer.mm
    104109Modules/speech/cocoa/SpeechRecognizerCocoa.mm
    105110Modules/speech/cocoa/WebSpeechRecognizerTask.mm
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r285822 r285846  
    41114111                BC4A5339256063980028C592 /* FontRenderingMode.h in Headers */ = {isa = PBXBuildFile; fileRef = BC4A5338256063980028C592 /* FontRenderingMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
    41124112                BC4A533B256064E10028C592 /* TextDirection.h in Headers */ = {isa = PBXBuildFile; fileRef = BC4A533A256064E10028C592 /* TextDirection.h */; settings = {ATTRIBUTES = (Private, ); }; };
     4113                BC4DDD96273D949900660EBB /* SceneKitModelPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = BC4DDD8F273D84E700660EBB /* SceneKitModelPlayer.h */; settings = {ATTRIBUTES = (Private, ); }; };
     4114                BC4DDD97273D94A800660EBB /* SceneKitModelLoaderClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC4DDD91273D84E700660EBB /* SceneKitModelLoaderClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
    41134115                BC51156E12B1749C00C96754 /* ScrollAnimatorMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC51156D12B1749C00C96754 /* ScrollAnimatorMac.mm */; };
    41144116                BC53C5F50DA56B920021EB5D /* Gradient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC53C5F40DA56B920021EB5D /* Gradient.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    1482614828                BC4A5338256063980028C592 /* FontRenderingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FontRenderingMode.h; sourceTree = "<group>"; };
    1482714829                BC4A533A256064E10028C592 /* TextDirection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextDirection.h; sourceTree = "<group>"; };
     14830                BC4DDD8B273D84E700660EBB /* SceneKitModelLoaderUSD.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneKitModelLoaderUSD.h; sourceTree = "<group>"; };
     14831                BC4DDD8C273D84E700660EBB /* SceneKitModelLoaderClient.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SceneKitModelLoaderClient.mm; sourceTree = "<group>"; };
     14832                BC4DDD8D273D84E700660EBB /* SceneKitModelPlayer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SceneKitModelPlayer.mm; sourceTree = "<group>"; };
     14833                BC4DDD8E273D84E700660EBB /* SceneKitModelLoader.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SceneKitModelLoader.mm; sourceTree = "<group>"; };
     14834                BC4DDD8F273D84E700660EBB /* SceneKitModelPlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneKitModelPlayer.h; sourceTree = "<group>"; };
     14835                BC4DDD90273D84E700660EBB /* SceneKitModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneKitModel.h; sourceTree = "<group>"; };
     14836                BC4DDD91273D84E700660EBB /* SceneKitModelLoaderClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneKitModelLoaderClient.h; sourceTree = "<group>"; };
     14837                BC4DDD92273D84E700660EBB /* SceneKitModel.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SceneKitModel.mm; sourceTree = "<group>"; };
     14838                BC4DDD93273D84E700660EBB /* SceneKitModelLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneKitModelLoader.h; sourceTree = "<group>"; };
     14839                BC4DDD94273D84E700660EBB /* SceneKitModelLoaderUSD.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SceneKitModelLoaderUSD.mm; sourceTree = "<group>"; };
    1482814840                BC51156D12B1749C00C96754 /* ScrollAnimatorMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollAnimatorMac.mm; sourceTree = "<group>"; };
    1482914841                BC51580A0C03D404008BB0EE /* JSHTMLDocumentCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLDocumentCustom.cpp; sourceTree = "<group>"; };
     
    2379323805                        children = (
    2379423806                                BC2B412227335E0C00A2D191 /* dummy */,
     23807                                BC4DDD8A273D84E700660EBB /* scenekit */,
    2379523808                                71A3D1802562B8250064E2A6 /* HTMLModelElement.cpp */,
    2379623809                                71A3D17D2562B8240064E2A6 /* HTMLModelElement.h */,
     
    2839128404                        );
    2839228405                        path = dummy;
     28406                        sourceTree = "<group>";
     28407                };
     28408                BC4DDD8A273D84E700660EBB /* scenekit */ = {
     28409                        isa = PBXGroup;
     28410                        children = (
     28411                                BC4DDD90273D84E700660EBB /* SceneKitModel.h */,
     28412                                BC4DDD92273D84E700660EBB /* SceneKitModel.mm */,
     28413                                BC4DDD93273D84E700660EBB /* SceneKitModelLoader.h */,
     28414                                BC4DDD8E273D84E700660EBB /* SceneKitModelLoader.mm */,
     28415                                BC4DDD91273D84E700660EBB /* SceneKitModelLoaderClient.h */,
     28416                                BC4DDD8C273D84E700660EBB /* SceneKitModelLoaderClient.mm */,
     28417                                BC4DDD8B273D84E700660EBB /* SceneKitModelLoaderUSD.h */,
     28418                                BC4DDD94273D84E700660EBB /* SceneKitModelLoaderUSD.mm */,
     28419                                BC4DDD8F273D84E700660EBB /* SceneKitModelPlayer.h */,
     28420                                BC4DDD8D273D84E700660EBB /* SceneKitModelPlayer.mm */,
     28421                        );
     28422                        path = scenekit;
    2839328423                        sourceTree = "<group>";
    2839428424                };
     
    3591935949                                CDD7089718359F6F002B3DC6 /* SampleMap.h in Headers */,
    3592035950                                49E911CB0EF86D47009D0CAF /* ScaleTransformOperation.h in Headers */,
     35951                                BC4DDD97273D94A800660EBB /* SceneKitModelLoaderClient.h in Headers */,
     35952                                BC4DDD96273D949900660EBB /* SceneKitModelPlayer.h in Headers */,
    3592135953                                5DFE8F570D16477C0076E937 /* ScheduledAction.h in Headers */,
    3592235954                                9BD0BF9312A42BF50072FD43 /* ScopedEventQueue.h in Headers */,
  • trunk/Source/WebKit/ChangeLog

    r285841 r285846  
     12021-11-15  Sam Weinig  <weinig@apple.com>
     2
     3        Add another <model> backend backed by SceneKit to prove out ModelPlayer infrastructure a bit more
     4        https://bugs.webkit.org/show_bug.cgi?id=233112
     5
     6        Reviewed by Dean Jackson.
     7
     8        Add support for instantiating the new SceneKit backed ModelPlayer.
     9
     10        If both ARKit based ModelPlayer and SceneKit based ModelPlayer are enabled,
     11        the ARKit one wins.
     12
     13        * WebProcess/Model/WebModelPlayerProvider.cpp:
     14        (WebKit::WebModelPlayerProvider::createModelPlayer):
     15        Add support for creating a SceneKit based ModelPlayer and add checks
     16        for whether the backend is enabled.
     17
     18        * WebProcess/WebPage/WebPage.cpp:
     19        (WebKit::WebPage::updatePreferences):
     20        * WebProcess/WebPage/WebPage.h:
     21        (WebKit::WebPage::useARKitForModel const):
     22        (WebKit::WebPage::useSceneKitForModel const):
     23        Add bits to store which <model> backends are enabled.
     24
    1252021-11-15  Eric Liang  <ericliang@apple.com>
    226
  • trunk/Source/WebKit/WebProcess/Model/WebModelPlayerProvider.cpp

    r285637 r285846  
    2727#include "WebModelPlayerProvider.h"
    2828
     29#include "WebPage.h"
    2930#include <WebCore/ModelPlayer.h>
    3031
    3132#if ENABLE(ARKIT_INLINE_PREVIEW_MAC)
    3233#include "ARKitInlinePreviewModelPlayer.h"
     34#endif
     35
     36#if HAVE(SCENEKIT)
     37#include <WebCore/SceneKitModelPlayer.h>
    3338#endif
    3439
     
    4752RefPtr<WebCore::ModelPlayer> WebModelPlayerProvider::createModelPlayer(WebCore::ModelPlayerClient& client)
    4853{
     54    UNUSED_PARAM(client);
     55
    4956#if ENABLE(ARKIT_INLINE_PREVIEW_MAC)
    50     return ARKitInlinePreviewModelPlayer::create(m_page, client);
    51 #else
    52     UNUSED_PARAM(client);
     57    if (m_page.useARKitForModel())
     58        return ARKitInlinePreviewModelPlayer::create(m_page, client);
     59#endif
     60#if HAVE(SCENEKIT)
     61    if (m_page.useSceneKitForModel())
     62        return WebCore::SceneKitModelPlayer::create(client);
     63#endif
     64
    5365    return nullptr;
    54 #endif
    5566}
    5667
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r285731 r285846  
    40414041#endif
    40424042
     4043    // FIXME: This should be automated by adding a new field in WebPreferences*.yaml
     4044    // that indicates override state for captive portal mode. https://webkit.org/b/233100.
    40434045    if (WebProcess::singleton().isCaptivePortalModeEnabled()) {
    40444046        settings.setWebGLEnabled(false);
     
    40794081#endif
    40804082    }
     4083
     4084#if ENABLE(ARKIT_INLINE_PREVIEW)
     4085    m_useARKitForModel = store.getBoolValueForKey(WebPreferencesKey::useARKitForModelKey());
     4086#endif
     4087#if HAVE(SCENEKIT)
     4088    m_useSceneKitForModel = store.getBoolValueForKey(WebPreferencesKey::useSceneKitForModelKey());
     4089#endif
    40814090
    40824091    m_page->settingsDidChange();
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r285640 r285846  
    15001500#endif
    15011501
     1502#if ENABLE(ARKIT_INLINE_PREVIEW)
     1503    bool useARKitForModel() const { return m_useARKitForModel; };
     1504#endif
     1505#if HAVE(SCENEKIT)
     1506    bool useSceneKitForModel() const { return m_useSceneKitForModel; };
     1507#endif
     1508
    15021509private:
    15031510    WebPage(WebCore::PageIdentifier, WebPageCreationParameters&&);
     
    23692376    bool m_didUpdateRenderingAfterCommittingLoad { false };
    23702377
     2378#if ENABLE(ARKIT_INLINE_PREVIEW)
     2379    bool m_useARKitForModel { false };
     2380#endif
     2381#if HAVE(SCENEKIT)
     2382    bool m_useSceneKitForModel { false };
     2383#endif
     2384
    23712385    Vector<String> m_corsDisablingPatterns;
    23722386
Note: See TracChangeset for help on using the changeset viewer.