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

Side by Side Diff: Source/core/html/HTMLCanvasElement.cpp

Issue 562583002: Implement image-rendering:pixelated for accelerated 2D canvases. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Set GL_NEAREST on the texture, invalidate the ImageBuffer and reconstruct the TextureMailbox when f… Created 6 years, 1 month 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) 2004, 2006, 2007 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved.
3 * Copyright (C) 2007 Alp Toker <alp@atoker.com> 3 * Copyright (C) 2007 Alp Toker <alp@atoker.com>
4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 : HTMLElement(canvasTag, document) 80 : HTMLElement(canvasTag, document)
81 , DocumentVisibilityObserver(document) 81 , DocumentVisibilityObserver(document)
82 , m_size(DefaultWidth, DefaultHeight) 82 , m_size(DefaultWidth, DefaultHeight)
83 , m_ignoreReset(false) 83 , m_ignoreReset(false)
84 , m_accelerationDisabled(false) 84 , m_accelerationDisabled(false)
85 , m_externallyAllocatedMemory(0) 85 , m_externallyAllocatedMemory(0)
86 , m_originClean(true) 86 , m_originClean(true)
87 , m_didFailToCreateImageBuffer(false) 87 , m_didFailToCreateImageBuffer(false)
88 , m_didClearImageBuffer(false) 88 , m_didClearImageBuffer(false)
89 { 89 {
90 setHasCustomStyleCallbacks();
90 } 91 }
91 92
92 DEFINE_NODE_FACTORY(HTMLCanvasElement) 93 DEFINE_NODE_FACTORY(HTMLCanvasElement)
93 94
94 HTMLCanvasElement::~HTMLCanvasElement() 95 HTMLCanvasElement::~HTMLCanvasElement()
95 { 96 {
96 resetDirtyRect(); 97 resetDirtyRect();
97 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(-m_external lyAllocatedMemory); 98 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(-m_external lyAllocatedMemory);
98 #if !ENABLE(OILPAN) 99 #if !ENABLE(OILPAN)
99 HashSet<RawPtr<CanvasObserver> >::iterator end = m_observers.end(); 100 HashSet<RawPtr<CanvasObserver> >::iterator end = m_observers.end();
(...skipping 13 matching lines...) Expand all
113 } 114 }
114 115
115 RenderObject* HTMLCanvasElement::createRenderer(RenderStyle* style) 116 RenderObject* HTMLCanvasElement::createRenderer(RenderStyle* style)
116 { 117 {
117 LocalFrame* frame = document().frame(); 118 LocalFrame* frame = document().frame();
118 if (frame && frame->script().canExecuteScripts(NotAboutToExecuteScript)) 119 if (frame && frame->script().canExecuteScripts(NotAboutToExecuteScript))
119 return new RenderHTMLCanvas(this); 120 return new RenderHTMLCanvas(this);
120 return HTMLElement::createRenderer(style); 121 return HTMLElement::createRenderer(style);
121 } 122 }
122 123
124 void HTMLCanvasElement::didRecalcStyle(StyleRecalcChange)
125 {
126 //printf("HTMLCanvasElement::didRecalcStyle\n");
127 if (!hasImageBuffer())
128 return;
129 //printf("HTMLCanvasElement::didRecalcStyle hasImageBuffer\n");
130 m_imageBuffer->setFilterLevel(computedStyle()->imageRendering() == ImageRend eringPixelated ? SkPaint::kNone_FilterLevel : SkPaint::kLow_FilterLevel);
131 }
132
123 Node::InsertionNotificationRequest HTMLCanvasElement::insertedInto(ContainerNode * node) 133 Node::InsertionNotificationRequest HTMLCanvasElement::insertedInto(ContainerNode * node)
124 { 134 {
125 setIsInCanvasSubtree(true); 135 setIsInCanvasSubtree(true);
126 return HTMLElement::insertedInto(node); 136 return HTMLElement::insertedInto(node);
127 } 137 }
128 138
129 void HTMLCanvasElement::addObserver(CanvasObserver* observer) 139 void HTMLCanvasElement::addObserver(CanvasObserver* observer)
130 { 140 {
131 m_observers.add(observer); 141 m_observers.add(observer);
132 } 142 }
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 // pixel readback, but that is unavoidable in this case. 537 // pixel readback, but that is unavoidable in this case.
528 // FIXME: Actually, avoid setting m_accelerationDisabled at all when 538 // FIXME: Actually, avoid setting m_accelerationDisabled at all when
529 // doing GPU-based rasterization. 539 // doing GPU-based rasterization.
530 if (m_accelerationDisabled) 540 if (m_accelerationDisabled)
531 return adoptPtr(new UnacceleratedImageBufferSurface(deviceSize, opac ityMode)); 541 return adoptPtr(new UnacceleratedImageBufferSurface(deviceSize, opac ityMode));
532 return adoptPtr(new WebGLImageBufferSurface(deviceSize, opacityMode)); 542 return adoptPtr(new WebGLImageBufferSurface(deviceSize, opacityMode));
533 } 543 }
534 544
535 OwnPtr<RecordingImageBufferFallbackSurfaceFactory> surfaceFactory = createSu rfaceFactory(deviceSize, msaaSampleCount); 545 OwnPtr<RecordingImageBufferFallbackSurfaceFactory> surfaceFactory = createSu rfaceFactory(deviceSize, msaaSampleCount);
536 546
537 if (RuntimeEnabledFeatures::displayList2dCanvasEnabled()) { 547 if (RuntimeEnabledFeatures::displayList2dCanvasEnabled() && false) {
538 OwnPtr<ImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSu rface(deviceSize, surfaceFactory.release(), opacityMode)); 548 OwnPtr<ImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSu rface(deviceSize, surfaceFactory.release(), opacityMode));
539 if (surface->isValid()) 549 if (surface->isValid())
540 return surface.release(); 550 return surface.release();
541 surfaceFactory = createSurfaceFactory(deviceSize, msaaSampleCount); // r ecreate because old previous one was released 551 surfaceFactory = createSurfaceFactory(deviceSize, msaaSampleCount); // r ecreate because old previous one was released
542 } 552 }
543 553
544 return surfaceFactory->createSurface(deviceSize, opacityMode); 554 return surfaceFactory->createSurface(deviceSize, opacityMode);
545 } 555 }
546 556
547 void HTMLCanvasElement::createImageBuffer() 557 void HTMLCanvasElement::createImageBuffer()
(...skipping 22 matching lines...) Expand all
570 return; 580 return;
571 581
572 int msaaSampleCount; 582 int msaaSampleCount;
573 OwnPtr<ImageBufferSurface> surface = createImageBufferSurface(deviceSize, &m saaSampleCount); 583 OwnPtr<ImageBufferSurface> surface = createImageBufferSurface(deviceSize, &m saaSampleCount);
574 if (!surface->isValid()) 584 if (!surface->isValid())
575 return; 585 return;
576 586
577 m_imageBuffer = ImageBuffer::create(surface.release()); 587 m_imageBuffer = ImageBuffer::create(surface.release());
578 m_imageBuffer->setClient(this); 588 m_imageBuffer->setClient(this);
579 589
590 m_imageBuffer->setFilterLevel(computedStyle()->imageRendering() == ImageRend eringPixelated ? SkPaint::kNone_FilterLevel : SkPaint::kLow_FilterLevel);
591
580 m_didFailToCreateImageBuffer = false; 592 m_didFailToCreateImageBuffer = false;
581 593
582 updateExternallyAllocatedMemory(); 594 updateExternallyAllocatedMemory();
583 595
584 if (is3D()) { 596 if (is3D()) {
585 // Early out for WebGL canvases 597 // Early out for WebGL canvases
586 return; 598 return;
587 } 599 }
588 600
589 m_imageBuffer->setClient(this); 601 m_imageBuffer->setClient(this);
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 { 806 {
795 return !originClean(); 807 return !originClean();
796 } 808 }
797 809
798 FloatSize HTMLCanvasElement::sourceSize() const 810 FloatSize HTMLCanvasElement::sourceSize() const
799 { 811 {
800 return FloatSize(width(), height()); 812 return FloatSize(width(), height());
801 } 813 }
802 814
803 } 815 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698