update Unreal build script docs: add launch command

This commit is contained in:
2026-01-21 09:41:29 +01:00
parent cbc03c0674
commit 341d663b36

View File

@@ -23,7 +23,32 @@ MosisService provides a virtual phone that game engines can display and interact
**Location**: `D:\Dev\Mosis\MosisUnreal\Plugins\MosisSDK\`
### Build Commands
### Build Script (Recommended)
Use the build script for one-command builds and deployment:
```batch
cd D:\Dev\Mosis\MosisUnreal
:: Build, install, and launch (default)
build-unreal.bat
:: Build APK only
build-unreal.bat build
:: Install to device only (requires prior build)
build-unreal.bat install
:: Launch app (starts MosisService first, then MosisUnreal)
build-unreal.bat launch
:: Clean build artifacts
build-unreal.bat clean
```
The script auto-detects connected Android devices, handles APK and OBB installation, and properly sequences app launches (MosisService must start before MosisUnreal).
### Manual Build Commands
```batch
:: Windows Editor Build
@@ -272,15 +297,50 @@ adb logcat -s MosisSDK MosisTest RMLUI Vulkan
Both game engines use Vulkan to import AHardwareBuffer from MosisService.
### UE5 Implementation
MosisUnreal uses UE5's built-in Vulkan RHI API for hardware buffer import:
```cpp
#include "IVulkanDynamicRHI.h"
// Import AHardwareBuffer as Vulkan texture (zero-copy)
IVulkanDynamicRHI* VulkanRHI = GetIVulkanDynamicRHI();
FTextureRHIRef ImportedTexture = VulkanRHI->RHICreateTexture2DFromAndroidHardwareBuffer(Buffer);
// GPU-to-GPU copy to destination texture each frame
ENQUEUE_RENDER_COMMAND(CopyMosisTexture)(
[SrcTexture, DstTexture, Width, Height](FRHICommandListImmediate& RHICmdList)
{
RHICmdList.Transition(FRHITransitionInfo(SrcTexture, ERHIAccess::Unknown, ERHIAccess::CopySrc));
RHICmdList.Transition(FRHITransitionInfo(DstTexture, ERHIAccess::Unknown, ERHIAccess::CopyDest));
FRHICopyTextureInfo CopyInfo;
CopyInfo.Size = FIntVector(Width, Height, 1);
RHICmdList.CopyTexture(SrcTexture, DstTexture, CopyInfo);
RHICmdList.Transition(FRHITransitionInfo(DstTexture, ERHIAccess::CopyDest, ERHIAccess::SRVMask));
}
);
```
**Key files:**
- `MosisPhoneTexture.cpp` - Vulkan import and GPU copy
- `MosisPhoneComponent.cpp` - Frame update coordination
### Required Vulkan Extensions
UE5's VulkanRHI enables these automatically on Android:
```
VK_ANDROID_external_memory_android_hardware_buffer
VK_KHR_external_memory
VK_KHR_dedicated_allocation
```
### Import Pattern
### Raw Vulkan Import Pattern (Reference)
For custom implementations outside UE5:
```cpp
// 1. Query buffer properties
@@ -299,9 +359,6 @@ VkExternalMemoryImageCreateInfo extInfo = {
.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
};
AHardwareBuffer_Desc desc;
AHardwareBuffer_describe(buffer, &desc);
VkImageCreateInfo imageInfo = {
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
.pNext = &extInfo,
@@ -339,10 +396,6 @@ vkAllocateMemory(device, &allocInfo, nullptr, &memory);
vkBindImageMemory(device, image, memory, 0);
```
### Synchronization
Currently using CPU synchronization (`vkQueueWaitIdle` / `glFinish`). Future improvement: use Vulkan semaphores for GPU-GPU sync.
### Double Buffering
The imported image is copied to a local texture each frame to prevent data races with MosisService rendering.
The imported image is copied to a local texture each frame via GPU copy to prevent data races with MosisService rendering. This is a fast GPU-to-GPU blit operation.