Skip to content

Commit dcf25ec

Browse files
authored
Add NativeCapture (#156)
1 parent 69203e7 commit dcf25ec

File tree

11 files changed

+56
-4
lines changed

11 files changed

+56
-4
lines changed

Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonReactNative.vcxproj

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@
128128
<!-- Libraries built from repo will be autolinked -->
129129
<AdditionalDependencies Condition="Exists('$(BabylonReactNativeDir)\submodules\BabylonNative')">WindowsApp.lib;%(AdditionalDependencies);</AdditionalDependencies>
130130
<!-- Libraries built from npm package need to be declared-->
131-
<AdditionalDependencies Condition="Exists('$(ProjectDir)..\libs')">arcana.lib;astc.lib;astc-codec.lib;BabylonNative.lib;bgfx.lib;bimg.lib;bx.lib;edtaa3.lib;etc1.lib;etc2.lib;GenericCodeGend.lib;glslangd.lib;Graphics.lib;iqa.lib;jsi.lib;JsRuntime.lib;MachineIndependentd.lib;napi.lib;NativeEngine.lib;NativeInput.lib;NativeXr.lib;nvtt.lib;OGLCompilerd.lib;openxr_loader.lib;OSDependentd.lib;pvrtc.lib;spirv-cross-core.lib;spirv-cross-glsl.lib;spirv-cross-hlsl.lib;SPIRVd.lib;squish.lib;UrlLib.lib;Window.lib;XMLHttpRequest.lib;xr.lib;WindowsApp.lib;%(AdditionalDependencies);</AdditionalDependencies>
131+
<AdditionalDependencies Condition="Exists('$(ProjectDir)..\libs')">arcana.lib;astc.lib;astc-codec.lib;BabylonNative.lib;bgfx.lib;bimg.lib;bx.lib;edtaa3.lib;etc1.lib;etc2.lib;GenericCodeGend.lib;glslangd.lib;Graphics.lib;iqa.lib;jsi.lib;JsRuntime.lib;MachineIndependentd.lib;napi.lib;NativeCapture.lib;NativeEngine.lib;NativeInput.lib;NativeXr.lib;nvtt.lib;OGLCompilerd.lib;openxr_loader.lib;OSDependentd.lib;pvrtc.lib;spirv-cross-core.lib;spirv-cross-glsl.lib;spirv-cross-hlsl.lib;SPIRVd.lib;squish.lib;UrlLib.lib;Window.lib;XMLHttpRequest.lib;xr.lib;WindowsApp.lib;%(AdditionalDependencies);</AdditionalDependencies>
132132
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
133133
<!-- Library directories when building in repo -->
134134
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64' And Exists('$(BabylonReactNativeDir)\submodules\BabylonNative')">$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Dependencies\bgfx.cmake\Debug;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Dependencies\napi\napi-jsi\Debug;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\jsi\Debug;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Core\JsRuntime\Debug;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Core\Graphics\Debug;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Plugins\NativeInput\Debug;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@@ -157,7 +157,7 @@
157157
<!-- Libraries built from repo will be autolinked -->
158158
<AdditionalDependencies Condition="Exists('$(BabylonReactNativeDir)\submodules\BabylonNative')">WindowsApp.lib;%(AdditionalDependencies)"</AdditionalDependencies>
159159
<!-- Libraries built from npm package need to be declared-->
160-
<AdditionalDependencies Condition="Exists('$(ProjectDir)..\libs')">arcana.lib;astc.lib;astc-codec.lib;BabylonNative.lib;bgfx.lib;bimg.lib;bx.lib;edtaa3.lib;etc1.lib;etc2.lib;GenericCodeGen.lib;glslang.lib;Graphics.lib;iqa.lib;jsi.lib;JsRuntime.lib;MachineIndependent.lib;napi.lib;NativeEngine.lib;NativeInput.lib;NativeXr.lib;nvtt.lib;OGLCompiler.lib;openxr_loader.lib;OSDependent.lib;pvrtc.lib;spirv-cross-core.lib;spirv-cross-glsl.lib;spirv-cross-hlsl.lib;SPIRV.lib;squish.lib;UrlLib.lib;Window.lib;XMLHttpRequest.lib;xr.lib;WindowsApp.lib;%(AdditionalDependencies);</AdditionalDependencies>
160+
<AdditionalDependencies Condition="Exists('$(ProjectDir)..\libs')">arcana.lib;astc.lib;astc-codec.lib;BabylonNative.lib;bgfx.lib;bimg.lib;bx.lib;edtaa3.lib;etc1.lib;etc2.lib;GenericCodeGen.lib;glslang.lib;Graphics.lib;iqa.lib;jsi.lib;JsRuntime.lib;MachineIndependent.lib;napi.lib;NativeCapture.lib;NativeEngine.lib;NativeInput.lib;NativeXr.lib;nvtt.lib;OGLCompiler.lib;openxr_loader.lib;OSDependent.lib;pvrtc.lib;spirv-cross-core.lib;spirv-cross-glsl.lib;spirv-cross-hlsl.lib;SPIRV.lib;squish.lib;UrlLib.lib;Window.lib;XMLHttpRequest.lib;xr.lib;WindowsApp.lib;%(AdditionalDependencies);</AdditionalDependencies>
161161
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
162162
<!-- Library directories when building in repo -->
163163
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64' And Exists('$(BabylonReactNativeDir)\submodules\BabylonNative')">$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Dependencies\bgfx.cmake\Release;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Dependencies\napi\napi-jsi\Release;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\jsi\Release;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Core\JsRuntime\Release;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Core\Graphics\Release;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Plugins\NativeInput\Release;$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@@ -289,6 +289,9 @@
289289
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\jsi\jsi.vcxproj">
290290
<Project>{bddbd49e-873f-33e4-a99d-9d8e77b16433}</Project>
291291
</ProjectReference>
292+
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Plugins\NativeCapture\NativeCapture.vcxproj">
293+
<Project>{20eb2920-32bc-4aa6-9ba0-969a25d6bdb9}</Project>
294+
</ProjectReference>
292295
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x64\Plugins\NativeEngine\NativeEngine.vcxproj">
293296
<Project>{2c18692b-80ea-335e-a473-15a19374ace0}</Project>
294297
</ProjectReference>
@@ -397,6 +400,9 @@
397400
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_arm64\jsi\jsi.vcxproj">
398401
<Project>{0897d738-8022-3a3d-95b8-2b4ff7f8365e}</Project>
399402
</ProjectReference>
403+
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_arm64\Plugins\NativeCapture\NativeCapture.vcxproj">
404+
<Project>{47771cab-ac3b-4673-b77e-af13a702993a}</Project>
405+
</ProjectReference>
400406
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_arm64\Plugins\NativeEngine\NativeEngine.vcxproj">
401407
<Project>{d582c0e4-9a19-3024-8039-2f8ee50bc8de}</Project>
402408
</ProjectReference>
@@ -505,6 +511,9 @@
505511
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x86\jsi\jsi.vcxproj">
506512
<Project>{1b2a5e60-84f3-34c9-9318-5cf2ac668433}</Project>
507513
</ProjectReference>
514+
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x86\Plugins\NativeCapture\NativeCapture.vcxproj">
515+
<Project>{12221f10-00b8-45b6-8b56-c9b42bb54c6f}</Project>
516+
</ProjectReference>
508517
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_x86\Plugins\NativeEngine\NativeEngine.vcxproj">
509518
<Project>{b9a708f6-9986-3270-b7b4-a3674ffa0053}</Project>
510519
</ProjectReference>
@@ -613,6 +622,9 @@
613622
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_arm\jsi\jsi.vcxproj">
614623
<Project>{93d05ba2-59b9-3592-ab31-c441fb3d7989}</Project>
615624
</ProjectReference>
625+
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_arm\Plugins\NativeCapture\NativeCapture.vcxproj">
626+
<Project>{21595e71-26ec-4dd4-85e3-59208622c21d}</Project>
627+
</ProjectReference>
616628
<ProjectReference Include="$(BabylonReactNativeDir)\submodules\BabylonNative\Build_uwp_arm\Plugins\NativeEngine\NativeEngine.vcxproj">
617629
<Project>{4c5576a1-09a2-3815-8402-1fdc77ecdaf4}</Project>
618630
</ProjectReference>

Modules/@babylonjs/react-native-windows/windows/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ target_link_libraries(BabylonNative
3737
Graphics
3838
jsi
3939
JsRuntime
40+
NativeCapture
4041
NativeEngine
4142
NativeInput
4243
NativeXr
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
export type CapturedFrame = {
2+
width: number;
3+
height: number;
4+
pitch: number;
5+
format: "BGRA8" | undefined;
6+
yFlip: boolean;
7+
data: ArrayBuffer;
8+
};
9+
10+
export type CaptureCallback = (capture: CapturedFrame) => void;
11+
12+
declare class NativeCapture {
13+
public constructor();
14+
public addCallback(onCaptureCallback: CaptureCallback): void;
15+
public dispose(): void;
16+
};
17+
18+
export class CaptureSession {
19+
private readonly nativeCapture: NativeCapture;
20+
21+
public constructor(onCaptureCallback: CaptureCallback) {
22+
console.warn(`CaptureSession is experimental and likely to change significantly.`);
23+
this.nativeCapture = new NativeCapture();
24+
this.nativeCapture.addCallback(onCaptureCallback);
25+
}
26+
27+
public dispose(): void {
28+
this.nativeCapture.dispose();
29+
}
30+
}

Modules/@babylonjs/react-native/android/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ target_link_libraries(BabylonNative
7575
AndroidExtensions
7676
Graphics
7777
JsRuntime
78+
NativeCapture
7879
NativeEngine
7980
NativeInput
8081
NativeXr
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export * from './EngineView';
22
export * from './EngineHook';
3+
export * from './NativeCapture';

Modules/@babylonjs/react-native/ios/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ target_link_libraries(BabylonNative
4343
jsi
4444
reactnative
4545
JsRuntime
46+
NativeCapture
4647
NativeEngine
4748
NativeInput
4849
NativeXr

Modules/@babylonjs/react-native/react-native-babylon.podspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Pod::Spec.new do |s|
3030
'OSDependent',
3131
'MachineIndependent',
3232
'napi',
33+
'NativeCapture',
3334
'NativeEngine',
3435
'NativeInput',
3536
'NativeXR',

Modules/@babylonjs/react-native/shared/BabylonNative.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <Babylon/Graphics.h>
44
#include <Babylon/JsRuntime.h>
5+
#include <Babylon/Plugins/NativeCapture.h>
56
#include <Babylon/Plugins/NativeEngine.h>
67
#include <Babylon/Plugins/NativeInput.h>
78
#include <Babylon/Plugins/NativeXr.h>
@@ -52,7 +53,8 @@ namespace Babylon
5253

5354
// Initialize Babylon Native plugins
5455
Plugins::NativeXr::Initialize(m_env);
55-
m_nativeInput = &Babylon::Plugins::NativeInput::CreateForJavaScript(m_env);
56+
Plugins::NativeCapture::Initialize(m_env);
57+
m_nativeInput = &Plugins::NativeInput::CreateForJavaScript(m_env);
5658

5759
// Initialize Babylon Native polyfills
5860
Polyfills::Window::Initialize(m_env);

Package/gulpfile.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ Assembled/ios/libs/libOGLCompiler.a
244244
Assembled/ios/libs/libastc.a
245245
Assembled/ios/libs/libNativeEngine.a
246246
Assembled/ios/libs/libNativeXr.a
247+
Assembled/ios/libs/libNativeCapture.a
247248
Assembled/ios/libs/libspirv-cross-glsl.a
248249
Assembled/ios/libs/libNativeInput.a
249250
Assembled/ios/libs/libJsRuntime.a
@@ -297,6 +298,7 @@ Assembled/android/src/main/jniLibs/arm64-v8a
297298
Assembled/android/src/main/jniLibs/arm64-v8a/libturbomodulejsijni.so
298299
Assembled/android/src/main/jniLibs/arm64-v8a/libBabylonNative.so
299300
Assembled/react-native-babylon.podspec
301+
Assembled/NativeCapture.ts
300302
Assembled/index.ts
301303
Assembled/VersionValidation.ts
302304
Assembled/BabylonModule.ts

0 commit comments

Comments
 (0)