| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "cc/test/layer_tree_pixel_test.h" | 5 #include "cc/test/layer_tree_pixel_test.h" |
| 6 | 6 |
| 7 #include <stddef.h> |
| 8 #include <stdint.h> |
| 9 |
| 7 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 8 #include "base/path_service.h" | 11 #include "base/path_service.h" |
| 9 #include "cc/base/switches.h" | 12 #include "cc/base/switches.h" |
| 10 #include "cc/layers/solid_color_layer.h" | 13 #include "cc/layers/solid_color_layer.h" |
| 11 #include "cc/layers/texture_layer.h" | 14 #include "cc/layers/texture_layer.h" |
| 12 #include "cc/output/copy_output_request.h" | 15 #include "cc/output/copy_output_request.h" |
| 13 #include "cc/output/copy_output_result.h" | 16 #include "cc/output/copy_output_result.h" |
| 14 #include "cc/output/direct_renderer.h" | 17 #include "cc/output/direct_renderer.h" |
| 15 #include "cc/resources/texture_mailbox.h" | 18 #include "cc/resources/texture_mailbox.h" |
| 16 #include "cc/test/paths.h" | 19 #include "cc/test/paths.h" |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 gl->BindTexture(GL_TEXTURE_2D, 0); | 228 gl->BindTexture(GL_TEXTURE_2D, 0); |
| 226 | 229 |
| 227 GLuint fbo = 0; | 230 GLuint fbo = 0; |
| 228 gl->GenFramebuffers(1, &fbo); | 231 gl->GenFramebuffers(1, &fbo); |
| 229 gl->BindFramebuffer(GL_FRAMEBUFFER, fbo); | 232 gl->BindFramebuffer(GL_FRAMEBUFFER, fbo); |
| 230 gl->FramebufferTexture2D( | 233 gl->FramebufferTexture2D( |
| 231 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_id, 0); | 234 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_id, 0); |
| 232 EXPECT_EQ(static_cast<unsigned>(GL_FRAMEBUFFER_COMPLETE), | 235 EXPECT_EQ(static_cast<unsigned>(GL_FRAMEBUFFER_COMPLETE), |
| 233 gl->CheckFramebufferStatus(GL_FRAMEBUFFER)); | 236 gl->CheckFramebufferStatus(GL_FRAMEBUFFER)); |
| 234 | 237 |
| 235 scoped_ptr<uint8[]> pixels(new uint8[size.GetArea() * 4]); | 238 scoped_ptr<uint8_t[]> pixels(new uint8_t[size.GetArea() * 4]); |
| 236 gl->ReadPixels(0, | 239 gl->ReadPixels(0, |
| 237 0, | 240 0, |
| 238 size.width(), | 241 size.width(), |
| 239 size.height(), | 242 size.height(), |
| 240 GL_RGBA, | 243 GL_RGBA, |
| 241 GL_UNSIGNED_BYTE, | 244 GL_UNSIGNED_BYTE, |
| 242 pixels.get()); | 245 pixels.get()); |
| 243 | 246 |
| 244 gl->DeleteFramebuffers(1, &fbo); | 247 gl->DeleteFramebuffers(1, &fbo); |
| 245 gl->DeleteTextures(1, &texture_id); | 248 gl->DeleteTextures(1, &texture_id); |
| 246 | 249 |
| 247 scoped_ptr<SkBitmap> bitmap(new SkBitmap); | 250 scoped_ptr<SkBitmap> bitmap(new SkBitmap); |
| 248 bitmap->allocN32Pixels(size.width(), size.height()); | 251 bitmap->allocN32Pixels(size.width(), size.height()); |
| 249 | 252 |
| 250 uint8* out_pixels = static_cast<uint8*>(bitmap->getPixels()); | 253 uint8_t* out_pixels = static_cast<uint8_t*>(bitmap->getPixels()); |
| 251 | 254 |
| 252 size_t row_bytes = size.width() * 4; | 255 size_t row_bytes = size.width() * 4; |
| 253 size_t total_bytes = size.height() * row_bytes; | 256 size_t total_bytes = size.height() * row_bytes; |
| 254 for (size_t dest_y = 0; dest_y < total_bytes; dest_y += row_bytes) { | 257 for (size_t dest_y = 0; dest_y < total_bytes; dest_y += row_bytes) { |
| 255 // Flip Y axis. | 258 // Flip Y axis. |
| 256 size_t src_y = total_bytes - dest_y - row_bytes; | 259 size_t src_y = total_bytes - dest_y - row_bytes; |
| 257 // Swizzle OpenGL -> Skia byte order. | 260 // Swizzle OpenGL -> Skia byte order. |
| 258 for (size_t x = 0; x < row_bytes; x += 4) { | 261 for (size_t x = 0; x < row_bytes; x += 4) { |
| 259 out_pixels[dest_y + x + SK_R32_SHIFT/8] = pixels.get()[src_y + x + 0]; | 262 out_pixels[dest_y + x + SK_R32_SHIFT/8] = pixels.get()[src_y + x + 0]; |
| 260 out_pixels[dest_y + x + SK_G32_SHIFT/8] = pixels.get()[src_y + x + 1]; | 263 out_pixels[dest_y + x + SK_G32_SHIFT/8] = pixels.get()[src_y + x + 1]; |
| 261 out_pixels[dest_y + x + SK_B32_SHIFT/8] = pixels.get()[src_y + x + 2]; | 264 out_pixels[dest_y + x + SK_B32_SHIFT/8] = pixels.get()[src_y + x + 2]; |
| 262 out_pixels[dest_y + x + SK_A32_SHIFT/8] = pixels.get()[src_y + x + 3]; | 265 out_pixels[dest_y + x + SK_A32_SHIFT/8] = pixels.get()[src_y + x + 3]; |
| 263 } | 266 } |
| 264 } | 267 } |
| 265 | 268 |
| 266 return bitmap; | 269 return bitmap; |
| 267 } | 270 } |
| 268 | 271 |
| 269 void LayerTreePixelTest::Finish() { | 272 void LayerTreePixelTest::Finish() { |
| 270 scoped_ptr<gpu::GLInProcessContext> context = CreateTestInProcessContext(); | 273 scoped_ptr<gpu::GLInProcessContext> context = CreateTestInProcessContext(); |
| 271 GLES2Interface* gl = context->GetImplementation(); | 274 GLES2Interface* gl = context->GetImplementation(); |
| 272 gl->Finish(); | 275 gl->Finish(); |
| 273 } | 276 } |
| 274 | 277 |
| 275 } // namespace cc | 278 } // namespace cc |
| OLD | NEW |