summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/graphics/android/GaneshContext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/platform/graphics/android/GaneshContext.cpp')
-rw-r--r--Source/WebCore/platform/graphics/android/GaneshContext.cpp108
1 files changed, 14 insertions, 94 deletions
diff --git a/Source/WebCore/platform/graphics/android/GaneshContext.cpp b/Source/WebCore/platform/graphics/android/GaneshContext.cpp
index e67bcd4..80fe749 100644
--- a/Source/WebCore/platform/graphics/android/GaneshContext.cpp
+++ b/Source/WebCore/platform/graphics/android/GaneshContext.cpp
@@ -51,9 +51,6 @@ namespace WebCore {
GaneshContext::GaneshContext()
: m_grContext(0)
- , m_baseTileDeviceFBO(0)
- , m_baseTileFBO(0)
- , m_baseTileStencil(0)
, m_baseTileDeviceSurface(0)
, m_surfaceConfig(0)
, m_surfaceContext(EGL_NO_CONTEXT)
@@ -95,22 +92,6 @@ SkDevice* GaneshContext::getDeviceForBaseTile(const TileRenderInfo& renderInfo)
contextNeedsReset = true;
}
- SkDevice* device = 0;
- if (renderInfo.textureInfo->getSharedTextureMode() == SurfaceTextureMode)
- device = getDeviceForBaseTileSurface(renderInfo);
- else if (renderInfo.textureInfo->getSharedTextureMode() == EglImageMode)
- device = getDeviceForBaseTileFBO(renderInfo);
-
- // We must reset the Ganesh context only after we are sure we have
- // re-established our EGLContext as the current context.
- if (device && contextNeedsReset)
- getGrContext()->resetContext();
-
- return device;
-}
-
-SkDevice* GaneshContext::getDeviceForBaseTileSurface(const TileRenderInfo& renderInfo)
-{
EGLDisplay display;
if (!m_surfaceContext) {
@@ -154,7 +135,6 @@ SkDevice* GaneshContext::getDeviceForBaseTileSurface(const TileRenderInfo& rende
}
TransferQueue* tileQueue = TilesManager::instance()->transferQueue();
-
if (tileQueue->m_eglSurface == EGL_NO_SURFACE) {
const float tileWidth = renderInfo.tileSize.width();
@@ -179,17 +159,16 @@ SkDevice* GaneshContext::getDeviceForBaseTileSurface(const TileRenderInfo& rende
if (!m_baseTileDeviceSurface) {
- GrPlatformSurfaceDesc surfaceDesc;
- surfaceDesc.fSurfaceType = kRenderTarget_GrPlatformSurfaceType;
- surfaceDesc.fRenderTargetFlags = kNone_GrPlatformRenderTargetFlagBit;
- surfaceDesc.fWidth = TilesManager::tileWidth();
- surfaceDesc.fHeight = TilesManager::tileHeight();
- surfaceDesc.fConfig = kRGBA_8888_GrPixelConfig;
- surfaceDesc.fStencilBits = 8;
- surfaceDesc.fPlatformRenderTarget = 0;
+ GrPlatformRenderTargetDesc renderTargetDesc;
+ renderTargetDesc.fWidth = TilesManager::tileWidth();
+ renderTargetDesc.fHeight = TilesManager::tileHeight();
+ renderTargetDesc.fConfig = kRGBA_8888_PM_GrPixelConfig;
+ renderTargetDesc.fSampleCnt = 0;
+ renderTargetDesc.fStencilBits = 8;
+ renderTargetDesc.fRenderTargetHandle = 0;
GrContext* grContext = getGrContext();
- GrRenderTarget* renderTarget = (GrRenderTarget*) grContext->createPlatformSurface(surfaceDesc);
+ GrRenderTarget* renderTarget = grContext->createPlatformRenderTarget(renderTargetDesc);
m_baseTileDeviceSurface = new SkGpuDevice(grContext, renderTarget);
renderTarget->unref();
@@ -197,76 +176,17 @@ SkDevice* GaneshContext::getDeviceForBaseTileSurface(const TileRenderInfo& rende
}
GLUtils::checkGlError("getDeviceForBaseTile");
- return m_baseTileDeviceSurface;
-}
-
-SkDevice* GaneshContext::getDeviceForBaseTileFBO(const TileRenderInfo& renderInfo)
-{
- const GLuint textureId = renderInfo.textureInfo->m_textureId;
- const float tileWidth = renderInfo.tileSize.width();
- const float tileHeight = renderInfo.tileSize.height();
-
- // bind to the current texture
- glBindTexture(GL_TEXTURE_2D, textureId);
-
- // setup the texture if needed
- if (renderInfo.textureInfo->m_width != tileWidth
- || renderInfo.textureInfo->m_height != tileHeight) {
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tileWidth, tileHeight,
- 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- renderInfo.textureInfo->m_width = tileWidth;
- renderInfo.textureInfo->m_height = tileHeight;
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- }
-
- if (!m_baseTileFBO) {
- glGenFramebuffers(1, &m_baseTileFBO);
- XLOG("generated FBO");
- }
-
- if (!m_baseTileStencil) {
- glGenRenderbuffers(1, &m_baseTileStencil);
- glBindRenderbuffer(GL_RENDERBUFFER, m_baseTileStencil);
- glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8,
- TilesManager::tileWidth(),
- TilesManager::tileHeight());
- glClearStencil(0);
- glClear(GL_STENCIL_BUFFER_BIT);
- XLOG("generated stencil");
- }
-
- // bind the FBO and attach the texture and stencil
- glBindFramebuffer(GL_FRAMEBUFFER, m_baseTileFBO);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId, 0);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_baseTileStencil);
-
- if (!m_baseTileDeviceFBO) {
-
- GrPlatformSurfaceDesc surfaceDesc;
- surfaceDesc.fSurfaceType = kRenderTarget_GrPlatformSurfaceType;
- surfaceDesc.fRenderTargetFlags = kNone_GrPlatformRenderTargetFlagBit;
- surfaceDesc.fWidth = TilesManager::tileWidth();
- surfaceDesc.fHeight = TilesManager::tileHeight();
- surfaceDesc.fConfig = kRGBA_8888_GrPixelConfig;
- surfaceDesc.fStencilBits = 8;
- surfaceDesc.fPlatformRenderTarget = m_baseTileFBO;
-
- GrContext* grContext = getGrContext();
- GrRenderTarget* renderTarget = (GrRenderTarget*) grContext->createPlatformSurface(surfaceDesc);
-
- m_baseTileDeviceFBO = new SkGpuDevice(grContext, renderTarget);
- renderTarget->unref();
- XLOG("generated device %p", m_baseTileDeviceFBO);
- }
+ // We must reset the Ganesh context only after we are sure we have
+ // re-established our EGLContext as the current context.
+ if (m_baseTileDeviceSurface && contextNeedsReset)
+ getGrContext()->resetContext();
- GLUtils::checkGlError("getDeviceForBaseTile");
- return m_baseTileDeviceFBO;
+ return m_baseTileDeviceSurface;
}
+
} // namespace WebCore
#endif // USE(ACCELERATED_COMPOSITING)