Browse Source

update egl properties for wrapped texture.

tmp-winuicomp_with_manual_fbo
Dan Walmsley 6 years ago
parent
commit
e6cf04d4e1
  1. 4
      src/Avalonia.OpenGL/Angle/AngleWin32EglDisplay.cs
  2. 2
      src/Avalonia.OpenGL/EglConsts.cs
  3. 4
      src/Windows/Avalonia.Win32/Composition/CompositionHost.cs

4
src/Avalonia.OpenGL/Angle/AngleWin32EglDisplay.cs

@ -78,11 +78,11 @@ namespace Avalonia.OpenGL.Angle
return d3dDeviceHandle;
}
public EglSurface WrapDirect3D11Texture(IntPtr handle, int offsetX, int offsetY)
public EglSurface WrapDirect3D11Texture(IntPtr handle, int offsetX, int offsetY, int width, int height)
{
if (PlatformApi != AngleOptions.PlatformApi.DirectX11)
throw new InvalidOperationException("Current platform API is " + PlatformApi);
return CreatePBufferFromClientBuffer(EGL_D3D_TEXTURE_ANGLE, handle, new[] { EGL_TEXTURE_OFFSET_X_ANGLE, offsetX, EGL_TEXTURE_OFFSET_Y_ANGLE, offsetY, EGL_NONE, EGL_NONE });
return CreatePBufferFromClientBuffer(EGL_D3D_TEXTURE_ANGLE, handle, new[] { EGL_WIDTH, width, EGL_HEIGHT, height, EGL_FLEXIBLE_SURFACE_COMPATIBILITY_SUPPORTED_ANGLE, EGL_TRUE, EGL_TEXTURE_OFFSET_X_ANGLE, offsetX, EGL_TEXTURE_OFFSET_Y_ANGLE, offsetY, EGL_NONE });
}
}
}

2
src/Avalonia.OpenGL/EglConsts.cs

@ -209,5 +209,7 @@ namespace Avalonia.OpenGL
public const int EGL_TEXTURE_OFFSET_X_ANGLE = 0x3490;
public const int EGL_TEXTURE_OFFSET_Y_ANGLE = 0x3491;
public const int EGL_FLEXIBLE_SURFACE_COMPATIBILITY_SUPPORTED_ANGLE = 0x33A6;
}
}

4
src/Windows/Avalonia.Win32/Composition/CompositionHost.cs

@ -87,14 +87,14 @@ namespace Avalonia.Win32
if (lastSize.X != _info.Size.Width || lastSize.Y != _info.Size.Height)
{
lastSize = new POINT { X = _info.Size.Width, Y = _info.Size.Height };
// _surfaceInterop.Resize(lastSize);
_surfaceInterop.Resize(lastSize);
}
_surfaceInterop.BeginDraw(
ref updateRect,
ref iid,
out IntPtr texture, ref offset);
var surface = (_display as AngleWin32EglDisplay).WrapDirect3D11Texture(texture, offset.X, offset.Y);
var surface = (_display as AngleWin32EglDisplay).WrapDirect3D11Texture(texture, offset.X, offset.Y, _info.Size.Width, _info.Size.Height);
return base.BeginDraw(surface, _info, () => { _surfaceInterop.EndDraw(); Marshal.Release(texture); surface.Dispose(); }, true);
}

Loading…
Cancel
Save