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

Side by Side Diff: core/win/d3d9/renderer_d3d9.cc

Issue 270100: Fix clearing render targets in D3D if there... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 11 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « DEPS_gyp ('k') | tests/selenium/javascript_unit_test_list.txt » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2009, Google Inc. 2 * Copyright 2009, Google Inc.
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 1010 matching lines...) Expand 10 before | Expand all | Expand 10 after
1021 d3d_device_ = NULL; 1021 d3d_device_ = NULL;
1022 d3d_ = NULL; 1022 d3d_ = NULL;
1023 } 1023 }
1024 1024
1025 void RendererD3D9::PlatformSpecificClear(const Float4 &color, 1025 void RendererD3D9::PlatformSpecificClear(const Float4 &color,
1026 bool color_flag, 1026 bool color_flag,
1027 float depth, 1027 float depth,
1028 bool depth_flag, 1028 bool depth_flag,
1029 int stencil, 1029 int stencil,
1030 bool stencil_flag) { 1030 bool stencil_flag) {
1031 // is this safe to call inside BeginScene/EndScene?
1032 CComPtr<IDirect3DSurface9> current_surface;
1033 if (!HR(d3d_device()->GetRenderTarget(0, &current_surface)))
1034 return;
1035
1036 CComPtr<IDirect3DSurface9> current_depth_surface;
1037 if (!HR(d3d_device()->GetDepthStencilSurface(&current_depth_surface)))
1038 return;
1039
1040 // Conditionally clear the properties of the back buffer based on the 1031 // Conditionally clear the properties of the back buffer based on the
1041 // argument flags, and the existence of currently bound buffers. 1032 // argument flags, and the existence of currently bound buffers.
1042 HR(d3d_device_->Clear( 1033 if (!HR(d3d_device_->Clear(
1043 0, 1034 0,
1044 NULL, 1035 NULL,
1045 ((color_flag && current_surface) ? D3DCLEAR_TARGET : 0) | 1036 (color_flag ? D3DCLEAR_TARGET : 0) |
1046 ((depth_flag && current_depth_surface) ? D3DCLEAR_ZBUFFER : 0) | 1037 (depth_flag ? D3DCLEAR_ZBUFFER : 0) |
1047 ((stencil_flag && current_depth_surface) ? D3DCLEAR_STENCIL : 0), 1038 (stencil_flag ? D3DCLEAR_STENCIL : 0),
1048 D3DCOLOR_COLORVALUE(color[0], 1039 D3DCOLOR_COLORVALUE(color[0],
1049 color[1], 1040 color[1],
1050 color[2], 1041 color[2],
1051 color[3]), 1042 color[3]),
1052 depth, 1043 depth,
1053 stencil)); 1044 stencil))) {
1045 DLOG(ERROR) << "Clear Failed.";
1046 }
1054 } 1047 }
1055 1048
1056 void RendererD3D9::SetViewportInPixels(int left, 1049 void RendererD3D9::SetViewportInPixels(int left,
1057 int top, 1050 int top,
1058 int width, 1051 int width,
1059 int height, 1052 int height,
1060 float min_z, 1053 float min_z,
1061 float max_z) { 1054 float max_z) {
1062 D3DVIEWPORT9 viewport; 1055 D3DVIEWPORT9 viewport;
1063 1056
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
1545 1538
1546 void RendererD3D9::SetRenderSurfacesPlatformSpecific( 1539 void RendererD3D9::SetRenderSurfacesPlatformSpecific(
1547 const RenderSurface* surface, 1540 const RenderSurface* surface,
1548 const RenderDepthStencilSurface* surface_depth) { 1541 const RenderDepthStencilSurface* surface_depth) {
1549 const RenderSurfaceD3D9 *d3d_render_surface = 1542 const RenderSurfaceD3D9 *d3d_render_surface =
1550 down_cast<const RenderSurfaceD3D9*>(surface); 1543 down_cast<const RenderSurfaceD3D9*>(surface);
1551 const RenderDepthStencilSurfaceD3D9 *d3d_render_depth_surface = 1544 const RenderDepthStencilSurfaceD3D9 *d3d_render_depth_surface =
1552 down_cast<const RenderDepthStencilSurfaceD3D9*>(surface_depth); 1545 down_cast<const RenderDepthStencilSurfaceD3D9*>(surface_depth);
1553 1546
1554 IDirect3DSurface9 *d3d_surface = 1547 IDirect3DSurface9 *d3d_surface =
1555 d3d_render_surface ? d3d_render_surface->GetSurfaceHandle() : NULL; 1548 d3d_render_surface ? d3d_render_surface->GetSurfaceHandle() :
1549 back_buffer_surface_;
1556 IDirect3DSurface9 *d3d_depth_surface = d3d_render_depth_surface ? 1550 IDirect3DSurface9 *d3d_depth_surface = d3d_render_depth_surface ?
1557 d3d_render_depth_surface->GetSurfaceHandle() : NULL; 1551 d3d_render_depth_surface->GetSurfaceHandle() : back_buffer_depth_surface_;
1558 1552
1559 // At least one of the surfaces must be non-null. 1553 // At least one of the surfaces must be non-null.
1560 DCHECK(d3d_surface || d3d_depth_surface); 1554 DCHECK(d3d_surface || d3d_depth_surface);
1561 1555
1562 HR(d3d_device()->SetRenderTarget(0, d3d_surface)); 1556 HR(d3d_device()->SetRenderTarget(0, d3d_surface));
1563 HR(d3d_device()->SetDepthStencilSurface(d3d_depth_surface)); 1557 HR(d3d_device()->SetDepthStencilSurface(d3d_depth_surface));
1564 } 1558 }
1565 1559
1566 void RendererD3D9::SetBackBufferPlatformSpecific() { 1560 void RendererD3D9::SetBackBufferPlatformSpecific() {
1567 HR(d3d_device()->SetRenderTarget(0, back_buffer_surface_)); 1561 HR(d3d_device()->SetRenderTarget(0, back_buffer_surface_));
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1655 static int swizzle_table[] = { 2, 1, 0, 3, }; 1649 static int swizzle_table[] = { 2, 1, 0, 3, };
1656 return swizzle_table; 1650 return swizzle_table;
1657 } 1651 }
1658 1652
1659 // This is a factory function for creating Renderer objects. Since 1653 // This is a factory function for creating Renderer objects. Since
1660 // we're implementing D3D9, we only ever return a D3D9 renderer. 1654 // we're implementing D3D9, we only ever return a D3D9 renderer.
1661 Renderer* Renderer::CreateDefaultRenderer(ServiceLocator* service_locator) { 1655 Renderer* Renderer::CreateDefaultRenderer(ServiceLocator* service_locator) {
1662 return RendererD3D9::CreateDefault(service_locator); 1656 return RendererD3D9::CreateDefault(service_locator);
1663 } 1657 }
1664 } // namespace o3d 1658 } // namespace o3d
OLDNEW
« no previous file with comments | « DEPS_gyp ('k') | tests/selenium/javascript_unit_test_list.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698