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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp

Issue 1815803003: Move simple methods [T-Z] from WebGraphicsContext3D to GLES2Interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@simples-fplus
Patch Set: simples-tplus: fixed Created 4 years, 9 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 617 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 GraphicsLayer::unregisterContentsLayer(m_layer->layer()); 628 GraphicsLayer::unregisterContentsLayer(m_layer->layer());
629 } 629 }
630 630
631 WebGLId DrawingBuffer::createColorTexture(const TextureParameters& parameters) 631 WebGLId DrawingBuffer::createColorTexture(const TextureParameters& parameters)
632 { 632 {
633 WebGLId offscreenColorTexture = m_context->createTexture(); 633 WebGLId offscreenColorTexture = m_context->createTexture();
634 if (!offscreenColorTexture) 634 if (!offscreenColorTexture)
635 return 0; 635 return 0;
636 636
637 m_gl->BindTexture(parameters.target, offscreenColorTexture); 637 m_gl->BindTexture(parameters.target, offscreenColorTexture);
638 m_context->texParameteri(parameters.target, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); 638 m_gl->TexParameteri(parameters.target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
639 m_context->texParameteri(parameters.target, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); 639 m_gl->TexParameteri(parameters.target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
640 m_context->texParameteri(parameters.target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_E DGE); 640 m_gl->TexParameteri(parameters.target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
641 m_context->texParameteri(parameters.target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_E DGE); 641 m_gl->TexParameteri(parameters.target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
642 642
643 return offscreenColorTexture; 643 return offscreenColorTexture;
644 } 644 }
645 645
646 void DrawingBuffer::createSecondaryBuffers() 646 void DrawingBuffer::createSecondaryBuffers()
647 { 647 {
648 // create a multisample FBO 648 // create a multisample FBO
649 if (m_antiAliasingMode == MSAAExplicitResolve) { 649 if (m_antiAliasingMode == MSAAExplicitResolve) {
650 m_multisampleFBO = m_context->createFramebuffer(); 650 m_multisampleFBO = m_context->createFramebuffer();
651 m_gl->BindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO); 651 m_gl->BindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 686
687 void DrawingBuffer::resizeDepthStencil(const IntSize& size) 687 void DrawingBuffer::resizeDepthStencil(const IntSize& size)
688 { 688 {
689 if (!m_requestedAttributes.depth && !m_requestedAttributes.stencil) 689 if (!m_requestedAttributes.depth && !m_requestedAttributes.stencil)
690 return; 690 return;
691 691
692 if (!m_depthStencilBuffer) 692 if (!m_depthStencilBuffer)
693 m_depthStencilBuffer = m_context->createRenderbuffer(); 693 m_depthStencilBuffer = m_context->createRenderbuffer();
694 m_gl->BindRenderbuffer(GL_RENDERBUFFER, m_depthStencilBuffer); 694 m_gl->BindRenderbuffer(GL_RENDERBUFFER, m_depthStencilBuffer);
695 if (m_antiAliasingMode == MSAAImplicitResolve) 695 if (m_antiAliasingMode == MSAAImplicitResolve)
696 m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_sampleCo unt, GL_DEPTH24_STENCIL8_OES, size.width(), size.height()); 696 m_gl->RenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_sampleCount, GL_DEPTH24_STENCIL8_OES, size.width(), size.height());
697 else if (m_antiAliasingMode == MSAAExplicitResolve) 697 else if (m_antiAliasingMode == MSAAExplicitResolve)
698 m_gl->RenderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sampleCo unt, GL_DEPTH24_STENCIL8_OES, size.width(), size.height()); 698 m_gl->RenderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sampleCo unt, GL_DEPTH24_STENCIL8_OES, size.width(), size.height());
699 else 699 else
700 m_gl->RenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, size .width(), size.height()); 700 m_gl->RenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, size .width(), size.height());
701 m_gl->FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, G L_RENDERBUFFER, m_depthStencilBuffer); 701 m_gl->FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, G L_RENDERBUFFER, m_depthStencilBuffer);
702 m_gl->BindRenderbuffer(GL_RENDERBUFFER, 0); 702 m_gl->BindRenderbuffer(GL_RENDERBUFFER, 0);
703 } 703 }
704 704
705 705
706 706
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 uint8_t* rowB = framebuffer + (height - i - 1) * rowBytes; 941 uint8_t* rowB = framebuffer + (height - i - 1) * rowBytes;
942 memcpy(scanline, rowB, rowBytes); 942 memcpy(scanline, rowB, rowBytes);
943 memcpy(rowB, rowA, rowBytes); 943 memcpy(rowB, rowA, rowBytes);
944 memcpy(rowA, scanline, rowBytes); 944 memcpy(rowA, scanline, rowBytes);
945 } 945 }
946 } 946 }
947 947
948 void DrawingBuffer::texImage2DResourceSafe(GLenum target, GLint level, GLenum in ternalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLint unpackAlignment) 948 void DrawingBuffer::texImage2DResourceSafe(GLenum target, GLint level, GLenum in ternalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLint unpackAlignment)
949 { 949 {
950 ASSERT(unpackAlignment == 1 || unpackAlignment == 2 || unpackAlignment == 4 || unpackAlignment == 8); 950 ASSERT(unpackAlignment == 1 || unpackAlignment == 2 || unpackAlignment == 4 || unpackAlignment == 8);
951 m_context->texImage2D(target, level, internalformat, width, height, border, format, type, 0); 951 m_gl->TexImage2D(target, level, internalformat, width, height, border, forma t, type, 0);
952 } 952 }
953 953
954 void DrawingBuffer::deleteChromiumImageForTexture(TextureInfo* info) 954 void DrawingBuffer::deleteChromiumImageForTexture(TextureInfo* info)
955 { 955 {
956 if (info->imageId) { 956 if (info->imageId) {
957 m_gl->BindTexture(info->parameters.target, info->textureId); 957 m_gl->BindTexture(info->parameters.target, info->textureId);
958 m_context->releaseTexImage2DCHROMIUM(info->parameters.target, info->imag eId); 958 m_gl->ReleaseTexImage2DCHROMIUM(info->parameters.target, info->imageId);
959 m_context->destroyImageCHROMIUM(info->imageId); 959 m_gl->DestroyImageCHROMIUM(info->imageId);
960 info->imageId = 0; 960 info->imageId = 0;
961 } 961 }
962 } 962 }
963 963
964 DrawingBuffer::TextureInfo DrawingBuffer::createTextureAndAllocateMemory(const I ntSize& size) 964 DrawingBuffer::TextureInfo DrawingBuffer::createTextureAndAllocateMemory(const I ntSize& size)
965 { 965 {
966 // TODO(erikchen): Add support for a CHROMIUM_image back buffer whose 966 // TODO(erikchen): Add support for a CHROMIUM_image back buffer whose
967 // behavior mimics a texture with internal format GL_RGB. 967 // behavior mimics a texture with internal format GL_RGB.
968 // https://crbug.com/581777. 968 // https://crbug.com/581777.
969 if (!m_requestedAttributes.alpha) 969 if (!m_requestedAttributes.alpha)
970 return createDefaultTextureAndAllocateMemory(size); 970 return createDefaultTextureAndAllocateMemory(size);
971 971
972 if (!RuntimeEnabledFeatures::webGLImageChromiumEnabled()) 972 if (!RuntimeEnabledFeatures::webGLImageChromiumEnabled())
973 return createDefaultTextureAndAllocateMemory(size); 973 return createDefaultTextureAndAllocateMemory(size);
974 974
975 // First, try to allocate a CHROMIUM_image. This always has the potential to 975 // First, try to allocate a CHROMIUM_image. This always has the potential to
976 // fail. 976 // fail.
977 TextureParameters parameters = chromiumImageTextureParameters(); 977 TextureParameters parameters = chromiumImageTextureParameters();
978 WGC3Duint imageId = m_context->createGpuMemoryBufferImageCHROMIUM(size.width (), size.height(), parameters.internalColorFormat, GC3D_SCANOUT_CHROMIUM); 978 WGC3Duint imageId = m_gl->CreateGpuMemoryBufferImageCHROMIUM(size.width(), s ize.height(), parameters.internalColorFormat, GC3D_SCANOUT_CHROMIUM);
979 if (!imageId) 979 if (!imageId)
980 return createDefaultTextureAndAllocateMemory(size); 980 return createDefaultTextureAndAllocateMemory(size);
981 981
982 WebGLId textureId = createColorTexture(parameters); 982 WebGLId textureId = createColorTexture(parameters);
983 if (!textureId) { 983 if (!textureId) {
984 m_context->destroyImageCHROMIUM(imageId); 984 m_gl->DestroyImageCHROMIUM(imageId);
985 return createDefaultTextureAndAllocateMemory(size); 985 return createDefaultTextureAndAllocateMemory(size);
986 } 986 }
987 987
988 m_context->bindTexImage2DCHROMIUM(parameters.target, imageId); 988 m_gl->BindTexImage2DCHROMIUM(parameters.target, imageId);
989 989
990 TextureInfo info; 990 TextureInfo info;
991 info.textureId = textureId; 991 info.textureId = textureId;
992 info.imageId = imageId; 992 info.imageId = imageId;
993 info.parameters = parameters; 993 info.parameters = parameters;
994 return info; 994 return info;
995 } 995 }
996 996
997 DrawingBuffer::TextureInfo DrawingBuffer::createDefaultTextureAndAllocateMemory( const IntSize& size) 997 DrawingBuffer::TextureInfo DrawingBuffer::createDefaultTextureAndAllocateMemory( const IntSize& size)
998 { 998 {
999 TextureParameters parameters = defaultTextureParameters(); 999 TextureParameters parameters = defaultTextureParameters();
1000 WebGLId textureId = createColorTexture(parameters); 1000 WebGLId textureId = createColorTexture(parameters);
1001 texImage2DResourceSafe(parameters.target, 0, parameters.internalColorFormat, size.width(), size.height(), 0, parameters.colorFormat, GL_UNSIGNED_BYTE); 1001 texImage2DResourceSafe(parameters.target, 0, parameters.internalColorFormat, size.width(), size.height(), 0, parameters.colorFormat, GL_UNSIGNED_BYTE);
1002 1002
1003 DrawingBuffer::TextureInfo info; 1003 DrawingBuffer::TextureInfo info;
1004 info.textureId = textureId; 1004 info.textureId = textureId;
1005 info.parameters = parameters; 1005 info.parameters = parameters;
1006 return info; 1006 return info;
1007 } 1007 }
1008 1008
1009 void DrawingBuffer::resizeTextureMemory(TextureInfo* info, const IntSize& size) 1009 void DrawingBuffer::resizeTextureMemory(TextureInfo* info, const IntSize& size)
1010 { 1010 {
1011 ASSERT(info->textureId); 1011 ASSERT(info->textureId);
1012 if (info->imageId) { 1012 if (info->imageId) {
1013 deleteChromiumImageForTexture(info); 1013 deleteChromiumImageForTexture(info);
1014 info->imageId = m_context->createGpuMemoryBufferImageCHROMIUM(size.width (), size.height(), info->parameters.internalColorFormat, GC3D_SCANOUT_CHROMIUM); 1014 info->imageId = m_gl->CreateGpuMemoryBufferImageCHROMIUM(size.width(), s ize.height(), info->parameters.internalColorFormat, GC3D_SCANOUT_CHROMIUM);
1015 if (info->imageId) { 1015 if (info->imageId) {
1016 m_gl->BindTexture(info->parameters.target, info->textureId); 1016 m_gl->BindTexture(info->parameters.target, info->textureId);
1017 m_context->bindTexImage2DCHROMIUM(info->parameters.target, info->ima geId); 1017 m_gl->BindTexImage2DCHROMIUM(info->parameters.target, info->imageId) ;
1018 return; 1018 return;
1019 } 1019 }
1020 1020
1021 // If the desired texture target is different, there's no way to fall ba ck 1021 // If the desired texture target is different, there's no way to fall ba ck
1022 // to a non CHROMIUM_image texture. 1022 // to a non CHROMIUM_image texture.
1023 if (chromiumImageTextureParameters().target != defaultTextureParameters( ).target) 1023 if (chromiumImageTextureParameters().target != defaultTextureParameters( ).target)
1024 return; 1024 return;
1025 } 1025 }
1026 1026
1027 m_gl->BindTexture(info->parameters.target, info->textureId); 1027 m_gl->BindTexture(info->parameters.target, info->textureId);
1028 texImage2DResourceSafe(info->parameters.target, 0, info->parameters.internal ColorFormat, size.width(), size.height(), 0, info->parameters.colorFormat, GL_UN SIGNED_BYTE); 1028 texImage2DResourceSafe(info->parameters.target, 0, info->parameters.internal ColorFormat, size.width(), size.height(), 0, info->parameters.colorFormat, GL_UN SIGNED_BYTE);
1029 } 1029 }
1030 1030
1031 void DrawingBuffer::attachColorBufferToCurrentFBO() 1031 void DrawingBuffer::attachColorBufferToCurrentFBO()
1032 { 1032 {
1033 WGC3Denum target = m_colorBuffer.parameters.target; 1033 WGC3Denum target = m_colorBuffer.parameters.target;
1034 1034
1035 m_gl->BindTexture(target, m_colorBuffer.textureId); 1035 m_gl->BindTexture(target, m_colorBuffer.textureId);
1036 1036
1037 if (m_antiAliasingMode == MSAAImplicitResolve) 1037 if (m_antiAliasingMode == MSAAImplicitResolve)
1038 m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_A TTACHMENT0, target, m_colorBuffer.textureId, 0, m_sampleCount); 1038 m_gl->FramebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACH MENT0, target, m_colorBuffer.textureId, 0, m_sampleCount);
1039 else 1039 else
1040 m_gl->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, target, m_colorBuffer.textureId, 0); 1040 m_gl->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, target, m_colorBuffer.textureId, 0);
1041 1041
1042 m_gl->BindTexture(GL_TEXTURE_2D, m_texture2DBinding); 1042 m_gl->BindTexture(GL_TEXTURE_2D, m_texture2DBinding);
1043 } 1043 }
1044 1044
1045 } // namespace blink 1045 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698