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

Side by Side 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: Created 5 years, 4 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010, Google Inc. All rights reserved. 2 * Copyright (c) 2010, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 m_internalRenderbufferFormat = GL_RGB8_OES; 427 m_internalRenderbufferFormat = GL_RGB8_OES;
428 } 428 }
429 429
430 m_context->getIntegerv(GL_MAX_TEXTURE_SIZE, &m_maxTextureSize); 430 m_context->getIntegerv(GL_MAX_TEXTURE_SIZE, &m_maxTextureSize);
431 431
432 int maxSampleCount = 0; 432 int maxSampleCount = 0;
433 m_multisampleMode = None; 433 m_multisampleMode = None;
434 if (m_requestedAttributes.antialias && m_multisampleExtensionSupported) { 434 if (m_requestedAttributes.antialias && m_multisampleExtensionSupported) {
435 m_context->getIntegerv(GL_MAX_SAMPLES_ANGLE, &maxSampleCount); 435 m_context->getIntegerv(GL_MAX_SAMPLES_ANGLE, &maxSampleCount);
436 m_multisampleMode = ExplicitResolve; 436 m_multisampleMode = ExplicitResolve;
437 if (m_extensionsUtil->supportsExtension("GL_EXT_multisampled_render_to_t exture")) 437 if (m_extensionsUtil->supportsExtension("GL_EXT_multisampled_render_to_t exture")) {
438 m_multisampleMode = ImplicitResolve; 438 m_multisampleMode = ImplicitResolve;
439 }
440 if (m_extensionsUtil->supportsExtension("GL_INTEL_framebuffer_CMAA")) {
bajones 2015/08/19 16:26:44 Nit: This should be an `else if`
Ken Russell (switch to Gerrit) 2015/08/19 17:56:18 Or does the Intel hardware supporting INTEL_frameb
441 m_multisampleMode = INTELCMAAResolve;
piman 2015/08/19 16:36:51 drive-by nit: CMAA is not multisampling, maybe ren
Ken Russell (switch to Gerrit) 2015/08/19 17:56:18 I like Antoine's suggestion. Could you please make
442 }
439 } 443 }
440 m_sampleCount = std::min(4, maxSampleCount); 444 m_sampleCount = std::min(4, maxSampleCount);
441 445
442 m_fbo = m_context->createFramebuffer(); 446 m_fbo = m_context->createFramebuffer();
443 447
444 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); 448 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo);
445 m_colorBuffer.textureId = createColorTexture(); 449 m_colorBuffer.textureId = createColorTexture();
446 if (m_multisampleMode == ImplicitResolve) 450 if (m_multisampleMode == ImplicitResolve)
447 m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_A TTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0, m_sampleCount); 451 m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_A TTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0, m_sampleCount);
448 else 452 else
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 int width = m_size.width(); 812 int width = m_size.width();
809 int height = m_size.height(); 813 int height = m_size.height();
810 // Use NEAREST, because there is no scale performed during the blit. 814 // Use NEAREST, because there is no scale performed during the blit.
811 m_context->blitFramebufferCHROMIUM(0, 0, width, height, 0, 0, width, hei ght, GL_COLOR_BUFFER_BIT, GL_NEAREST); 815 m_context->blitFramebufferCHROMIUM(0, 0, width, height, 0, 0, width, hei ght, GL_COLOR_BUFFER_BIT, GL_NEAREST);
812 816
813 if (m_scissorEnabled) 817 if (m_scissorEnabled)
814 m_context->enable(GL_SCISSOR_TEST); 818 m_context->enable(GL_SCISSOR_TEST);
815 } 819 }
816 820
817 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); 821 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo);
822 if (m_multisampleMode == INTELCMAAResolve) {
823 // Apply CMAA(Conservative Morphological Anti-Aliasing) algorithm to the color buffer of m_fbo.
824 // Reference: https://software.intel.com/en-us/articles/conservative-mor phological-anti-aliasing-cmaa
825 m_context->applyFramebufferAttachmentCMAAINTEL();
826 }
818 m_contentsChangeCommitted = true; 827 m_contentsChangeCommitted = true;
819 } 828 }
820 829
821 void DrawingBuffer::restoreFramebufferBindings() 830 void DrawingBuffer::restoreFramebufferBindings()
822 { 831 {
823 if (m_drawFramebufferBinding && m_readFramebufferBinding) { 832 if (m_drawFramebufferBinding && m_readFramebufferBinding) {
824 if (m_drawFramebufferBinding == m_readFramebufferBinding) { 833 if (m_drawFramebufferBinding == m_readFramebufferBinding) {
825 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_readFramebufferBinding) ; 834 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_readFramebufferBinding) ;
826 } else { 835 } else {
827 m_context->bindFramebuffer(GL_READ_FRAMEBUFFER, m_readFramebufferBin ding); 836 m_context->bindFramebuffer(GL_READ_FRAMEBUFFER, m_readFramebufferBin ding);
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1011 void DrawingBuffer::deleteChromiumImageForTexture(TextureInfo* info) 1020 void DrawingBuffer::deleteChromiumImageForTexture(TextureInfo* info)
1012 { 1021 {
1013 if (info->imageId) { 1022 if (info->imageId) {
1014 m_context->releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, info->imageId); 1023 m_context->releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, info->imageId);
1015 m_context->destroyImageCHROMIUM(info->imageId); 1024 m_context->destroyImageCHROMIUM(info->imageId);
1016 info->imageId = 0; 1025 info->imageId = 0;
1017 } 1026 }
1018 } 1027 }
1019 1028
1020 } // namespace blink 1029 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698