Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1211)

Unified Diff: ui/gfx/compositor/compositor_win.cc

Issue 7552039: Vend common GL context (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address reviewer comments. Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/compositor/compositor_gl.cc ('k') | ui/gfx/compositor/layer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/compositor/compositor_win.cc
diff --git a/ui/gfx/compositor/compositor_win.cc b/ui/gfx/compositor/compositor_win.cc
index 3afb3c4109a7e68508de45b35fb2bc4cee153f53..346fd13ce13f334ea6d0d1f92f5fdc2ab3da7558 100644
--- a/ui/gfx/compositor/compositor_win.cc
+++ b/ui/gfx/compositor/compositor_win.cc
@@ -56,7 +56,6 @@ class ViewTexture : public Texture {
const gfx::Point& origin,
const gfx::Size& overall_size) OVERRIDE;
virtual void Draw(const ui::TextureDrawParams& params) OVERRIDE;
-
virtual void Draw(const ui::TextureDrawParams& params,
const gfx::Rect& clip_bounds_in_texture) OVERRIDE;
@@ -97,9 +96,6 @@ class CompositorWin : public Compositor {
void UpdatePerspective(const ui::Transform& transform,
const gfx::Size& view_size);
- // Returns the overall size of the compositor.
- const gfx::Size& GetHostSize();
-
// Returns the index buffer used for drawing a texture.
ID3D10Buffer* GetTextureIndexBuffer();
@@ -109,7 +105,9 @@ class CompositorWin : public Compositor {
virtual void NotifyEnd() OVERRIDE;
virtual void Blur(const gfx::Rect& bounds) OVERRIDE;
virtual void SchedulePaint() OVERRIDE;
- virtual void OnWidgetSizeChanged(const gfx::Size& size) OVERRIDE;
+
+ protected:
+ virtual void OnWidgetSizeChanged() OVERRIDE;
private:
enum Direction {
@@ -127,8 +125,6 @@ class CompositorWin : public Compositor {
void InitVertexLayout();
- void Resize(const gfx::Size& size);
-
// Updates the kernel used for blurring. Size is the size of the texture
// being drawn to along the appropriate axis.
void UpdateBlurKernel(Direction direction, int size);
@@ -151,9 +147,6 @@ class CompositorWin : public Compositor {
gfx::AcceleratedWidget host_;
- // Size the device was last created at.
- gfx::Size last_size_;
-
ScopedComPtr<ID3D10Device> device_;
ScopedComPtr<IDXGISwapChain> swap_chain_;
ScopedComPtr<ID3D10RenderTargetView> dest_render_target_view_;
@@ -305,7 +298,7 @@ void ViewTexture::ConvertBitmapToD3DData(
void ViewTexture::CreateVertexBuffer(const gfx::Size& size) {
vertex_buffer_.Release();
- const gfx::Size& host_size = compositor_->GetHostSize();
+ const gfx::Size& host_size = compositor_->size();
float x = static_cast<float>(host_size.width()) / 2.0f;
float y = static_cast<float>(host_size.height()) / 2.0f;
float w = static_cast<float>(size.width());
@@ -332,15 +325,15 @@ void ViewTexture::CreateVertexBuffer(const gfx::Size& size) {
CompositorWin::CompositorWin(gfx::AcceleratedWidget widget,
const gfx::Size& size)
- : host_(widget),
- technique_(NULL),
- last_size_(size) {
+ : Compositor(size),
+ host_(widget),
+ technique_(NULL) {
}
void CompositorWin::Init() {
CreateDevice();
LoadEffects();
- Resize(last_size_);
+ OnWidgetSizeChanged();
InitVertexLayout();
CreateVertexBuffer();
CreateIndexBuffer();
@@ -362,8 +355,8 @@ void CompositorWin::UpdatePerspective(const ui::Transform& transform,
D3DXMATRIX scale_matrix;
D3DXMatrixScaling(
&scale_matrix,
- 2.0f / static_cast<float>(last_size_.width()),
- 2.0f / static_cast<float>(last_size_.height()),
+ 2.0f / static_cast<float>(size().width()),
+ 2.0f / static_cast<float>(size().height()),
1.0f);
// Translate so x and y are from -1,-1 to 1,1.
@@ -387,10 +380,6 @@ void CompositorWin::UpdatePerspective(const ui::Transform& transform,
fx_->GetVariableByName("gWVP")->AsMatrix()->SetMatrix(wvp);
}
-const gfx::Size& CompositorWin::GetHostSize() {
- return last_size_;
-}
-
ID3D10Buffer* CompositorWin::GetTextureIndexBuffer() {
return index_buffer_.get();
}
@@ -469,7 +458,7 @@ void CompositorWin::Blur(const gfx::Rect& bounds) {
D3DXMatrixIdentity(&identity_matrix);
// Horizontal blur from the main texture to blur texture.
- UpdateBlurKernel(HORIZONTAL, last_size_.width());
+ UpdateBlurKernel(HORIZONTAL, size().width());
ID3D10RenderTargetView* target_view = blur_render_target_view_.get();
device_->OMSetRenderTargets(1, &target_view, NULL);
RETURN_IF_FAILED(
@@ -495,7 +484,7 @@ void CompositorWin::Blur(const gfx::Rect& bounds) {
RETURN_IF_FAILED(
blur_fx_->GetVariableByName("textureMap")->AsShaderResource()->
SetResource(blur_texture_shader_view_.get()));
- UpdateBlurKernel(VERTICAL, last_size_.height());
+ UpdateBlurKernel(VERTICAL, size().height());
target_view = main_render_target_view_.get();
device_->OMSetRenderTargets(1, &target_view, NULL);
for(UINT p = 0; p < tech_desc.Passes; ++p)
@@ -518,8 +507,69 @@ void CompositorWin::SchedulePaint() {
InvalidateRect(host_, &bounds, FALSE);
}
-void CompositorWin::OnWidgetSizeChanged(const gfx::Size& size) {
- Resize(size);
+void CompositorWin::OnWidgetSizeChanged() {
+ dest_render_target_view_ = NULL;
+ depth_stencil_buffer_ = NULL;
+ depth_stencil_view_ = NULL;
+
+ main_render_target_view_ = NULL;
+ main_texture_ = NULL;
+ main_texture_shader_view_ = NULL;
+
+ blur_render_target_view_ = NULL;
+ blur_texture_ = NULL;
+ blur_texture_shader_view_ = NULL;
+
+ CreateTexture(size(), main_texture_.Receive(),
+ main_render_target_view_.Receive(),
+ main_texture_shader_view_.Receive());
+
+ CreateTexture(size(), blur_texture_.Receive(),
+ blur_render_target_view_.Receive(),
+ blur_texture_shader_view_.Receive());
+
+ // Resize the swap chain and recreate the render target view.
+ RETURN_IF_FAILED(swap_chain_->ResizeBuffers(
+ 1, size().width(), size().height(), DXGI_FORMAT_R8G8B8A8_UNORM, 0));
+ ScopedComPtr<ID3D10Texture2D> back_buffer;
+ RETURN_IF_FAILED(swap_chain_->GetBuffer(
+ 0, __uuidof(ID3D10Texture2D),
+ reinterpret_cast<void**>(back_buffer.Receive())));
+ RETURN_IF_FAILED(device_->CreateRenderTargetView(
+ back_buffer.get(), 0,
+ dest_render_target_view_.Receive()));
+
+ // Create the depth/stencil buffer and view.
+ D3D10_TEXTURE2D_DESC depth_stencil_desc;
+ depth_stencil_desc.Width = size().width();
+ depth_stencil_desc.Height = size().height();
+ depth_stencil_desc.MipLevels = 1;
+ depth_stencil_desc.ArraySize = 1;
+ depth_stencil_desc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
+ depth_stencil_desc.SampleDesc.Count = 1; // multisampling must match
+ depth_stencil_desc.SampleDesc.Quality = 0; // swap chain values.
+ depth_stencil_desc.Usage = D3D10_USAGE_DEFAULT;
+ depth_stencil_desc.BindFlags = D3D10_BIND_DEPTH_STENCIL;
+ depth_stencil_desc.CPUAccessFlags = 0;
+ depth_stencil_desc.MiscFlags = 0;
+
+ RETURN_IF_FAILED(device_->CreateTexture2D(&depth_stencil_desc, 0,
+ depth_stencil_buffer_.Receive()));
+ RETURN_IF_FAILED(device_->CreateDepthStencilView(
+ depth_stencil_buffer_.get(), 0,
+ depth_stencil_view_.Receive()));
+
+
+ // Set the viewport transform.
+ D3D10_VIEWPORT vp;
+ vp.TopLeftX = 0;
+ vp.TopLeftY = 0;
+ vp.Width = size().width();
+ vp.Height = size().height();
+ vp.MinDepth = 0.0f;
+ vp.MaxDepth = 1.0f;
+
+ device_->RSSetViewports(1, &vp);
}
CompositorWin::~CompositorWin() {
@@ -532,8 +582,8 @@ void CompositorWin::Errored(HRESULT error_code) {
void CompositorWin::CreateDevice() {
DXGI_SWAP_CHAIN_DESC sd;
- sd.BufferDesc.Width = last_size_.width();
- sd.BufferDesc.Height = last_size_.height();
+ sd.BufferDesc.Width = size().width();
+ sd.BufferDesc.Height = size().height();
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
@@ -616,73 +666,6 @@ void CompositorWin::InitVertexLayout() {
vertex_layout_.Receive()));
}
-void CompositorWin::Resize(const gfx::Size& size) {
- last_size_ = size;
-
- dest_render_target_view_ = NULL;
- depth_stencil_buffer_ = NULL;
- depth_stencil_view_ = NULL;
-
- main_render_target_view_ = NULL;
- main_texture_ = NULL;
- main_texture_shader_view_ = NULL;
-
- blur_render_target_view_ = NULL;
- blur_texture_ = NULL;
- blur_texture_shader_view_ = NULL;
-
- CreateTexture(size, main_texture_.Receive(),
- main_render_target_view_.Receive(),
- main_texture_shader_view_.Receive());
-
- CreateTexture(size, blur_texture_.Receive(),
- blur_render_target_view_.Receive(),
- blur_texture_shader_view_.Receive());
-
- // Resize the swap chain and recreate the render target view.
- RETURN_IF_FAILED(swap_chain_->ResizeBuffers(
- 1, size.width(), size.height(), DXGI_FORMAT_R8G8B8A8_UNORM, 0));
- ScopedComPtr<ID3D10Texture2D> back_buffer;
- RETURN_IF_FAILED(swap_chain_->GetBuffer(
- 0, __uuidof(ID3D10Texture2D),
- reinterpret_cast<void**>(back_buffer.Receive())));
- RETURN_IF_FAILED(device_->CreateRenderTargetView(
- back_buffer.get(), 0,
- dest_render_target_view_.Receive()));
-
- // Create the depth/stencil buffer and view.
- D3D10_TEXTURE2D_DESC depth_stencil_desc;
- depth_stencil_desc.Width = size.width();
- depth_stencil_desc.Height = size.height();
- depth_stencil_desc.MipLevels = 1;
- depth_stencil_desc.ArraySize = 1;
- depth_stencil_desc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
- depth_stencil_desc.SampleDesc.Count = 1; // multisampling must match
- depth_stencil_desc.SampleDesc.Quality = 0; // swap chain values.
- depth_stencil_desc.Usage = D3D10_USAGE_DEFAULT;
- depth_stencil_desc.BindFlags = D3D10_BIND_DEPTH_STENCIL;
- depth_stencil_desc.CPUAccessFlags = 0;
- depth_stencil_desc.MiscFlags = 0;
-
- RETURN_IF_FAILED(device_->CreateTexture2D(&depth_stencil_desc, 0,
- depth_stencil_buffer_.Receive()));
- RETURN_IF_FAILED(device_->CreateDepthStencilView(
- depth_stencil_buffer_.get(), 0,
- depth_stencil_view_.Receive()));
-
-
- // Set the viewport transform.
- D3D10_VIEWPORT vp;
- vp.TopLeftX = 0;
- vp.TopLeftY = 0;
- vp.Width = size.width();
- vp.Height = size.height();
- vp.MinDepth = 0.0f;
- vp.MaxDepth = 1.0f;
-
- device_->RSSetViewports(1, &vp);
-}
-
void CompositorWin::UpdateBlurKernel(Direction direction, int size) {
// Update the blur data.
const int kSize = 13;
@@ -773,14 +756,14 @@ void CompositorWin::CreateIndexBuffer() {
ID3D10Buffer* CompositorWin::CreateVertexBufferForRegion(
const gfx::Rect& bounds) {
float x = static_cast<float>(bounds.x()) /
- static_cast<float>(last_size_.width()) * 2.0f - 1.0f;
+ static_cast<float>(size().width()) * 2.0f - 1.0f;
float max_x =
- x + bounds.width() / static_cast<float>(last_size_.width()) * 2.0f;
+ x + bounds.width() / static_cast<float>(size().width()) * 2.0f;
float y =
- static_cast<float>(last_size_.height() - bounds.y() - bounds.height()) /
- static_cast<float>(last_size_.height()) * 2.0f - 1.0f;
+ static_cast<float>(size().height() - bounds.y() - bounds.height()) /
+ static_cast<float>(size().height()) * 2.0f - 1.0f;
float max_y =
- y + bounds.height() / static_cast<float>(last_size_.height()) * 2.0f;
+ y + bounds.height() / static_cast<float>(size().height()) * 2.0f;
float tex_x = x / 2.0f + .5f;
float max_tex_x = max_x / 2.0f + .5f;
float tex_y = 1.0f - (max_y + 1.0f) / 2.0f;
« no previous file with comments | « ui/gfx/compositor/compositor_gl.cc ('k') | ui/gfx/compositor/layer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698