bool VRDisplayOpenVR::SubmitFrame(void* aTextureHandle, ::vr::ETextureType aTextureType, const IntSize& aSize, const gfx::Rect& aLeftEyeRect, const gfx::Rect& aRightEyeRect) { MOZ_ASSERT(mSubmitThread->GetThread() == NS_GetCurrentThread()); if (!mIsPresenting) { return false; } ::vr::Texture_t tex; tex.handle = aTextureHandle; tex.eType = aTextureType; tex.eColorSpace = ::vr::EColorSpace::ColorSpace_Auto; ::vr::VRTextureBounds_t bounds; bounds.uMin = aLeftEyeRect.X(); bounds.vMin = 1.0 - aLeftEyeRect.Y(); bounds.uMax = aLeftEyeRect.XMost(); bounds.vMax = 1.0 - aLeftEyeRect.YMost(); ::vr::EVRCompositorError err; err = mVRCompositor->Submit(::vr::EVREye::Eye_Left, &tex, &bounds); if (err != ::vr::EVRCompositorError::VRCompositorError_None) { printf_stderr("OpenVR Compositor Submit() failed.\n"); } bounds.uMin = aRightEyeRect.X(); bounds.vMin = 1.0 - aRightEyeRect.Y(); bounds.uMax = aRightEyeRect.XMost(); bounds.vMax = 1.0 - aRightEyeRect.YMost(); err = mVRCompositor->Submit(::vr::EVREye::Eye_Right, &tex, &bounds); if (err != ::vr::EVRCompositorError::VRCompositorError_None) { printf_stderr("OpenVR Compositor Submit() failed.\n"); } mVRCompositor->PostPresentHandoff(); return true; }
void CompositorD3D9::ClearRect(const gfx::Rect& aRect) { D3DRECT rect; rect.x1 = aRect.X(); rect.y1 = aRect.Y(); rect.x2 = aRect.XMost(); rect.y2 = aRect.YMost(); device()->Clear(1, &rect, D3DCLEAR_TARGET, 0x00000000, 0, 0); }