| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/gl/gl_image_memory.h" | 5 #include "ui/gl/gl_image_memory.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/numerics/safe_conversions.h" | 10 #include "base/numerics/safe_conversions.h" |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 dst[2] = src[0]; | 298 dst[2] = src[0]; |
| 299 }, | 299 }, |
| 300 data_format, data_type, data_row_length); | 300 data_format, data_type, data_row_length); |
| 301 case gfx::BufferFormat::RGBA_4444: | 301 case gfx::BufferFormat::RGBA_4444: |
| 302 case gfx::BufferFormat::RGBA_8888: | 302 case gfx::BufferFormat::RGBA_8888: |
| 303 case gfx::BufferFormat::BGRA_8888: | 303 case gfx::BufferFormat::BGRA_8888: |
| 304 case gfx::BufferFormat::R_8: { | 304 case gfx::BufferFormat::R_8: { |
| 305 size_t gles2_data_stride = | 305 size_t gles2_data_stride = |
| 306 RowSizeForBufferFormat(size.width(), format, 0); | 306 RowSizeForBufferFormat(size.width(), format, 0); |
| 307 if (stride == gles2_data_stride || | 307 if (stride == gles2_data_stride || |
| 308 gl::g_driver_gl.ext.b_GL_EXT_unpack_subimage) | 308 g_driver_gl.ext.b_GL_EXT_unpack_subimage) |
| 309 return nullptr; // No data conversion needed | 309 return nullptr; // No data conversion needed |
| 310 | 310 |
| 311 std::unique_ptr<uint8_t[]> gles2_data( | 311 std::unique_ptr<uint8_t[]> gles2_data( |
| 312 new uint8_t[gles2_data_stride * size.height()]); | 312 new uint8_t[gles2_data_stride * size.height()]); |
| 313 for (int y = 0; y < size.height(); ++y) { | 313 for (int y = 0; y < size.height(); ++y) { |
| 314 memcpy(&gles2_data[y * gles2_data_stride], &data[y * stride], | 314 memcpy(&gles2_data[y * gles2_data_stride], &data[y * stride], |
| 315 gles2_data_stride); | 315 gles2_data_stride); |
| 316 } | 316 } |
| 317 *data_row_length = size.width(); | 317 *data_row_length = size.width(); |
| 318 return gles2_data; | 318 return gles2_data; |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 glCompressedTexImage2D( | 403 glCompressedTexImage2D( |
| 404 target, 0, TextureFormat(format_), size_.width(), size_.height(), 0, | 404 target, 0, TextureFormat(format_), size_.width(), size_.height(), 0, |
| 405 static_cast<GLsizei>(BufferSizeForBufferFormat(size_, format_)), | 405 static_cast<GLsizei>(BufferSizeForBufferFormat(size_, format_)), |
| 406 memory_); | 406 memory_); |
| 407 } else { | 407 } else { |
| 408 GLenum data_format = DataFormat(format_); | 408 GLenum data_format = DataFormat(format_); |
| 409 GLenum data_type = DataType(format_); | 409 GLenum data_type = DataType(format_); |
| 410 GLint data_row_length = DataRowLength(stride_, format_); | 410 GLint data_row_length = DataRowLength(stride_, format_); |
| 411 std::unique_ptr<uint8_t[]> gles2_data; | 411 std::unique_ptr<uint8_t[]> gles2_data; |
| 412 | 412 |
| 413 if (gl::GLContext::GetCurrent()->GetVersionInfo()->is_es) { | 413 if (GLContext::GetCurrent()->GetVersionInfo()->is_es) { |
| 414 gles2_data = GLES2Data(size_, format_, stride_, memory_, &data_format, | 414 gles2_data = GLES2Data(size_, format_, stride_, memory_, &data_format, |
| 415 &data_type, &data_row_length); | 415 &data_type, &data_row_length); |
| 416 } | 416 } |
| 417 | 417 |
| 418 if (data_row_length != size_.width()) | 418 if (data_row_length != size_.width()) |
| 419 glPixelStorei(GL_UNPACK_ROW_LENGTH, data_row_length); | 419 glPixelStorei(GL_UNPACK_ROW_LENGTH, data_row_length); |
| 420 | 420 |
| 421 glTexImage2D(target, 0, TextureFormat(format_), size_.width(), | 421 glTexImage2D(target, 0, TextureFormat(format_), size_.width(), |
| 422 size_.height(), 0, data_format, data_type, | 422 size_.height(), 0, data_format, data_type, |
| 423 gles2_data ? gles2_data.get() : memory_); | 423 gles2_data ? gles2_data.get() : memory_); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 453 target, 0, offset.x(), offset.y(), rect.width(), rect.height(), | 453 target, 0, offset.x(), offset.y(), rect.width(), rect.height(), |
| 454 DataFormat(format_), | 454 DataFormat(format_), |
| 455 static_cast<GLsizei>(BufferSizeForBufferFormat(rect.size(), format_)), | 455 static_cast<GLsizei>(BufferSizeForBufferFormat(rect.size(), format_)), |
| 456 data); | 456 data); |
| 457 } else { | 457 } else { |
| 458 GLenum data_format = DataFormat(format_); | 458 GLenum data_format = DataFormat(format_); |
| 459 GLenum data_type = DataType(format_); | 459 GLenum data_type = DataType(format_); |
| 460 GLint data_row_length = DataRowLength(stride_, format_); | 460 GLint data_row_length = DataRowLength(stride_, format_); |
| 461 std::unique_ptr<uint8_t[]> gles2_data; | 461 std::unique_ptr<uint8_t[]> gles2_data; |
| 462 | 462 |
| 463 if (gl::GLContext::GetCurrent()->GetVersionInfo()->is_es) { | 463 if (GLContext::GetCurrent()->GetVersionInfo()->is_es) { |
| 464 gles2_data = GLES2Data(rect.size(), format_, stride_, data, &data_format, | 464 gles2_data = GLES2Data(rect.size(), format_, stride_, data, &data_format, |
| 465 &data_type, &data_row_length); | 465 &data_type, &data_row_length); |
| 466 } | 466 } |
| 467 | 467 |
| 468 if (data_row_length != rect.width()) | 468 if (data_row_length != rect.width()) |
| 469 glPixelStorei(GL_UNPACK_ROW_LENGTH, data_row_length); | 469 glPixelStorei(GL_UNPACK_ROW_LENGTH, data_row_length); |
| 470 | 470 |
| 471 glTexSubImage2D(target, 0, offset.x(), offset.y(), rect.width(), | 471 glTexSubImage2D(target, 0, offset.x(), offset.y(), rect.width(), |
| 472 rect.height(), data_format, data_type, | 472 rect.height(), data_format, data_type, |
| 473 gles2_data ? gles2_data.get() : data); | 473 gles2_data ? gles2_data.get() : data); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 487 return false; | 487 return false; |
| 488 } | 488 } |
| 489 | 489 |
| 490 // static | 490 // static |
| 491 unsigned GLImageMemory::GetInternalFormatForTesting(gfx::BufferFormat format) { | 491 unsigned GLImageMemory::GetInternalFormatForTesting(gfx::BufferFormat format) { |
| 492 DCHECK(ValidFormat(format)); | 492 DCHECK(ValidFormat(format)); |
| 493 return TextureFormat(format); | 493 return TextureFormat(format); |
| 494 } | 494 } |
| 495 | 495 |
| 496 } // namespace gl | 496 } // namespace gl |
| OLD | NEW |