OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gfx/compositor/compositor.h" | 5 #include "ui/gfx/compositor/compositor.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <d3dx10.h> | 8 #include <d3dx10.h> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 CreateDevice(); | 332 CreateDevice(); |
333 LoadEffects(); | 333 LoadEffects(); |
334 Resize(last_size_); | 334 Resize(last_size_); |
335 InitVertexLayout(); | 335 InitVertexLayout(); |
336 CreateVertexBuffer(); | 336 CreateVertexBuffer(); |
337 CreateIndexBuffer(); | 337 CreateIndexBuffer(); |
338 } | 338 } |
339 | 339 |
340 void CompositorWin::UpdatePerspective(const ui::Transform& transform, | 340 void CompositorWin::UpdatePerspective(const ui::Transform& transform, |
341 const gfx::Size& view_size) { | 341 const gfx::Size& view_size) { |
342 // Apply transform from view. | 342 float transform_data_buffer[16]; |
343 const SkMatrix& sk_matrix(transform.matrix()); | 343 transform.matrix().asColMajorf(transform_data_buffer); |
344 // Use -1 * kMTransY for y-translation as origin for views is upper left. | 344 D3DXMATRIX transform_matrix(&transform_data_buffer[0]); |
345 D3DXMATRIX transform_matrix( | 345 std::swap(transform_matrix._12, transform_matrix._21); |
346 // row 1 | 346 std::swap(transform_matrix._13, transform_matrix._31); |
347 sk_matrix[SkMatrix::kMScaleX], sk_matrix[SkMatrix::kMSkewX], 0.0f, | 347 std::swap(transform_matrix._23, transform_matrix._32); |
348 sk_matrix[SkMatrix::kMPersp0], | 348 |
349 // row 2 | 349 // Different coordinate system; flip the y. |
350 sk_matrix[SkMatrix::kMSkewY], sk_matrix[SkMatrix::kMScaleY], 0.0f, | 350 transform_matrix._42 *= -1; |
351 sk_matrix[SkMatrix::kMPersp1], | |
352 // row 3 | |
353 0.0f, 0.0f, 1.0f, sk_matrix[SkMatrix::kMPersp2], | |
354 // row 4. | |
355 sk_matrix[SkMatrix::kMTransX], -sk_matrix[SkMatrix::kMTransY], 0.0f, | |
356 1.0f); | |
357 | 351 |
358 // Scale so x and y are from 0-2. | 352 // Scale so x and y are from 0-2. |
359 D3DXMATRIX scale_matrix; | 353 D3DXMATRIX scale_matrix; |
360 D3DXMatrixScaling( | 354 D3DXMatrixScaling( |
361 &scale_matrix, | 355 &scale_matrix, |
362 2.0f / static_cast<float>(last_size_.width()), | 356 2.0f / static_cast<float>(last_size_.width()), |
363 2.0f / static_cast<float>(last_size_.height()), | 357 2.0f / static_cast<float>(last_size_.height()), |
364 1.0f); | 358 1.0f); |
365 | 359 |
366 // Translate so x and y are from -1,-1 to 1,1. | 360 // Translate so x and y are from -1,-1 to 1,1. |
367 D3DXMATRIX translate_matrix; | 361 D3DXMATRIX translate_matrix; |
368 D3DXMatrixTranslation(&translate_matrix, -1.0f, 1.0f, 0.0f); | 362 D3DXMatrixTranslation(&translate_matrix, -1.0f, 1.0f, 0.0f); |
369 | 363 |
370 D3DXMATRIX projection_matrix; | 364 D3DXMATRIX projection_matrix; |
371 D3DXMatrixIdentity(&projection_matrix); | 365 D3DXMatrixIdentity(&projection_matrix); |
372 D3DXMatrixPerspectiveFovLH(&projection_matrix, | 366 D3DXMatrixPerspectiveFovLH(&projection_matrix, |
373 atanf(.5f) * 2.0f, 1.0f, 1.0f, 1000.0f); | 367 atanf(.5f) * 2.0f, 1.0f, 1.0f, 1000.0f); |
374 D3DXVECTOR3 pos(0.0f, 0.0f, -2.0f); | 368 D3DXVECTOR3 pos(0.0f, 0.0f, -2.0f); |
375 D3DXVECTOR3 target(0.0f, 0.0f, 0.0f); | 369 D3DXVECTOR3 target(0.0f, 0.0f, 0.0f); |
376 D3DXVECTOR3 up(0.0f, 1.0f, 0.0f); | 370 D3DXVECTOR3 up(0.0f, 1.0f, 0.0f); |
377 D3DXMATRIX view; | 371 D3DXMATRIX view; |
378 D3DXMatrixIdentity(&view); | 372 D3DXMatrixIdentity(&view); |
379 D3DXMatrixLookAtLH(&view, &pos, &target, &up); | 373 D3DXMatrixLookAtLH(&view, &pos, &target, &up); |
380 | 374 |
381 D3DXMATRIX wvp = transform_matrix * scale_matrix * translate_matrix * view * | 375 D3DXMATRIX wvp = transform_matrix * scale_matrix * translate_matrix * view * |
382 projection_matrix; | 376 projection_matrix; |
| 377 |
383 fx_->GetVariableByName("gWVP")->AsMatrix()->SetMatrix(wvp); | 378 fx_->GetVariableByName("gWVP")->AsMatrix()->SetMatrix(wvp); |
384 } | 379 } |
385 | 380 |
386 const gfx::Size& CompositorWin::GetHostSize() { | 381 const gfx::Size& CompositorWin::GetHostSize() { |
387 return last_size_; | 382 return last_size_; |
388 } | 383 } |
389 | 384 |
390 ID3D10Buffer* CompositorWin::GetTextureIndexBuffer() { | 385 ID3D10Buffer* CompositorWin::GetTextureIndexBuffer() { |
391 return index_buffer_.get(); | 386 return index_buffer_.get(); |
392 } | 387 } |
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 | 807 |
813 // static | 808 // static |
814 Compositor* Compositor::Create(gfx::AcceleratedWidget widget, | 809 Compositor* Compositor::Create(gfx::AcceleratedWidget widget, |
815 const gfx::Size& size) { | 810 const gfx::Size& size) { |
816 CompositorWin* compositor = new CompositorWin(widget, size); | 811 CompositorWin* compositor = new CompositorWin(widget, size); |
817 compositor->Init(); | 812 compositor->Init(); |
818 return compositor; | 813 return compositor; |
819 } | 814 } |
820 | 815 |
821 } // namespace ui | 816 } // namespace ui |
OLD | NEW |