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

Unified Diff: Source/WebCore/platform/graphics/surfaces/win/GraphicsSurfaceWin.cpp

Issue 13642009: WebCore: Remove PLATFORM(WIN) files we do not use. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 8 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/WebCore/platform/graphics/surfaces/win/GraphicsSurfaceWin.cpp
diff --git a/Source/WebCore/platform/graphics/surfaces/win/GraphicsSurfaceWin.cpp b/Source/WebCore/platform/graphics/surfaces/win/GraphicsSurfaceWin.cpp
deleted file mode 100644
index 6c88190c576a3348451a9d37ec6b2e83d70bdcea..0000000000000000000000000000000000000000
--- a/Source/WebCore/platform/graphics/surfaces/win/GraphicsSurfaceWin.cpp
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
-
- Copyright (C) 2012 Zeno Albisser <zeno@webkit.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "GraphicsSurface.h"
-
-#if USE(GRAPHICS_SURFACE)
-#include "TextureMapperGL.h"
-
-#define EGL_EGLEXT_PROTOTYPES // This must be defined before including egl.h and eglext.h.
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-
-namespace WebCore {
-
-#define STRINGIFY(...) #__VA_ARGS__
-
-static GLuint loadShader(GLenum type, const GLchar *shaderSrc)
-{
- GLuint shader;
- GLint compiled;
-
- shader = glCreateShader(type);
- if (!shader)
- return 0;
-
- glShaderSource(shader, 1, &shaderSrc, 0);
- glCompileShader(shader);
- glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
- if (!compiled) {
- glDeleteShader(shader);
- return 0;
- }
- return shader;
-}
-
-struct GraphicsSurfacePrivate {
-public:
- GraphicsSurfacePrivate(const IntSize& size, GraphicsSurfaceToken token)
- : m_token(token)
- , m_detachedContext(0)
- , m_detachedReadSurface(0)
- , m_detachedDrawSurface(0)
- , m_size(size)
- , m_eglDisplay(0)
- , m_eglContext(0)
- , m_eglConfig(0)
- , m_eglFrontBufferSurface(0)
- , m_eglBackBufferSurface(0)
- , m_initialFrontBufferShareHandle(token.frontBufferHandle)
- , m_frontBufferShareHandle(token.frontBufferHandle)
- , m_backBufferShareHandle(token.backBufferHandle)
- , m_frontBufferTexture(0)
- , m_shaderProgram(0)
- {
- initializeShaderProgram();
- }
-
-
- GraphicsSurfacePrivate(const PlatformGraphicsContext3D shareContext, const IntSize& size, GraphicsSurface::Flags flags)
- : m_detachedContext(0)
- , m_detachedReadSurface(0)
- , m_detachedDrawSurface(0)
- , m_size(size)
- , m_eglDisplay(0)
- , m_eglContext(0)
- , m_eglConfig(0)
- , m_eglFrontBufferSurface(0)
- , m_eglBackBufferSurface(0)
- , m_initialFrontBufferShareHandle(0)
- , m_frontBufferShareHandle(0)
- , m_backBufferShareHandle(0)
- , m_frontBufferTexture(0)
- , m_shaderProgram(0)
- {
- initializeShaderProgram();
-
- static PFNEGLQUERYSURFACEPOINTERANGLEPROC eglQuerySurfacePointerANGLE = 0;
- if (!eglQuerySurfacePointerANGLE) {
- eglQuerySurfacePointerANGLE = reinterpret_cast<PFNEGLQUERYSURFACEPOINTERANGLEPROC>(eglGetProcAddress("eglQuerySurfacePointerANGLE"));
- if (!eglQuerySurfacePointerANGLE)
- return;
- }
-
- if (!m_eglDisplay || !m_eglContext || !m_eglConfig) {
- m_eglDisplay = eglGetCurrentDisplay();
- EGLint contextAttributes[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
- m_eglContext = eglCreateContext(m_eglDisplay, m_eglConfig, eglShareContext, contextAttributes);
- }
-
- EGLint attributes[] = {
- EGL_WIDTH, size.width(),
- EGL_HEIGHT, size.height(),
- EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB,
- EGL_TEXTURE_TARGET, EGL_TEXTURE_2D,
- EGL_NONE
- };
-
- m_eglFrontBufferSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConfig, attributes);
- m_eglBackBufferSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConfig, attributes);
- if (m_eglFrontBufferSurface == EGL_NO_SURFACE || m_eglBackBufferSurface == EGL_NO_SURFACE)
- return;
-
- eglQuerySurfacePointerANGLE(m_eglDisplay, m_eglFrontBufferSurface, EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE, &m_frontBufferShareHandle);
- eglQuerySurfacePointerANGLE(m_eglDisplay, m_eglBackBufferSurface, EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE, &m_backBufferShareHandle);
-
- m_initialFrontBufferShareHandle = m_frontBufferShareHandle;
-
- m_token = GraphicsSurfaceToken(m_frontBufferShareHandle, m_backBufferShareHandle);
- }
-
- ~GraphicsSurfacePrivate()
- {
- releaseFrontBufferTexture();
-
- if (m_eglBackBufferSurface)
- eglDestroySurface(m_eglDisplay, m_eglBackBufferSurface);
-
- if (m_shaderProgram)
- glDeleteProgram(m_shaderProgram);
- m_shaderProgram = 0;
-
- if (m_eglDisplay && m_eglContext)
- eglDestroyContext(m_eglDisplay, m_eglContext);
- }
-
- void copyFromTexture(uint32_t texture, const IntRect& sourceRect)
- {
- if (!makeCurrent())
- return;
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- drawTexture(texture);
- glFinish();
- doneCurrent();
- }
-
- bool makeCurrent()
- {
- m_detachedContext = eglGetCurrentContext();
- m_detachedReadSurface = eglGetCurrentSurface(EGL_READ);
- m_detachedDrawSurface = eglGetCurrentSurface(EGL_DRAW);
-
- return eglMakeCurrent(m_eglDisplay, m_eglBackBufferSurface, m_eglBackBufferSurface, m_eglContext);
- }
-
- bool doneCurrent()
- {
- if (!m_detachedContext || !m_detachedDrawSurface || !m_detachedReadSurface)
- return false;
-
- bool success = eglMakeCurrent(m_eglDisplay, m_detachedDrawSurface, m_detachedReadSurface, m_detachedContext);
- m_detachedContext = 0;
- m_detachedReadSurface = 0;
- m_detachedDrawSurface = 0;
- return success;
- }
-
- PlatformGraphicsSurface swapBuffers()
- {
- if (m_frontBufferTexture)
- releaseFrontBufferTexture();
- std::swap(m_eglFrontBufferSurface, m_eglBackBufferSurface);
- std::swap(m_frontBufferShareHandle, m_backBufferShareHandle);
-
- return m_frontBufferShareHandle;
- }
-
- GraphicsSurfaceToken token() const
- {
- return m_token;
- }
-
- uint32_t frontBufferTextureID()
- {
- if (!m_eglFrontBufferSurface) {
- m_eglFrontBufferSurface = createSurfaceFromShareHandle(m_size, m_frontBufferShareHandle);
-
- glGenTextures(1, &m_frontBufferTexture);
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, m_frontBufferTexture);
- eglBindTexImage(m_eglDisplay, m_eglFrontBufferSurface, EGL_BACK_BUFFER);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- }
-
- return m_frontBufferTexture;
- }
-
- PlatformGraphicsSurface initialFrontBufferShareHandle() const
- {
- return m_initialFrontBufferShareHandle;
- }
-
- PlatformGraphicsSurface frontBufferShareHandle() const
- {
- return m_frontBufferShareHandle;
- }
-
- PlatformGraphicsSurface backBufferShareHandle() const
- {
- return m_backBufferShareHandle;
- }
-
- void releaseFrontBufferTexture()
- {
- if (m_frontBufferTexture) {
- eglReleaseTexImage(m_eglDisplay, m_eglFrontBufferSurface, EGL_BACK_BUFFER);
- glDeleteTextures(1, &m_frontBufferTexture);
- m_frontBufferTexture = 0;
- }
-
- if (m_eglFrontBufferSurface)
- eglDestroySurface(m_eglDisplay, m_eglFrontBufferSurface);
- m_eglFrontBufferSurface = 0;
- }
-
- IntSize size() const
- {
- return m_size;
- }
-
-protected:
- void initializeShaderProgram()
- {
- if (m_shaderProgram)
- return;
-
- GLchar vShaderStr[] =
- STRINGIFY(
- attribute highp vec2 vertex;
- attribute highp vec2 textureCoordinates;
- varying highp vec2 textureCoords;
- void main(void)
- {
- gl_Position = vec4(vertex, 0.0, 1.0);
- textureCoords = textureCoordinates;
- }
- );
-
- GLchar fShaderStr[] =
- STRINGIFY(
- varying highp vec2 textureCoords;
- uniform sampler2D texture;
- void main(void)
- {
- highp vec3 color = texture2D(texture, textureCoords).rgb;
- gl_FragColor = vec4(clamp(color, 0.0, 1.0), 1.0);
- }
- );
-
- GLuint vertexShader;
- GLuint fragmentShader;
- GLint linked;
-
- vertexShader = loadShader(GL_VERTEX_SHADER, vShaderStr);
- fragmentShader = loadShader(GL_FRAGMENT_SHADER, fShaderStr);
- if (!vertexShader || !fragmentShader)
- return;
-
- m_shaderProgram = glCreateProgram();
- if (!m_shaderProgram)
- return;
-
- glAttachShader(m_shaderProgram, vertexShader);
- glAttachShader(m_shaderProgram, fragmentShader);
-
- glLinkProgram(m_shaderProgram);
- glGetProgramiv(m_shaderProgram, GL_LINK_STATUS, &linked);
- if (!linked) {
- glDeleteProgram(m_shaderProgram);
- m_shaderProgram = 0;
- }
-
- m_vertexAttr = glGetAttribLocation(m_shaderProgram, "vertex");
- m_textureCoordinatesAttr = glGetAttribLocation(m_shaderProgram, "textureCoordinates");
- m_textureUniform = glGetAttribLocation(m_shaderProgram, "texture");
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- }
-
- EGLSurface createSurfaceFromShareHandle(const IntSize& size, HANDLE shareHandle)
- {
- if (!m_eglDisplay || !m_eglConfig)
- m_eglDisplay = eglGetCurrentDisplay();
-
- EGLint attributes[] = {
- EGL_WIDTH, size.width(),
- EGL_HEIGHT, size.height(),
- EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB,
- EGL_TEXTURE_TARGET, EGL_TEXTURE_2D,
- EGL_NONE
- };
-
- EGLSurface surface = eglCreatePbufferFromClientBuffer(m_eglDisplay, EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE, reinterpret_cast<EGLClientBuffer>(shareHandle), m_eglConfig, attributes);
- ASSERT(surface);
-
- return surface;
- }
-
- void drawTexture(uint32_t texture)
- {
- glUseProgram(m_shaderProgram);
-
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- glBindTexture(GL_TEXTURE_2D, texture);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- GLfloat afVertices[] = {
- -1, -1,
- 1, -1,
- -1, 1,
- 1, 1
- };
- glVertexAttribPointer(m_vertexAttr, 2, GL_FLOAT, GL_FALSE, 0, afVertices);
-
- GLfloat aftextureCoordinates[] = {
- 0, 1,
- 1, 1,
- 0, 0,
- 1, 0
- };
- glVertexAttribPointer(m_textureCoordinatesAttr, 2, GL_FLOAT, GL_FALSE, 0, aftextureCoordinates);
-
- glUniform1i(m_textureUniform, 0);
-
- glEnableVertexAttribArray(m_vertexAttr);
- glEnableVertexAttribArray(m_textureCoordinatesAttr);
-
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-
- glDisableVertexAttribArray(m_vertexAttr);
- glDisableVertexAttribArray(m_textureCoordinatesAttr);
-
- glBindTexture(GL_TEXTURE_2D, 0);
- }
-
-private:
- GraphicsSurfaceToken m_token;
- EGLContext m_detachedContext;
- EGLSurface m_detachedReadSurface;
- EGLSurface m_detachedDrawSurface;
- IntSize m_size;
- EGLDisplay m_eglDisplay;
- EGLContext m_eglContext;
- EGLConfig m_eglConfig;
- EGLSurface m_eglFrontBufferSurface;
- EGLSurface m_eglBackBufferSurface;
- PlatformGraphicsSurface m_initialFrontBufferShareHandle;
- PlatformGraphicsSurface m_frontBufferShareHandle;
- PlatformGraphicsSurface m_backBufferShareHandle;
- GLuint m_frontBufferTexture;
- GLint m_shaderProgram;
-
- GLuint m_vertexAttr;
- GLuint m_textureCoordinatesAttr;
- GLuint m_textureUniform;
-};
-
-GraphicsSurfaceToken GraphicsSurface::platformExport()
-{
- return m_private->token();
-}
-
-uint32_t GraphicsSurface::platformGetTextureID()
-{
- return m_private->frontBufferTextureID();
-}
-
-void GraphicsSurface::platformCopyToGLTexture(uint32_t target, uint32_t id, const IntRect& targetRect, const IntPoint& offset)
-{
- // Currently not implemented.
-}
-
-void GraphicsSurface::platformCopyFromTexture(uint32_t texture, const IntRect& sourceRect)
-{
- m_private->copyFromTexture(texture, sourceRect);
-}
-
-void GraphicsSurface::platformPaintToTextureMapper(TextureMapper* textureMapper, const FloatRect& targetRect, const TransformationMatrix& transform, float opacity)
-{
- IntSize size = m_private->size();
- FloatRect rectOnContents(FloatPoint::zero(), size);
- TransformationMatrix adjustedTransform = transform;
- adjustedTransform.multiply(TransformationMatrix::rectToRect(rectOnContents, targetRect));
- static_cast<TextureMapperGL*>(textureMapper)->drawTexture(platformGetTextureID(), 0, size, rectOnContents, adjustedTransform, opacity);
-}
-
-uint32_t GraphicsSurface::platformFrontBuffer() const
-{
- if (m_private->initialFrontBufferShareHandle() == m_private->frontBufferShareHandle())
- return 0;
- if (m_private->initialFrontBufferShareHandle() == m_private->backBufferShareHandle())
- return 1;
- return 0xFFFF;
-}
-
-uint32_t GraphicsSurface::platformSwapBuffers()
-{
- m_private->swapBuffers();
- return platformFrontBuffer();
-}
-
-IntSize GraphicsSurface::platformSize() const
-{
- return m_private->size();
-}
-
-PassRefPtr<GraphicsSurface> GraphicsSurface::platformCreate(const IntSize& size, Flags flags, const PlatformGraphicsContext3D shareContext)
-{
- // Single buffered GraphicsSurface is currently not supported.
- if (flags & SupportsCopyToTexture || flags & SupportsSingleBuffered)
- return PassRefPtr<GraphicsSurface>();
-
- RefPtr<GraphicsSurface> surface = adoptRef(new GraphicsSurface(size, flags));
- surface->m_private = new GraphicsSurfacePrivate(shareContext, size, flags);
-
- if (!surface->m_private->frontBufferShareHandle() || !surface->m_private->backBufferShareHandle())
- return PassRefPtr<GraphicsSurface>();
-
- return surface;
-}
-
-PassRefPtr<GraphicsSurface> GraphicsSurface::platformImport(const IntSize& size, Flags flags, const GraphicsSurfaceToken& token)
-{
- // Single buffered GraphicsSurface is currently not supported.
- if (flags & SupportsCopyToTexture || flags & SupportsSingleBuffered)
- return PassRefPtr<GraphicsSurface>();
-
- RefPtr<GraphicsSurface> surface = adoptRef(new GraphicsSurface(size, flags));
- surface->m_private = new GraphicsSurfacePrivate(size, token);
-
- if (!surface->m_private->frontBufferShareHandle() || !surface->m_private->backBufferShareHandle())
- return PassRefPtr<GraphicsSurface>();
-
- return surface;
-}
-
-char* GraphicsSurface::platformLock(const IntRect& rect, int* outputStride, LockOptions lockOptions)
-{
- // GraphicsSurface is currently only being used for WebGL, which does not require this locking mechanism.
- return 0;
-}
-
-void GraphicsSurface::platformUnlock()
-{
- // GraphicsSurface is currently only being used for WebGL, which does not require this locking mechanism.
-}
-
-void GraphicsSurface::platformDestroy()
-{
- delete m_private;
- m_private = 0;
-}
-
-}
-#endif

Powered by Google App Engine
This is Rietveld 408576698