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

Side by Side Diff: core/cross/render_surface_test.cc

Issue 176026: C++ Readability (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 11 years, 3 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 | « core/cross/command_buffer/render_surface_cb.cc ('k') | no next file » | 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 18 matching lines...) Expand all
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */ 30 */
31 31
32 32
33 #include "core/cross/precompile.h" 33 #include "core/cross/precompile.h"
34 #include "tests/common/win/testing_common.h" 34 #include "tests/common/win/testing_common.h"
35 #include "core/cross/client.h" 35 #include "core/cross/client.h"
36 #include "core/cross/pack.h" 36 #include "core/cross/pack.h"
37 #include "core/cross/renderer.h" 37 #include "core/cross/renderer.h"
38 #include "core/cross/bitmap.h" 38 #include "core/cross/bitmap.h"
39 #include "core/cross/features.h"
39 #include "core/cross/texture.h" 40 #include "core/cross/texture.h"
40 #include "core/cross/render_surface.h" 41 #include "core/cross/render_surface.h"
41 #include "core/cross/render_surface_set.h" 42 #include "core/cross/render_surface_set.h"
42 #include "core/cross/renderer_platform.h" 43 #include "core/cross/renderer_platform.h"
43 #include "core/cross/error_status.h" 44 #include "core/cross/error_status.h"
44 45
45 // Defined in testing_common.cc, for each platform. 46 // Defined in testing_common.cc, for each platform.
46 extern o3d::DisplayWindow* g_display_window; 47 extern o3d::DisplayWindow *g_display_window;
47 48
48 namespace o3d { 49 namespace o3d {
49 50
51 // A mock render which pushes commands to the renderer so that
52 // actual rendering calls that maintain state can be handled by a
53 // variable rather than actually rendering.
54 class MockRenderer {
55 public:
56 // Creates a forwarding render class that pushes functionality to be tested
57 // to the desired renderer and handles other functionality on its own.
58 explicit MockRenderer(Renderer *renderer) : renderer_(renderer) {}
59
60 virtual ~MockRenderer() {}
61
62 // Rather than actually rendering, this just sets the state in the renderer.
63 void StartRendering() {
64 renderer_->set_rendering(true);
65 }
66
67 // This resets the state in the renderer.
68 void FinishRendering() {
69 renderer_->set_rendering(false);
70 }
71
72 // Pushes SetRenderSurfaces to the renderer.
73 void SetRenderSurfaces(const RenderSurface *surface,
74 const RenderDepthStencilSurface *depth_surface,
75 bool is_back_buffer) {
76 renderer_->SetRenderSurfaces(surface, depth_surface, is_back_buffer);
77 }
78
79 // Pushes GetRenderSurfaces to the renderer.
80 void GetRenderSurfaces(const RenderSurface **surface,
81 const RenderDepthStencilSurface **depth_surface,
82 bool *is_back_buffer) {
83 renderer_->GetRenderSurfaces(surface, depth_surface, is_back_buffer);
84 }
85 private:
86 Renderer *renderer_;
87 };
88
89 // Class for testing render surfaces and associated functionality.
50 class RenderSurfaceTest : public testing::Test { 90 class RenderSurfaceTest : public testing::Test {
51 public: 91 public:
52 RenderSurfaceTest() 92 RenderSurfaceTest()
53 : object_manager_(g_service_locator), 93 : object_manager_(g_service_locator),
54 error_status_(g_service_locator) { 94 error_status_(g_service_locator) {}
55 }
56
57 Renderer* renderer() {
58 return g_renderer;
59 }
60 95
61 protected: 96 protected:
62 virtual void SetUp() { 97 virtual void SetUp() {
98 service_locator_ = new ServiceLocator;
99 features_ = new Features(service_locator_);
63 pack_ = object_manager_->CreatePack(); 100 pack_ = object_manager_->CreatePack();
64 g_renderer->StartRendering(); 101 renderer_ = new MockRenderer(g_renderer);
102 renderer_->StartRendering();
65 } 103 }
66 104
67 virtual void TearDown() { 105 virtual void TearDown() {
68 g_renderer->FinishRendering(); 106 renderer_->FinishRendering();
69 pack_->Destroy(); 107 pack_->Destroy();
70 error_status_.ClearLastError(); 108 error_status_.ClearLastError();
109 delete features_;
110 delete service_locator_;
111 delete renderer_;
71 } 112 }
72 113
73 Pack* pack() { return pack_; } 114 ServiceLocator* service_locator() const {
115 return service_locator_;
116 }
117
118 MockRenderer* renderer() const {
119 return renderer_;
120 }
121
122 Pack* pack() const {
123 return pack_;
124 }
74 125
75 ServiceDependency<ObjectManager> object_manager_; 126 ServiceDependency<ObjectManager> object_manager_;
76 ErrorStatus error_status_; 127 ErrorStatus error_status_;
77 Pack* pack_; 128 ServiceLocator *service_locator_;
129 Features *features_;
130 Pack *pack_;
131 MockRenderer *renderer_;
78 }; 132 };
79 133
80 // Test that non PoT textures can't make render surfaces 134 // Tests that non PoT textures can't make render surfaces.
81 TEST_F(RenderSurfaceTest, NonPowerOfTwoRenderSurfaceEnabled) { 135 TEST_F(RenderSurfaceTest, NonPowerOfTwoRenderSurfaceEnabled) {
82 Texture2D* texture = pack()->CreateTexture2D(20, 32, Texture::ARGB8, 2, true); 136 Texture2D *texture = pack()->CreateTexture2D(20, 32, Texture::ARGB8, 2, true);
83 ASSERT_TRUE(NULL == texture); 137 ASSERT_TRUE(NULL == texture);
84 } 138 }
85 // Test that a render surface can be created 139
140 // Tests that a render surface can be created from a texture 2d.
86 TEST_F(RenderSurfaceTest, CreateRenderSurfaceFromTexture2D) { 141 TEST_F(RenderSurfaceTest, CreateRenderSurfaceFromTexture2D) {
87 Texture2D* texture = pack()->CreateTexture2D(16, 32, Texture::ARGB8, 2, true); 142 Texture2D *texture = pack()->CreateTexture2D(16, 32, Texture::ARGB8, 2, true);
88 ASSERT_TRUE(NULL != texture); 143 ASSERT_TRUE(NULL != texture);
89 144
90 RenderSurface::Ref render_surface = texture->GetRenderSurface(0); 145 RenderSurface::Ref render_surface = texture->GetRenderSurface(0);
91 ASSERT_TRUE(NULL != render_surface); 146 ASSERT_TRUE(NULL != render_surface);
92 ASSERT_TRUE(NULL != render_surface->texture()); 147 ASSERT_TRUE(NULL != render_surface->texture());
93 ASSERT_EQ(render_surface->width(), 16); 148 ASSERT_EQ(render_surface->width(), 16);
94 ASSERT_EQ(render_surface->height(), 32); 149 ASSERT_EQ(render_surface->height(), 32);
95 } 150 }
96 151
152 // Tests that a render surface can be created from a cube texture.
97 TEST_F(RenderSurfaceTest, CreateRenderSurfaceFromTextureCUBE) { 153 TEST_F(RenderSurfaceTest, CreateRenderSurfaceFromTextureCUBE) {
98 TextureCUBE* texture = pack()->CreateTextureCUBE(16, Texture::ARGB8, 2, true); 154 TextureCUBE *texture = pack()->CreateTextureCUBE(16, Texture::ARGB8, 2, true);
99 ASSERT_TRUE(NULL != texture); 155 ASSERT_TRUE(NULL != texture);
100 156
101 RenderSurface::Ref render_surface = texture->GetRenderSurface( 157 RenderSurface::Ref render_surface = texture->GetRenderSurface(
102 TextureCUBE::FACE_POSITIVE_X, 0); 158 TextureCUBE::FACE_POSITIVE_X, 0);
103 ASSERT_TRUE(NULL != render_surface); 159 ASSERT_TRUE(NULL != render_surface);
104 ASSERT_TRUE(NULL != render_surface->texture()); 160 ASSERT_TRUE(NULL != render_surface->texture());
105 ASSERT_EQ(render_surface->width(), 16); 161 ASSERT_EQ(render_surface->width(), 16);
106 ASSERT_EQ(render_surface->height(), 16); 162 ASSERT_EQ(render_surface->height(), 16);
107 } 163 }
108 164
165 // Tests the renderer's functionality to swap render surfaces and that
166 // the correct render surfaces are set.
109 TEST_F(RenderSurfaceTest, SwapRenderSurfaces) { 167 TEST_F(RenderSurfaceTest, SwapRenderSurfaces) {
110 Texture2D* texture = pack()->CreateTexture2D(16, 32, Texture::ARGB8, 2, true); 168 Texture2D *texture = pack()->CreateTexture2D(16, 32, Texture::ARGB8, 2, true);
111 ASSERT_TRUE(NULL != texture); 169 ASSERT_TRUE(NULL != texture);
112 170
113 RenderSurface::Ref render_surface = texture->GetRenderSurface(0); 171 RenderSurface::Ref render_surface = texture->GetRenderSurface(0);
114 ASSERT_TRUE(NULL != render_surface); 172 ASSERT_TRUE(NULL != render_surface);
115 ASSERT_TRUE(texture == render_surface->texture()); 173 ASSERT_TRUE(texture == render_surface->texture());
116 174
117 RenderDepthStencilSurface* depth_surface = 175 RenderDepthStencilSurface *depth_surface =
118 pack()->CreateDepthStencilSurface(16, 32); 176 pack()->CreateDepthStencilSurface(16, 32);
119 177
120 // Now swap surfaces. 178 // Now swap surfaces.
121 renderer()->SetRenderSurfaces(render_surface, depth_surface, false); 179 renderer()->SetRenderSurfaces(render_surface, depth_surface, false);
122 const RenderSurface* test_render_surface = NULL; 180 const RenderSurface *test_render_surface = NULL;
123 const RenderDepthStencilSurface* test_depth_surface = NULL; 181 const RenderDepthStencilSurface *test_depth_surface = NULL;
124 bool test_is_back_buffer; 182 bool test_is_back_buffer;
125 renderer()->GetRenderSurfaces(&test_render_surface, &test_depth_surface, 183 renderer()->GetRenderSurfaces(&test_render_surface, &test_depth_surface,
126 &test_is_back_buffer); 184 &test_is_back_buffer);
127 ASSERT_TRUE(test_render_surface == render_surface); 185 ASSERT_TRUE(test_render_surface == render_surface);
128 ASSERT_TRUE(test_depth_surface == depth_surface); 186 ASSERT_TRUE(test_depth_surface == depth_surface);
129 ASSERT_FALSE(test_is_back_buffer); 187 ASSERT_FALSE(test_is_back_buffer);
130 } 188 }
131 189
132 TEST_F(RenderSurfaceTest, RenderSurfaceSetTest) { 190 // Tests the renderer's functionality to swap render surfaces and return
133 Texture2D* texture = pack()->CreateTexture2D(16, 32, Texture::ARGB8, 2, true); 191 // the old one to the main rendering surface.
192 TEST_F(RenderSurfaceTest, SetBackSurfaces) {
193 Texture2D *texture = pack()->CreateTexture2D(16, 32, Texture::ARGB8, 2, true);
134 ASSERT_TRUE(NULL != texture); 194 ASSERT_TRUE(NULL != texture);
135 195
136 RenderSurface::Ref render_surface = texture->GetRenderSurface(0); 196 RenderSurface::Ref render_surface = texture->GetRenderSurface(0);
137 ASSERT_TRUE(NULL != render_surface); 197 ASSERT_TRUE(NULL != render_surface);
138 ASSERT_TRUE(texture == render_surface->texture()); 198 ASSERT_TRUE(texture == render_surface->texture());
139 199
140 RenderDepthStencilSurface* depth_surface = 200 RenderDepthStencilSurface *depth_surface =
141 pack()->CreateDepthStencilSurface(16, 32); 201 pack()->CreateDepthStencilSurface(16, 32);
202
203 // Save the original surfaces for comparison.
204 const RenderSurface *original_render_surface = NULL;
205 const RenderDepthStencilSurface *original_depth_surface = NULL;
206 bool original_is_back_buffer;
207 renderer()->GetRenderSurfaces(&original_render_surface,
208 &original_depth_surface,
209 &original_is_back_buffer);
210 // Now swap surfaces.
211 renderer()->SetRenderSurfaces(render_surface, depth_surface, false);
212 // Return the back buffers
213 renderer()->SetRenderSurfaces(NULL, NULL, true);
214 // Get the original surfaces again for comparison.
215 const RenderSurface *restored_render_surface = NULL;
216 const RenderDepthStencilSurface *restored_depth_surface = NULL;
217 bool restored_is_back_buffer;
218 renderer()->GetRenderSurfaces(&original_render_surface,
219 &original_depth_surface,
220 &restored_is_back_buffer);
221 ASSERT_TRUE(original_render_surface == restored_render_surface);
222 ASSERT_TRUE(original_depth_surface == restored_depth_surface);
223 ASSERT_TRUE(restored_is_back_buffer);
224 }
225
226 // Tests the render surfaces interaction as part of a render surface set
227 // which is how they are commonly used in practice.
228 TEST_F(RenderSurfaceTest, RenderSurfaceSetTest) {
229 Texture2D *texture = pack()->CreateTexture2D(16, 32, Texture::ARGB8, 2, true);
230 ASSERT_TRUE(NULL != texture);
231
232 RenderSurface::Ref render_surface = texture->GetRenderSurface(0);
233 ASSERT_TRUE(NULL != render_surface);
234 ASSERT_TRUE(texture == render_surface->texture());
235
236 RenderDepthStencilSurface *depth_surface =
237 pack()->CreateDepthStencilSurface(16, 32);
142 ASSERT_TRUE(depth_surface != NULL); 238 ASSERT_TRUE(depth_surface != NULL);
143 239
144 RenderSurfaceSet* render_surface_set = pack()->Create<RenderSurfaceSet>(); 240 RenderSurfaceSet *render_surface_set = pack()->Create<RenderSurfaceSet>();
145 ASSERT_TRUE(render_surface_set != NULL); 241 ASSERT_TRUE(render_surface_set != NULL);
146 render_surface_set->set_render_surface(render_surface); 242 render_surface_set->set_render_surface(render_surface);
147 render_surface_set->set_render_depth_stencil_surface(depth_surface); 243 render_surface_set->set_render_depth_stencil_surface(depth_surface);
148 ASSERT_TRUE(render_surface_set->ValidateBoundSurfaces()); 244 ASSERT_TRUE(render_surface_set->ValidateBoundSurfaces());
149 245
150 RenderContext render_context(g_renderer); 246 RenderContext render_context(g_renderer);
151 247
152 const RenderSurface* old_render_surface = NULL; 248 const RenderSurface *old_render_surface = NULL;
153 const RenderDepthStencilSurface* old_depth_surface = NULL; 249 const RenderDepthStencilSurface *old_depth_surface = NULL;
154 bool old_is_back_buffer = false; 250 bool old_is_back_buffer = false;
155 renderer()->GetRenderSurfaces(&old_render_surface, &old_depth_surface, 251 renderer()->GetRenderSurfaces(&old_render_surface, &old_depth_surface,
156 &old_is_back_buffer); 252 &old_is_back_buffer);
157 253
158 render_surface_set->Render(&render_context); 254 render_surface_set->Render(&render_context);
159 const RenderSurface* test_render_surface = NULL; 255 const RenderSurface *test_render_surface = NULL;
160 const RenderDepthStencilSurface* test_depth_surface = NULL; 256 const RenderDepthStencilSurface *test_depth_surface = NULL;
161 bool test_is_back_buffer = false; 257 bool test_is_back_buffer = false;
162 renderer()->GetRenderSurfaces(&test_render_surface, &test_depth_surface, 258 renderer()->GetRenderSurfaces(&test_render_surface, &test_depth_surface,
163 &test_is_back_buffer); 259 &test_is_back_buffer);
164 ASSERT_TRUE(test_render_surface == render_surface); 260 ASSERT_TRUE(test_render_surface == render_surface);
165 ASSERT_TRUE(test_depth_surface == depth_surface); 261 ASSERT_TRUE(test_depth_surface == depth_surface);
166 ASSERT_FALSE(test_is_back_buffer); 262 ASSERT_FALSE(test_is_back_buffer);
167 263
168 render_surface_set->PostRender(&render_context); 264 render_surface_set->PostRender(&render_context);
169 renderer()->GetRenderSurfaces(&test_render_surface, &test_depth_surface, 265 renderer()->GetRenderSurfaces(&test_render_surface, &test_depth_surface,
170 &test_is_back_buffer); 266 &test_is_back_buffer);
171 ASSERT_TRUE(test_render_surface == old_render_surface); 267 ASSERT_TRUE(test_render_surface == old_render_surface);
172 ASSERT_TRUE(test_depth_surface == old_depth_surface); 268 ASSERT_TRUE(test_depth_surface == old_depth_surface);
173 ASSERT_TRUE(test_is_back_buffer == old_is_back_buffer); 269 ASSERT_TRUE(test_is_back_buffer == old_is_back_buffer);
174 } 270 }
175 271
176 } // namespace o3d 272 } // namespace o3d
177 273
OLDNEW
« no previous file with comments | « core/cross/command_buffer/render_surface_cb.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698