aboutsummaryrefslogtreecommitdiffstats
path: root/components/canvas_traits/webgl.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/canvas_traits/webgl.rs')
-rw-r--r--components/canvas_traits/webgl.rs19
1 files changed, 17 insertions, 2 deletions
diff --git a/components/canvas_traits/webgl.rs b/components/canvas_traits/webgl.rs
index 2df61282863..16b9d2c0b5e 100644
--- a/components/canvas_traits/webgl.rs
+++ b/components/canvas_traits/webgl.rs
@@ -7,7 +7,7 @@ use gleam::gl;
use gleam::gl::GLsync;
use gleam::gl::GLuint;
use gleam::gl::Gl;
-use ipc_channel::ipc::{IpcBytesReceiver, IpcBytesSender, IpcSharedMemory};
+use ipc_channel::ipc::{IpcBytesReceiver, IpcBytesSender, IpcSender, IpcSharedMemory};
use pixels::PixelFormat;
use std::borrow::Cow;
use std::fmt;
@@ -175,10 +175,25 @@ impl WebGLMsgSender {
pub fn send_dom_to_texture(&self, command: DOMToTextureCommand) -> WebGLSendResult {
self.sender.send(WebGLMsg::DOMToTextureCommand(command))
}
+
+ pub fn webxr_external_image_api(&self) -> impl webxr_api::WebGLExternalImageApi {
+ SerializableWebGLMsgSender {
+ ctx_id: self.ctx_id,
+ sender: self.sender.to_ipc(),
+ }
+ }
+}
+
+// WegGLMsgSender isn't actually serializable, despite what it claims.
+#[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
+struct SerializableWebGLMsgSender {
+ ctx_id: WebGLContextId,
+ #[ignore_malloc_size_of = "channels are hard"]
+ sender: IpcSender<WebGLMsg>,
}
#[typetag::serde]
-impl webxr_api::WebGLExternalImageApi for WebGLMsgSender {
+impl webxr_api::WebGLExternalImageApi for SerializableWebGLMsgSender {
fn lock(&self) -> Result<(GLuint, Size2D<i32>, GLsync), webxr_api::Error> {
let (sender, receiver) = webgl_channel().or(Err(webxr_api::Error::CommunicationError))?;
self.sender