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 3 // found in the LICENSE file. 4 5 #ifndef WebGLSharedWebGraphicsContext3D_h 6 #define WebGLSharedWebGraphicsContext3D_h 7 8 #include "wtf/Forward.h" 9 #include "wtf/RefCounted.h" 10 #include "wtf/RefPtr.h" 11 12 namespace blink { 13 14 class WebGraphicsContext3D; 15 class DrawingBuffer; 16 17 #if ENABLE(OILPAN) 18 // The attached WebGLContextObjects are finalized using the 19 // blink::WebGraphicsContext3D object of this object's DrawingBuffer. 20 // Naturally the DrawingBuffer must then be kept alive until those 21 // finalizers have run. With Oilpan, accomplish that by having the 22 // WebGLContextObjects keep a RefPtr<> to an off-heap object that 23 // safely handles the eventual release of the underlying 24 // DrawingBuffer. 25 class WebGLSharedWebGraphicsContext3D FINAL : public RefCounted<WebGLSharedWebGraphicsContext3D> { 26 public: 27 static PassRefPtr<WebGLSharedWebGraphicsContext3D> create(PassRefPtr<DrawingBuffer>); 28 29 ~WebGLSharedWebGraphicsContext3D(); 30 31 // Disposing and updating the underlying DrawingBuffer; 32 // needed when handling loss and restoration of graphics contexts. 33 void dispose(); 34 void update(PassRefPtr<DrawingBuffer>); 35 36 DrawingBuffer* drawingBuffer() const; 37 38 blink::WebGraphicsContext3D* webContext() const; 39 private: 40 explicit WebGLSharedWebGraphicsContext3D(PassRefPtr<DrawingBuffer>); 41 42 RefPtr<DrawingBuffer> m_buffer; 43 }; 44 #endif 45 46 } 47 48 #endif // WebGLSharedWebGraphicsContext3D_h 49