OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2010, Google Inc. All rights reserved. | 2 * Copyright (c) 2010, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 25 matching lines...) Expand all Loading... |
36 #include "platform/TraceEvent.h" | 36 #include "platform/TraceEvent.h" |
37 #include "platform/graphics/GraphicsLayer.h" | 37 #include "platform/graphics/GraphicsLayer.h" |
38 #include "platform/graphics/ImageBuffer.h" | 38 #include "platform/graphics/ImageBuffer.h" |
39 #include "platform/graphics/gpu/Extensions3DUtil.h" | 39 #include "platform/graphics/gpu/Extensions3DUtil.h" |
40 #include "public/platform/Platform.h" | 40 #include "public/platform/Platform.h" |
41 #include "public/platform/WebCompositorSupport.h" | 41 #include "public/platform/WebCompositorSupport.h" |
42 #include "public/platform/WebExternalBitmap.h" | 42 #include "public/platform/WebExternalBitmap.h" |
43 #include "public/platform/WebExternalTextureLayer.h" | 43 #include "public/platform/WebExternalTextureLayer.h" |
44 #include "public/platform/WebGraphicsContext3DProvider.h" | 44 #include "public/platform/WebGraphicsContext3DProvider.h" |
45 #include "wtf/CheckedNumeric.h" | 45 #include "wtf/CheckedNumeric.h" |
| 46 #include "wtf/PtrUtil.h" |
46 #include "wtf/typed_arrays/ArrayBufferContents.h" | 47 #include "wtf/typed_arrays/ArrayBufferContents.h" |
47 #include <algorithm> | 48 #include <algorithm> |
| 49 #include <memory> |
48 | 50 |
49 namespace blink { | 51 namespace blink { |
50 | 52 |
51 namespace { | 53 namespace { |
52 | 54 |
53 const float s_resourceAdjustedRatio = 0.5; | 55 const float s_resourceAdjustedRatio = 0.5; |
54 | 56 |
55 class ScopedTextureUnit0BindingRestorer { | 57 class ScopedTextureUnit0BindingRestorer { |
56 STACK_ALLOCATED(); | 58 STACK_ALLOCATED(); |
57 WTF_MAKE_NONCOPYABLE(ScopedTextureUnit0BindingRestorer); | 59 WTF_MAKE_NONCOPYABLE(ScopedTextureUnit0BindingRestorer); |
(...skipping 14 matching lines...) Expand all Loading... |
72 private: | 74 private: |
73 gpu::gles2::GLES2Interface* m_gl; | 75 gpu::gles2::GLES2Interface* m_gl; |
74 GLenum m_oldActiveTextureUnit; | 76 GLenum m_oldActiveTextureUnit; |
75 GLuint m_oldTextureUnitZeroId; | 77 GLuint m_oldTextureUnitZeroId; |
76 }; | 78 }; |
77 | 79 |
78 static bool shouldFailDrawingBufferCreationForTesting = false; | 80 static bool shouldFailDrawingBufferCreationForTesting = false; |
79 | 81 |
80 } // namespace | 82 } // namespace |
81 | 83 |
82 PassRefPtr<DrawingBuffer> DrawingBuffer::create(PassOwnPtr<WebGraphicsContext3DP
rovider> contextProvider, const IntSize& size, bool premultipliedAlpha, bool wan
tAlphaChannel, bool wantDepthBuffer, bool wantStencilBuffer, bool wantAntialiasi
ng, PreserveDrawingBuffer preserve) | 84 PassRefPtr<DrawingBuffer> DrawingBuffer::create(std::unique_ptr<WebGraphicsConte
xt3DProvider> contextProvider, const IntSize& size, bool premultipliedAlpha, boo
l wantAlphaChannel, bool wantDepthBuffer, bool wantStencilBuffer, bool wantAntia
liasing, PreserveDrawingBuffer preserve) |
83 { | 85 { |
84 ASSERT(contextProvider); | 86 ASSERT(contextProvider); |
85 | 87 |
86 if (shouldFailDrawingBufferCreationForTesting) { | 88 if (shouldFailDrawingBufferCreationForTesting) { |
87 shouldFailDrawingBufferCreationForTesting = false; | 89 shouldFailDrawingBufferCreationForTesting = false; |
88 return nullptr; | 90 return nullptr; |
89 } | 91 } |
90 | 92 |
91 OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(contextPr
ovider->contextGL()); | 93 std::unique_ptr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(
contextProvider->contextGL()); |
92 if (!extensionsUtil->isValid()) { | 94 if (!extensionsUtil->isValid()) { |
93 // This might be the first time we notice that the GL context is lost. | 95 // This might be the first time we notice that the GL context is lost. |
94 return nullptr; | 96 return nullptr; |
95 } | 97 } |
96 ASSERT(extensionsUtil->supportsExtension("GL_OES_packed_depth_stencil")); | 98 ASSERT(extensionsUtil->supportsExtension("GL_OES_packed_depth_stencil")); |
97 extensionsUtil->ensureExtensionEnabled("GL_OES_packed_depth_stencil"); | 99 extensionsUtil->ensureExtensionEnabled("GL_OES_packed_depth_stencil"); |
98 bool multisampleSupported = wantAntialiasing | 100 bool multisampleSupported = wantAntialiasing |
99 && (extensionsUtil->supportsExtension("GL_CHROMIUM_framebuffer_multisamp
le") | 101 && (extensionsUtil->supportsExtension("GL_CHROMIUM_framebuffer_multisamp
le") |
100 || extensionsUtil->supportsExtension("GL_EXT_multisampled_render_to_
texture")) | 102 || extensionsUtil->supportsExtension("GL_EXT_multisampled_render_to_
texture")) |
101 && extensionsUtil->supportsExtension("GL_OES_rgb8_rgba8"); | 103 && extensionsUtil->supportsExtension("GL_OES_rgb8_rgba8"); |
(...skipping 15 matching lines...) Expand all Loading... |
117 } | 119 } |
118 return drawingBuffer.release(); | 120 return drawingBuffer.release(); |
119 } | 121 } |
120 | 122 |
121 void DrawingBuffer::forceNextDrawingBufferCreationToFail() | 123 void DrawingBuffer::forceNextDrawingBufferCreationToFail() |
122 { | 124 { |
123 shouldFailDrawingBufferCreationForTesting = true; | 125 shouldFailDrawingBufferCreationForTesting = true; |
124 } | 126 } |
125 | 127 |
126 DrawingBuffer::DrawingBuffer( | 128 DrawingBuffer::DrawingBuffer( |
127 PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, | 129 std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, |
128 PassOwnPtr<Extensions3DUtil> extensionsUtil, | 130 std::unique_ptr<Extensions3DUtil> extensionsUtil, |
129 bool discardFramebufferSupported, | 131 bool discardFramebufferSupported, |
130 bool wantAlphaChannel, | 132 bool wantAlphaChannel, |
131 bool premultipliedAlpha, | 133 bool premultipliedAlpha, |
132 PreserveDrawingBuffer preserve, | 134 PreserveDrawingBuffer preserve, |
133 bool wantDepth, | 135 bool wantDepth, |
134 bool wantStencil) | 136 bool wantStencil) |
135 : m_preserveDrawingBuffer(preserve) | 137 : m_preserveDrawingBuffer(preserve) |
136 , m_contextProvider(std::move(contextProvider)) | 138 , m_contextProvider(std::move(contextProvider)) |
137 , m_gl(m_contextProvider->contextGL()) | 139 , m_gl(m_contextProvider->contextGL()) |
138 , m_extensionsUtil(std::move(extensionsUtil)) | 140 , m_extensionsUtil(std::move(extensionsUtil)) |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
551 } | 553 } |
552 | 554 |
553 GLuint DrawingBuffer::framebuffer() const | 555 GLuint DrawingBuffer::framebuffer() const |
554 { | 556 { |
555 return m_fbo; | 557 return m_fbo; |
556 } | 558 } |
557 | 559 |
558 WebLayer* DrawingBuffer::platformLayer() | 560 WebLayer* DrawingBuffer::platformLayer() |
559 { | 561 { |
560 if (!m_layer) { | 562 if (!m_layer) { |
561 m_layer = adoptPtr(Platform::current()->compositorSupport()->createExter
nalTextureLayer(this)); | 563 m_layer = wrapUnique(Platform::current()->compositorSupport()->createExt
ernalTextureLayer(this)); |
562 | 564 |
563 m_layer->setOpaque(!m_wantAlphaChannel); | 565 m_layer->setOpaque(!m_wantAlphaChannel); |
564 m_layer->setBlendBackgroundColor(m_wantAlphaChannel); | 566 m_layer->setBlendBackgroundColor(m_wantAlphaChannel); |
565 m_layer->setPremultipliedAlpha(m_premultipliedAlpha); | 567 m_layer->setPremultipliedAlpha(m_premultipliedAlpha); |
566 m_layer->setNearestNeighbor(m_filterQuality == kNone_SkFilterQuality); | 568 m_layer->setNearestNeighbor(m_filterQuality == kNone_SkFilterQuality); |
567 GraphicsLayer::registerContentsLayer(m_layer->layer()); | 569 GraphicsLayer::registerContentsLayer(m_layer->layer()); |
568 } | 570 } |
569 | 571 |
570 return m_layer->layer(); | 572 return m_layer->layer(); |
571 } | 573 } |
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1077 | 1079 |
1078 void DrawingBuffer::restoreTextureBindings() | 1080 void DrawingBuffer::restoreTextureBindings() |
1079 { | 1081 { |
1080 // This class potentially modifies the bindings for GL_TEXTURE_2D and | 1082 // This class potentially modifies the bindings for GL_TEXTURE_2D and |
1081 // GL_TEXTURE_RECTANGLE. Only GL_TEXTURE_2D needs to be restored since | 1083 // GL_TEXTURE_RECTANGLE. Only GL_TEXTURE_2D needs to be restored since |
1082 // the public interface for WebGL does not support GL_TEXTURE_RECTANGLE. | 1084 // the public interface for WebGL does not support GL_TEXTURE_RECTANGLE. |
1083 m_gl->BindTexture(GL_TEXTURE_2D, m_texture2DBinding); | 1085 m_gl->BindTexture(GL_TEXTURE_2D, m_texture2DBinding); |
1084 } | 1086 } |
1085 | 1087 |
1086 } // namespace blink | 1088 } // namespace blink |
OLD | NEW |