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

Unified Diff: Source/platform/graphics/gpu/DrawingBuffer.cpp

Issue 1301923002: Add GL_CHROMIUM_screen_space_antialiasing to support alternative AA (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: add empty implementation Created 5 years, 3 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
« no previous file with comments | « Source/platform/graphics/gpu/DrawingBuffer.h ('k') | public/platform/WebGraphicsContext3D.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/graphics/gpu/DrawingBuffer.cpp
diff --git a/Source/platform/graphics/gpu/DrawingBuffer.cpp b/Source/platform/graphics/gpu/DrawingBuffer.cpp
index f4d21767f72f093370f435a7a7faef2ea12eb3f1..46d5362e87646632b3469c07389fc540a3bb24f2 100644
--- a/Source/platform/graphics/gpu/DrawingBuffer.cpp
+++ b/Source/platform/graphics/gpu/DrawingBuffer.cpp
@@ -154,7 +154,7 @@ DrawingBuffer::DrawingBuffer(PassOwnPtr<WebGraphicsContext3D> context,
, m_contentsChanged(true)
, m_contentsChangeCommitted(false)
, m_bufferClearNeeded(false)
- , m_multisampleMode(None)
+ , m_antiAliasingMode(None)
, m_internalColorFormat(0)
, m_colorFormat(0)
, m_internalRenderbufferFormat(0)
@@ -249,7 +249,7 @@ bool DrawingBuffer::prepareMailbox(WebExternalTextureMailbox* outMailbox, WebExt
return false;
// Resolve the multisampled buffer into m_colorBuffer texture.
- if (m_multisampleMode != None)
+ if (m_antiAliasingMode != None)
commit();
if (bitmap) {
@@ -288,7 +288,7 @@ bool DrawingBuffer::prepareMailbox(WebExternalTextureMailbox* outMailbox, WebExt
// If this stops being true at some point, we should track the current framebuffer binding in the DrawingBuffer and restore
// it after attaching the new back buffer here.
m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo);
- if (m_multisampleMode == ImplicitResolve)
+ if (m_antiAliasingMode == MSAAImplicitResolve)
m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0, m_sampleCount);
else
m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0);
@@ -430,12 +430,15 @@ bool DrawingBuffer::initialize(const IntSize& size)
m_context->getIntegerv(GL_MAX_TEXTURE_SIZE, &m_maxTextureSize);
int maxSampleCount = 0;
- m_multisampleMode = None;
+ m_antiAliasingMode = None;
if (m_requestedAttributes.antialias && m_multisampleExtensionSupported) {
m_context->getIntegerv(GL_MAX_SAMPLES_ANGLE, &maxSampleCount);
- m_multisampleMode = ExplicitResolve;
- if (m_extensionsUtil->supportsExtension("GL_EXT_multisampled_render_to_texture"))
- m_multisampleMode = ImplicitResolve;
+ m_antiAliasingMode = MSAAExplicitResolve;
+ if (m_extensionsUtil->supportsExtension("GL_EXT_multisampled_render_to_texture")) {
+ m_antiAliasingMode = MSAAImplicitResolve;
+ } else if (m_extensionsUtil->supportsExtension("GL_CHROMIUM_screen_space_antialiasing")) {
+ m_antiAliasingMode = ScreenSpaceAntialiasing;
+ }
}
m_sampleCount = std::min(4, maxSampleCount);
@@ -443,7 +446,7 @@ bool DrawingBuffer::initialize(const IntSize& size)
m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo);
m_colorBuffer.textureId = createColorTexture();
- if (m_multisampleMode == ImplicitResolve)
+ if (m_antiAliasingMode == MSAAImplicitResolve)
m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0, m_sampleCount);
else
m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0);
@@ -482,7 +485,7 @@ bool DrawingBuffer::copyToPlatformTexture(WebGraphicsContext3D* context, Platfor
GLenum destType, GLint level, bool premultiplyAlpha, bool flipY, SourceDrawingBuffer sourceBuffer)
{
if (m_contentsChanged) {
- if (m_multisampleMode != None) {
+ if (m_antiAliasingMode != None) {
commit();
restoreFramebufferBindings();
}
@@ -620,7 +623,7 @@ unsigned DrawingBuffer::createColorTexture()
void DrawingBuffer::createSecondaryBuffers()
{
// create a multisample FBO
- if (m_multisampleMode == ExplicitResolve) {
+ if (m_antiAliasingMode == MSAAExplicitResolve) {
m_multisampleFBO = m_context->createFramebuffer();
m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO);
m_multisampleColorBuffer = m_context->createRenderbuffer();
@@ -636,14 +639,14 @@ bool DrawingBuffer::resizeFramebuffer(const IntSize& size)
allocateTextureMemory(&m_colorBuffer, size);
- if (m_multisampleMode == ImplicitResolve)
+ if (m_antiAliasingMode == MSAAImplicitResolve)
m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0, m_sampleCount);
else
m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0);
m_context->bindTexture(GL_TEXTURE_2D, 0);
- if (m_multisampleMode != ExplicitResolve)
+ if (m_antiAliasingMode != MSAAExplicitResolve)
resizeDepthStencil(size);
if (m_context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
return false;
@@ -653,7 +656,7 @@ bool DrawingBuffer::resizeFramebuffer(const IntSize& size)
bool DrawingBuffer::resizeMultisampleFramebuffer(const IntSize& size)
{
- if (m_multisampleMode == ExplicitResolve) {
+ if (m_antiAliasingMode == MSAAExplicitResolve) {
m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO);
m_context->bindRenderbuffer(GL_RENDERBUFFER, m_multisampleColorBuffer);
@@ -680,9 +683,9 @@ void DrawingBuffer::resizeDepthStencil(const IntSize& size)
if (!m_depthStencilBuffer)
m_depthStencilBuffer = m_context->createRenderbuffer();
m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthStencilBuffer);
- if (m_multisampleMode == ImplicitResolve)
+ if (m_antiAliasingMode == MSAAImplicitResolve)
m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_sampleCount, GL_DEPTH24_STENCIL8_OES, size.width(), size.height());
- else if (m_multisampleMode == ExplicitResolve)
+ else if (m_antiAliasingMode == MSAAExplicitResolve)
m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sampleCount, GL_DEPTH24_STENCIL8_OES, size.width(), size.height());
else
m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, size.width(), size.height());
@@ -693,9 +696,9 @@ void DrawingBuffer::resizeDepthStencil(const IntSize& size)
if (!m_depthBuffer)
m_depthBuffer = m_context->createRenderbuffer();
m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthBuffer);
- if (m_multisampleMode == ImplicitResolve)
+ if (m_antiAliasingMode == MSAAImplicitResolve)
m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_sampleCount, GL_DEPTH_COMPONENT16, size.width(), size.height());
- else if (m_multisampleMode == ExplicitResolve)
+ else if (m_antiAliasingMode == MSAAExplicitResolve)
m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sampleCount, GL_DEPTH_COMPONENT16, size.width(), size.height());
else
m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, size.width(), size.height());
@@ -705,9 +708,9 @@ void DrawingBuffer::resizeDepthStencil(const IntSize& size)
if (!m_stencilBuffer)
m_stencilBuffer = m_context->createRenderbuffer();
m_context->bindRenderbuffer(GL_RENDERBUFFER, m_stencilBuffer);
- if (m_multisampleMode == ImplicitResolve)
+ if (m_antiAliasingMode == MSAAImplicitResolve)
m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_sampleCount, GL_STENCIL_INDEX8, size.width(), size.height());
- else if (m_multisampleMode == ExplicitResolve)
+ else if (m_antiAliasingMode == MSAAExplicitResolve)
m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sampleCount, GL_STENCIL_INDEX8, size.width(), size.height());
else
m_context->renderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, size.width(), size.height());
@@ -815,6 +818,9 @@ void DrawingBuffer::commit()
}
m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo);
+ if (m_antiAliasingMode == ScreenSpaceAntialiasing) {
+ m_context->applyScreenSpaceAntialiasingCHROMIUM();
+ }
m_contentsChangeCommitted = true;
}
@@ -844,7 +850,7 @@ void DrawingBuffer::restoreFramebufferBindings()
bool DrawingBuffer::multisample() const
{
- return m_multisampleMode != None;
+ return m_antiAliasingMode != None;
}
void DrawingBuffer::bind(GLenum target)
« no previous file with comments | « Source/platform/graphics/gpu/DrawingBuffer.h ('k') | public/platform/WebGraphicsContext3D.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698