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

Unified Diff: Source/core/platform/chromium/support/GraphicsContext3DPrivate.cpp

Issue 15301006: Merged GraphicsContext3DPrivate into GraphicsContext3D (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Removed ExtractWebGraphicsContext3D Created 7 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/platform/chromium/support/GraphicsContext3DPrivate.cpp
diff --git a/Source/core/platform/chromium/support/GraphicsContext3DPrivate.cpp b/Source/core/platform/chromium/support/GraphicsContext3DPrivate.cpp
deleted file mode 100644
index df84c7409a618217e08c3139e30903767b4b694f..0000000000000000000000000000000000000000
--- a/Source/core/platform/chromium/support/GraphicsContext3DPrivate.cpp
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#include "core/platform/chromium/support/GraphicsContext3DPrivate.h"
-
-#include "GrContext.h"
-#include "GrGLInterface.h"
-#include "core/platform/graphics/Extensions3D.h"
-#include "core/platform/graphics/GraphicsContext.h"
-#include "core/platform/graphics/ImageBuffer.h"
-#include "core/platform/graphics/gpu/DrawingBuffer.h"
-#include <public/WebGraphicsContext3D.h>
-#include <public/WebGraphicsContext3DProvider.h>
-#include <public/WebGraphicsMemoryAllocation.h>
-#include <wtf/text/CString.h>
-#include <wtf/text/StringHash.h>
-
-namespace {
-
-// The limit of the number of textures we hold in the GrContext's bitmap->texture cache.
-const int maxGaneshTextureCacheCount = 2048;
-// The limit of the bytes allocated toward textures in the GrContext's bitmap->texture cache.
-const size_t maxGaneshTextureCacheBytes = 96 * 1024 * 1024;
-
-}
-
-namespace WebCore {
-
-//----------------------------------------------------------------------
-// GraphicsContext3DPrivate
-
-GraphicsContext3DPrivate::GraphicsContext3DPrivate(PassOwnPtr<WebKit::WebGraphicsContext3D> webContext, bool preserveDrawingBuffer)
- : m_impl(webContext.get())
- , m_ownedWebContext(webContext)
- , m_initializedAvailableExtensions(false)
- , m_layerComposited(false)
- , m_preserveDrawingBuffer(preserveDrawingBuffer)
- , m_resourceSafety(ResourceSafetyUnknown)
- , m_grContext(0)
-{
-}
-
-GraphicsContext3DPrivate::GraphicsContext3DPrivate(PassOwnPtr<WebKit::WebGraphicsContext3DProvider> provider, bool preserveDrawingBuffer)
- : m_provider(provider)
- , m_impl(m_provider->context3d())
- , m_initializedAvailableExtensions(false)
- , m_layerComposited(false)
- , m_preserveDrawingBuffer(preserveDrawingBuffer)
- , m_resourceSafety(ResourceSafetyUnknown)
- , m_grContext(m_provider->grContext())
-{
-}
-
-
-GraphicsContext3DPrivate::~GraphicsContext3DPrivate()
-{
- if (m_ownedGrContext) {
- m_ownedWebContext->setMemoryAllocationChangedCallbackCHROMIUM(0);
- m_ownedGrContext->contextDestroyed();
- }
-}
-
-PassRefPtr<GraphicsContext3D> GraphicsContext3DPrivate::createGraphicsContextFromWebContext(PassOwnPtr<WebKit::WebGraphicsContext3D> webContext, bool preserveDrawingBuffer)
-{
- RefPtr<GraphicsContext3D> context = adoptRef(new GraphicsContext3D());
-
- OwnPtr<GraphicsContext3DPrivate> priv = adoptPtr(new GraphicsContext3DPrivate(webContext, preserveDrawingBuffer));
- context->m_private = priv.release();
- return context.release();
-}
-
-PassRefPtr<GraphicsContext3D> GraphicsContext3DPrivate::createGraphicsContextFromProvider(PassOwnPtr<WebKit::WebGraphicsContext3DProvider> provider, bool preserveDrawingBuffer)
-{
- RefPtr<GraphicsContext3D> context = adoptRef(new GraphicsContext3D());
-
- OwnPtr<GraphicsContext3DPrivate> priv = adoptPtr(new GraphicsContext3DPrivate(provider, preserveDrawingBuffer));
- context->m_private = priv.release();
- return context.release();
-}
-
-WebKit::WebGraphicsContext3D* GraphicsContext3DPrivate::extractWebGraphicsContext3D(GraphicsContext3D* context)
-{
- if (!context)
- return 0;
- return context->m_private->webContext();
-}
-
-class GrMemoryAllocationChangedCallbackAdapter : public WebKit::WebGraphicsContext3D::WebGraphicsMemoryAllocationChangedCallbackCHROMIUM {
-public:
- GrMemoryAllocationChangedCallbackAdapter(GrContext* context)
- : m_context(context)
- {
- }
-
- virtual void onMemoryAllocationChanged(WebKit::WebGraphicsMemoryAllocation allocation) OVERRIDE
- {
- if (!m_context)
- return;
-
- if (!allocation.gpuResourceSizeInBytes) {
- m_context->freeGpuResources();
- m_context->setTextureCacheLimits(0, 0);
- } else
- m_context->setTextureCacheLimits(maxGaneshTextureCacheCount, maxGaneshTextureCacheBytes);
- }
-
-private:
- GrContext* m_context;
-};
-
-namespace {
-void bindWebGraphicsContext3DGLContextCallback(const GrGLInterface* interface)
-{
- reinterpret_cast<WebKit::WebGraphicsContext3D*>(interface->fCallbackData)->makeContextCurrent();
-}
-}
-
-GrContext* GraphicsContext3DPrivate::grContext()
-{
- if (m_grContext)
- return m_grContext;
- if (!m_ownedWebContext)
- return 0;
-
- SkAutoTUnref<GrGLInterface> interface(m_ownedWebContext->createGrGLInterface());
- if (!interface)
- return 0;
-
- interface->fCallback = bindWebGraphicsContext3DGLContextCallback;
- interface->fCallbackData = reinterpret_cast<GrGLInterfaceCallbackData>(m_ownedWebContext.get());
-
- m_ownedGrContext.reset(GrContext::Create(kOpenGL_GrBackend, reinterpret_cast<GrBackendContext>(interface.get())));
- m_grContext = m_ownedGrContext;
- if (!m_grContext)
- return 0;
-
- m_grContext->setTextureCacheLimits(maxGaneshTextureCacheCount, maxGaneshTextureCacheBytes);
- m_grContextMemoryAllocationCallbackAdapter = adoptPtr(new GrMemoryAllocationChangedCallbackAdapter(m_grContext));
- m_ownedWebContext->setMemoryAllocationChangedCallbackCHROMIUM(m_grContextMemoryAllocationCallbackAdapter.get());
-
- return m_grContext;
-}
-
-void GraphicsContext3DPrivate::markContextChanged()
-{
- m_layerComposited = false;
-}
-
-bool GraphicsContext3DPrivate::layerComposited() const
-{
- return m_layerComposited;
-}
-
-void GraphicsContext3DPrivate::markLayerComposited()
-{
- m_layerComposited = true;
-}
-
-void GraphicsContext3DPrivate::paintFramebufferToCanvas(int framebuffer, int width, int height, bool premultiplyAlpha, ImageBuffer* imageBuffer)
-{
- unsigned char* pixels = 0;
- size_t bufferSize = 4 * width * height;
-
- const SkBitmap* canvasBitmap = imageBuffer->context()->bitmap();
- const SkBitmap* readbackBitmap = 0;
- ASSERT(canvasBitmap->config() == SkBitmap::kARGB_8888_Config);
- if (canvasBitmap->width() == width && canvasBitmap->height() == height) {
- // This is the fastest and most common case. We read back
- // directly into the canvas's backing store.
- readbackBitmap = canvasBitmap;
- m_resizingBitmap.reset();
- } else {
- // We need to allocate a temporary bitmap for reading back the
- // pixel data. We will then use Skia to rescale this bitmap to
- // the size of the canvas's backing store.
- if (m_resizingBitmap.width() != width || m_resizingBitmap.height() != height) {
- m_resizingBitmap.setConfig(SkBitmap::kARGB_8888_Config,
- width,
- height);
- if (!m_resizingBitmap.allocPixels())
- return;
- }
- readbackBitmap = &m_resizingBitmap;
- }
-
- // Read back the frame buffer.
- SkAutoLockPixels bitmapLock(*readbackBitmap);
- pixels = static_cast<unsigned char*>(readbackBitmap->getPixels());
-
- m_impl->readBackFramebuffer(pixels, 4 * width * height, framebuffer, width, height);
-
- if (premultiplyAlpha) {
- for (size_t i = 0; i < bufferSize; i += 4) {
- pixels[i + 0] = std::min(255, pixels[i + 0] * pixels[i + 3] / 255);
- pixels[i + 1] = std::min(255, pixels[i + 1] * pixels[i + 3] / 255);
- pixels[i + 2] = std::min(255, pixels[i + 2] * pixels[i + 3] / 255);
- }
- }
-
- readbackBitmap->notifyPixelsChanged();
- if (m_resizingBitmap.readyToDraw()) {
- // We need to draw the resizing bitmap into the canvas's backing store.
- SkCanvas canvas(*canvasBitmap);
- SkRect dst;
- dst.set(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(canvasBitmap->width()), SkIntToScalar(canvasBitmap->height()));
- canvas.drawBitmapRect(m_resizingBitmap, 0, dst);
- }
-}
-
-class GraphicsContext3DContextLostCallbackAdapter : public WebKit::WebGraphicsContext3D::WebGraphicsContextLostCallback {
-public:
- GraphicsContext3DContextLostCallbackAdapter(PassOwnPtr<GraphicsContext3D::ContextLostCallback> callback)
- : m_contextLostCallback(callback) { }
- virtual ~GraphicsContext3DContextLostCallbackAdapter() { }
-
- virtual void onContextLost()
- {
- if (m_contextLostCallback)
- m_contextLostCallback->onContextLost();
- }
-private:
- OwnPtr<GraphicsContext3D::ContextLostCallback> m_contextLostCallback;
-};
-
-void GraphicsContext3DPrivate::setContextLostCallback(PassOwnPtr<GraphicsContext3D::ContextLostCallback> callback)
-{
- if (m_ownedWebContext) {
- m_contextLostCallbackAdapter = adoptPtr(new GraphicsContext3DContextLostCallbackAdapter(callback));
- m_ownedWebContext->setContextLostCallback(m_contextLostCallbackAdapter.get());
- }
-}
-
-class GraphicsContext3DErrorMessageCallbackAdapter : public WebKit::WebGraphicsContext3D::WebGraphicsErrorMessageCallback {
-public:
- GraphicsContext3DErrorMessageCallbackAdapter(PassOwnPtr<GraphicsContext3D::ErrorMessageCallback> callback)
- : m_errorMessageCallback(callback) { }
- virtual ~GraphicsContext3DErrorMessageCallbackAdapter() { }
-
- virtual void onErrorMessage(const WebKit::WebString& message, WebKit::WGC3Dint id)
- {
- if (m_errorMessageCallback)
- m_errorMessageCallback->onErrorMessage(message, id);
- }
-private:
- OwnPtr<GraphicsContext3D::ErrorMessageCallback> m_errorMessageCallback;
-};
-
-void GraphicsContext3DPrivate::setErrorMessageCallback(PassOwnPtr<GraphicsContext3D::ErrorMessageCallback> callback)
-{
- if (m_ownedWebContext) {
- m_errorMessageCallbackAdapter = adoptPtr(new GraphicsContext3DErrorMessageCallbackAdapter(callback));
- m_ownedWebContext->setErrorMessageCallback(m_errorMessageCallbackAdapter.get());
- }
-}
-
-Extensions3D* GraphicsContext3DPrivate::getExtensions()
-{
- if (!m_extensions)
- m_extensions = adoptPtr(new Extensions3D(this));
- return m_extensions.get();
-}
-
-namespace {
-
-void splitStringHelper(const String& str, HashSet<String>& set)
-{
- Vector<String> substrings;
- str.split(" ", substrings);
- for (size_t i = 0; i < substrings.size(); ++i)
- set.add(substrings[i]);
-}
-
-String mapExtensionName(const String& name)
-{
- if (name == "GL_ANGLE_framebuffer_blit"
- || name == "GL_ANGLE_framebuffer_multisample")
- return "GL_CHROMIUM_framebuffer_multisample";
- return name;
-}
-
-} // anonymous namespace
-
-void GraphicsContext3DPrivate::initializeExtensions()
-{
- if (m_initializedAvailableExtensions)
- return;
-
- m_initializedAvailableExtensions = true;
- bool success = m_impl->makeContextCurrent();
- ASSERT(success);
- if (!success)
- return;
-
- String extensionsString = m_impl->getString(GraphicsContext3D::EXTENSIONS);
- splitStringHelper(extensionsString, m_enabledExtensions);
-
- String requestableExtensionsString = m_impl->getRequestableExtensionsCHROMIUM();
- splitStringHelper(requestableExtensionsString, m_requestableExtensions);
-}
-
-
-bool GraphicsContext3DPrivate::supportsExtension(const String& name)
-{
- initializeExtensions();
- String mappedName = mapExtensionName(name);
- return m_enabledExtensions.contains(mappedName) || m_requestableExtensions.contains(mappedName);
-}
-
-bool GraphicsContext3DPrivate::ensureExtensionEnabled(const String& name)
-{
- initializeExtensions();
-
- String mappedName = mapExtensionName(name);
- if (m_enabledExtensions.contains(mappedName))
- return true;
-
- if (m_requestableExtensions.contains(mappedName)) {
- m_impl->requestExtensionCHROMIUM(mappedName.ascii().data());
- m_enabledExtensions.clear();
- m_requestableExtensions.clear();
- m_initializedAvailableExtensions = false;
- }
-
- initializeExtensions();
- return m_enabledExtensions.contains(mappedName);
-}
-
-bool GraphicsContext3DPrivate::isExtensionEnabled(const String& name)
-{
- initializeExtensions();
- String mappedName = mapExtensionName(name);
- return m_enabledExtensions.contains(mappedName);
-}
-
-
-bool GraphicsContext3DPrivate::isResourceSafe()
-{
- if (m_resourceSafety == ResourceSafetyUnknown)
- m_resourceSafety = getExtensions()->isEnabled("GL_CHROMIUM_resource_safe") ? ResourceSafe : ResourceUnsafe;
- return m_resourceSafety == ResourceSafe;
-}
-
-} // namespace WebCore
« no previous file with comments | « Source/core/platform/chromium/support/GraphicsContext3DPrivate.h ('k') | Source/core/platform/graphics/Extensions3D.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698