mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Revert "Auto merge of #18114 - emilio:revert-webgl-refactor, r=nox"
This reverts commit4d10d39e8f
, reversing changes made toee94e2b7c0
.
This commit is contained in:
parent
4d10d39e8f
commit
676f2c8acf
54 changed files with 3154 additions and 1426 deletions
|
@ -12,13 +12,13 @@
|
|||
|
||||
use app_units::{AU_PER_PX, Au};
|
||||
use block::{BlockFlow, BlockStackingContextType};
|
||||
use canvas_traits::{CanvasData, CanvasMsg, FromLayoutMsg};
|
||||
use canvas_traits::canvas::{CanvasMsg, FromLayoutMsg};
|
||||
use context::LayoutContext;
|
||||
use euclid::{Transform3D, Point2D, Vector2D, Rect, SideOffsets2D, Size2D, TypedSize2D};
|
||||
use flex::FlexFlow;
|
||||
use flow::{BaseFlow, Flow, IS_ABSOLUTELY_POSITIONED};
|
||||
use flow_ref::FlowRef;
|
||||
use fragment::{CoordinateSystem, Fragment, ImageFragmentInfo, ScannedTextFragmentInfo};
|
||||
use fragment::{CanvasFragmentSource, CoordinateSystem, Fragment, ImageFragmentInfo, ScannedTextFragmentInfo};
|
||||
use fragment::{SpecificFragmentInfo, TruncatedFragmentInfo};
|
||||
use gfx::display_list;
|
||||
use gfx::display_list::{BLUR_INFLATION_FACTOR, BaseDisplayItem, BorderDetails, BorderDisplayItem};
|
||||
|
@ -28,7 +28,7 @@ use gfx::display_list::{GradientDisplayItem, IframeDisplayItem, ImageBorder, Ima
|
|||
use gfx::display_list::{LineDisplayItem, NormalBorder, OpaqueNode, PushTextShadowDisplayItem};
|
||||
use gfx::display_list::{PopTextShadowDisplayItem, RadialGradientDisplayItem, ScrollRoot};
|
||||
use gfx::display_list::{ScrollRootType, SolidColorDisplayItem, StackingContext, StackingContextType};
|
||||
use gfx::display_list::{TextDisplayItem, TextOrientation, WebGLDisplayItem, WebRenderImageInfo};
|
||||
use gfx::display_list::{TextDisplayItem, TextOrientation, WebRenderImageInfo};
|
||||
use gfx_traits::{combine_id_with_fragment_type, FragmentType, StackingContextId};
|
||||
use inline::{FIRST_FRAGMENT_OF_ELEMENT, InlineFlow, LAST_FRAGMENT_OF_ELEMENT};
|
||||
use ipc_channel::ipc;
|
||||
|
@ -1978,15 +1978,22 @@ impl FragmentDisplayListBuilding for Fragment {
|
|||
let computed_width = canvas_fragment_info.dom_width.to_px();
|
||||
let computed_height = canvas_fragment_info.dom_height.to_px();
|
||||
|
||||
let canvas_data = match canvas_fragment_info.ipc_renderer {
|
||||
Some(ref ipc_renderer) => {
|
||||
let ipc_renderer = ipc_renderer.lock().unwrap();
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
ipc_renderer.send(CanvasMsg::FromLayout(
|
||||
FromLayoutMsg::SendData(sender))).unwrap();
|
||||
receiver.recv().unwrap()
|
||||
let (image_key, format) = match canvas_fragment_info.source {
|
||||
CanvasFragmentSource::WebGL(image_key) => {
|
||||
(image_key, PixelFormat::BGRA8)
|
||||
},
|
||||
None => return,
|
||||
CanvasFragmentSource::Image(ref ipc_renderer) => {
|
||||
match *ipc_renderer {
|
||||
Some(ref ipc_renderer) => {
|
||||
let ipc_renderer = ipc_renderer.lock().unwrap();
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
ipc_renderer.send(CanvasMsg::FromLayout(
|
||||
FromLayoutMsg::SendData(sender))).unwrap();
|
||||
(receiver.recv().unwrap().image_key, PixelFormat::BGRA8)
|
||||
},
|
||||
None => return,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let base = state.create_base_display_item(
|
||||
|
@ -1995,29 +2002,19 @@ impl FragmentDisplayListBuilding for Fragment {
|
|||
self.node,
|
||||
self.style.get_cursor(Cursor::Default),
|
||||
DisplayListSection::Content);
|
||||
let display_item = match canvas_data {
|
||||
CanvasData::Image(canvas_data) => {
|
||||
DisplayItem::Image(box ImageDisplayItem {
|
||||
base: base,
|
||||
webrender_image: WebRenderImageInfo {
|
||||
width: computed_width as u32,
|
||||
height: computed_height as u32,
|
||||
format: PixelFormat::BGRA8,
|
||||
key: Some(canvas_data.image_key),
|
||||
},
|
||||
image_data: None,
|
||||
stretch_size: stacking_relative_content_box.size,
|
||||
tile_spacing: Size2D::zero(),
|
||||
image_rendering: image_rendering::T::auto,
|
||||
})
|
||||
}
|
||||
CanvasData::WebGL(context_id) => {
|
||||
DisplayItem::WebGL(box WebGLDisplayItem {
|
||||
base: base,
|
||||
context_id: context_id,
|
||||
})
|
||||
}
|
||||
};
|
||||
let display_item = DisplayItem::Image(box ImageDisplayItem {
|
||||
base: base,
|
||||
webrender_image: WebRenderImageInfo {
|
||||
width: computed_width as u32,
|
||||
height: computed_height as u32,
|
||||
format: format,
|
||||
key: Some(image_key),
|
||||
},
|
||||
image_data: None,
|
||||
stretch_size: stacking_relative_content_box.size,
|
||||
tile_spacing: Size2D::zero(),
|
||||
image_rendering: image_rendering::T::auto,
|
||||
});
|
||||
|
||||
state.add_display_item(display_item);
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
use ServoArc;
|
||||
use app_units::Au;
|
||||
use canvas_traits::CanvasMsg;
|
||||
use canvas_traits::canvas::CanvasMsg;
|
||||
use context::{LayoutContext, with_thread_local_font_context};
|
||||
use euclid::{Transform3D, Point2D, Vector2D, Radians, Rect, Size2D};
|
||||
use floats::ClearType;
|
||||
|
@ -30,7 +30,7 @@ use msg::constellation_msg::{BrowsingContextId, PipelineId};
|
|||
use net_traits::image::base::{Image, ImageMetadata};
|
||||
use net_traits::image_cache::{ImageOrMetadataAvailable, UsePlaceholder};
|
||||
use range::*;
|
||||
use script_layout_interface::HTMLCanvasData;
|
||||
use script_layout_interface::{HTMLCanvasData, HTMLCanvasDataSource};
|
||||
use script_layout_interface::SVGSVGData;
|
||||
use script_layout_interface::wrapper_traits::{PseudoElementType, ThreadSafeLayoutElement, ThreadSafeLayoutNode};
|
||||
use serde::ser::{Serialize, SerializeStruct, Serializer};
|
||||
|
@ -53,6 +53,7 @@ use style::values::{self, Either, Auto};
|
|||
use style::values::computed::{LengthOrPercentage, LengthOrPercentageOrAuto};
|
||||
use text;
|
||||
use text::TextRunScanner;
|
||||
use webrender_api;
|
||||
use wrapper::ThreadSafeLayoutNodeHelpers;
|
||||
|
||||
// From gfxFontConstants.h in Firefox.
|
||||
|
@ -321,18 +322,32 @@ impl InlineAbsoluteFragmentInfo {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub enum CanvasFragmentSource {
|
||||
WebGL(webrender_api::ImageKey),
|
||||
Image(Option<Arc<Mutex<IpcSender<CanvasMsg>>>>)
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct CanvasFragmentInfo {
|
||||
pub ipc_renderer: Option<Arc<Mutex<IpcSender<CanvasMsg>>>>,
|
||||
pub source: CanvasFragmentSource,
|
||||
pub dom_width: Au,
|
||||
pub dom_height: Au,
|
||||
}
|
||||
|
||||
impl CanvasFragmentInfo {
|
||||
pub fn new(data: HTMLCanvasData) -> CanvasFragmentInfo {
|
||||
let source = match data.source {
|
||||
HTMLCanvasDataSource::WebGL(texture_id) => {
|
||||
CanvasFragmentSource::WebGL(texture_id)
|
||||
},
|
||||
HTMLCanvasDataSource::Image(ipc_sender) => {
|
||||
CanvasFragmentSource::Image(ipc_sender.map(|renderer| Arc::new(Mutex::new(renderer))))
|
||||
}
|
||||
};
|
||||
|
||||
CanvasFragmentInfo {
|
||||
ipc_renderer: data.ipc_renderer
|
||||
.map(|renderer| Arc::new(Mutex::new(renderer))),
|
||||
source: source,
|
||||
dom_width: Au::from_px(data.width as i32),
|
||||
dom_height: Au::from_px(data.height as i32),
|
||||
}
|
||||
|
|
|
@ -305,11 +305,6 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
|||
}
|
||||
}
|
||||
}
|
||||
DisplayItem::WebGL(ref item) => {
|
||||
builder.push_webgl_canvas(item.base.bounds.to_rectf(),
|
||||
Some(item.base.local_clip),
|
||||
item.context_id);
|
||||
}
|
||||
DisplayItem::Border(ref item) => {
|
||||
let rect = item.base.bounds.to_rectf();
|
||||
let widths = item.border_widths.to_border_widths();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue