Skip to content

Commit d04d1e4

Browse files
committed
Fixed viewport issues on mobile phone AR
1 parent 4b01002 commit d04d1e4

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

Packages/webxr/Runtime/Plugins/WebGL/WebXRDisplayProvider.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ class WebXRDisplayProvider : ProviderImpl
5959
std::vector<UnityXRRenderTextureId> m_UnityTextures;
6060
std::vector<UnityXRVector2> m_UnityTexturesSizes;
6161
float *m_ViewsDataArray;
62+
float viewWidth;
63+
float viewHeight;
6264
float frameBufferWidth;
6365
float frameBufferHeight;
6466
bool hasMultipleViews = true;
@@ -85,16 +87,26 @@ UnitySubsystemErrorCode WebXRDisplayProvider::Initialize()
8587
UnitySubsystemErrorCode WebXRDisplayProvider::Start()
8688
{
8789
m_ViewsDataArray = WebXRGetViewsDataArray();
90+
viewWidth = *(m_ViewsDataArray + 46);
91+
viewHeight = *(m_ViewsDataArray + 47);
8892
frameBufferWidth = *(m_ViewsDataArray + 56);
8993
frameBufferHeight = *(m_ViewsDataArray + 57);
9094
printf("Start %f, %f\n", frameBufferWidth, frameBufferHeight);
91-
float viewsHalfDistance = 0.5f * sqrt(
92-
pow((*(m_ViewsDataArray + 40) - *(m_ViewsDataArray + 43)), 2)
93-
+ pow((*(m_ViewsDataArray + 41) - *(m_ViewsDataArray + 44)), 2)
94-
+ pow((*(m_ViewsDataArray + 42) - *(m_ViewsDataArray + 45)), 2));
95-
s_PoseXPositionPerPass[0] = -viewsHalfDistance;
96-
s_PoseXPositionPerPass[1] = viewsHalfDistance;
9795
hasMultipleViews = *(m_ViewsDataArray + 54) > 1;
96+
if (hasMultipleViews)
97+
{
98+
float viewsHalfDistance = 0.5f * sqrt(
99+
pow((*(m_ViewsDataArray + 40) - *(m_ViewsDataArray + 43)), 2)
100+
+ pow((*(m_ViewsDataArray + 41) - *(m_ViewsDataArray + 44)), 2)
101+
+ pow((*(m_ViewsDataArray + 42) - *(m_ViewsDataArray + 45)), 2));
102+
s_PoseXPositionPerPass[0] = -viewsHalfDistance;
103+
s_PoseXPositionPerPass[1] = viewsHalfDistance;
104+
}
105+
else
106+
{
107+
s_PoseXPositionPerPass[0] = 0;
108+
s_PoseXPositionPerPass[1] = 0;
109+
}
98110
transparentBackground = *(m_ViewsDataArray + 55) > 0;
99111
webXRFrameBuffer = WebXRInitDisplayRender();
100112

@@ -364,8 +376,8 @@ void WebXRDisplayProvider::Shutdown()
364376

365377
void WebXRDisplayProvider::CreateTextures(int numTextures, int textureArrayLength, float requestedTextureScale)
366378
{
367-
const int texWidth = (int)(frameBufferWidth);
368-
const int texHeight = (int)(frameBufferHeight);
379+
const int texWidth = (int)(SIDE_BY_SIDE ? frameBufferWidth : viewWidth);
380+
const int texHeight = (int)(SIDE_BY_SIDE ? frameBufferHeight : viewHeight);
369381

370382
//m_NativeTextures.resize(numTextures);
371383
m_UnityTextures.resize(numTextures);

0 commit comments

Comments
 (0)