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

Side by Side Diff: Source/core/html/canvas/WebGLRenderingContextBase.h

Issue 735623003: WebGL: accelerated texImage2D and texSubImage2D for canvas (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years 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) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 void restoreStateAfterClear(); 724 void restoreStateAfterClear();
725 725
726 // Convert texture internal format. 726 // Convert texture internal format.
727 GLenum convertTexInternalFormat(GLenum internalformat, GLenum type); 727 GLenum convertTexInternalFormat(GLenum internalformat, GLenum type);
728 728
729 void texImage2DBase(GLenum target, GLint level, GLenum internalformat, GLsiz ei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels, ExceptionState&); 729 void texImage2DBase(GLenum target, GLint level, GLenum internalformat, GLsiz ei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels, ExceptionState&);
730 void texImage2DImpl(GLenum target, GLint level, GLenum internalformat, GLenu m format, GLenum type, Image*, WebGLImageConversion::ImageHtmlDomSource, bool fl ipY, bool premultiplyAlpha, ExceptionState&); 730 void texImage2DImpl(GLenum target, GLint level, GLenum internalformat, GLenu m format, GLenum type, Image*, WebGLImageConversion::ImageHtmlDomSource, bool fl ipY, bool premultiplyAlpha, ExceptionState&);
731 void texSubImage2DBase(GLenum target, GLint level, GLint xoffset, GLint yoff set, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixe ls, ExceptionState&); 731 void texSubImage2DBase(GLenum target, GLint level, GLint xoffset, GLint yoff set, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixe ls, ExceptionState&);
732 void texSubImage2DImpl(GLenum target, GLint level, GLint xoffset, GLint yoff set, GLenum format, GLenum type, Image*, WebGLImageConversion::ImageHtmlDomSourc e, bool flipY, bool premultiplyAlpha, ExceptionState&); 732 void texSubImage2DImpl(GLenum target, GLint level, GLint xoffset, GLint yoff set, GLenum format, GLenum type, Image*, WebGLImageConversion::ImageHtmlDomSourc e, bool flipY, bool premultiplyAlpha, ExceptionState&);
733 733
734 enum TexImageFunctionType {
735 NotTexSubImage2D,
736 TexSubImage2D,
737 };
738 // Copy from the canvas element directly to the texture via the GPU, without a read-back to system memory.
739 void texImage2DCanvasByGPU(TexImageFunctionType, WebGLTexture*, GLenum targe t, GLint level,
740 GLenum internalformat, GLenum type, GLint xoffset, GLint yoffset, HTMLCa nvasElement*);
741
734 void handleTextureCompleteness(const char*, bool); 742 void handleTextureCompleteness(const char*, bool);
735 void createFallbackBlackTextures1x1(); 743 void createFallbackBlackTextures1x1();
736 744
737 // Helper function for copyTex{Sub}Image, check whether the internalformat 745 // Helper function for copyTex{Sub}Image, check whether the internalformat
738 // and the color buffer format of the current bound framebuffer combination 746 // and the color buffer format of the current bound framebuffer combination
739 // is valid. 747 // is valid.
740 bool isTexInternalFormatColorBufferCombinationValid(GLenum texInternalFormat , GLenum colorBufferFormat); 748 bool isTexInternalFormatColorBufferCombinationValid(GLenum texInternalFormat , GLenum colorBufferFormat);
741 749
742 // Helper function to get the bound framebuffer's color buffer format. 750 // Helper function to get the bound framebuffer's color buffer format.
743 GLenum boundFramebufferColorFormat(); 751 GLenum boundFramebufferColorFormat();
(...skipping 19 matching lines...) Expand all
763 bool validateTexFuncFormatAndType(const char* functionName, GLenum format, G Lenum type, GLint level); 771 bool validateTexFuncFormatAndType(const char* functionName, GLenum format, G Lenum type, GLint level);
764 772
765 // Helper function to check input level for functions {copy}Tex{Sub}Image. 773 // Helper function to check input level for functions {copy}Tex{Sub}Image.
766 // Generates GL error and returns false if level is invalid. 774 // Generates GL error and returns false if level is invalid.
767 bool validateTexFuncLevel(const char* functionName, GLenum target, GLint lev el); 775 bool validateTexFuncLevel(const char* functionName, GLenum target, GLint lev el);
768 776
769 // Helper function to check if a 64-bit value is non-negative and can fit in to a 32-bit integer. 777 // Helper function to check if a 64-bit value is non-negative and can fit in to a 32-bit integer.
770 // Generates GL error and returns false if not. 778 // Generates GL error and returns false if not.
771 bool validateValueFitNonNegInt32(const char* functionName, const char* param Name, long long value); 779 bool validateValueFitNonNegInt32(const char* functionName, const char* param Name, long long value);
772 780
773 enum TexFuncValidationFunctionType {
774 NotTexSubImage2D,
775 TexSubImage2D,
776 };
777
778 enum TexFuncValidationSourceType { 781 enum TexFuncValidationSourceType {
779 SourceArrayBufferView, 782 SourceArrayBufferView,
780 SourceImageData, 783 SourceImageData,
781 SourceHTMLImageElement, 784 SourceHTMLImageElement,
782 SourceHTMLCanvasElement, 785 SourceHTMLCanvasElement,
783 SourceHTMLVideoElement, 786 SourceHTMLVideoElement,
784 }; 787 };
785 788
786 // Helper function for tex{Sub}Image2D to check if the input format/type/lev el/target/width/height/border/xoffset/yoffset are valid. 789 // Helper function for tex{Sub}Image2D to check if the input format/type/lev el/target/width/height/border/xoffset/yoffset are valid.
787 // Otherwise, it would return quickly without doing other work. 790 // Otherwise, it would return quickly without doing other work.
788 bool validateTexFunc(const char* functionName, TexFuncValidationFunctionType , TexFuncValidationSourceType, GLenum target, GLint level, GLenum internalformat , GLsizei width, 791 bool validateTexFunc(const char* functionName, TexImageFunctionType, TexFunc ValidationSourceType, GLenum target, GLint level, GLenum internalformat, GLsizei width,
789 GLsizei height, GLint border, GLenum format, GLenum type, GLint xoffset, GLint yoffset); 792 GLsizei height, GLint border, GLenum format, GLenum type, GLint xoffset, GLint yoffset);
790 793
791 // Helper function to check input width and height for functions {copy, comp ressed}Tex{Sub}Image. 794 // Helper function to check input width and height for functions {copy, comp ressed}Tex{Sub}Image.
792 // Generates GL error and returns false if width or height is invalid. 795 // Generates GL error and returns false if width or height is invalid.
793 bool validateTexFuncDimensions(const char* functionName, TexFuncValidationFu nctionType, GLenum target, GLint level, GLsizei width, GLsizei height); 796 bool validateTexFuncDimensions(const char* functionName, TexImageFunctionTyp e, GLenum target, GLint level, GLsizei width, GLsizei height);
794 797
795 // Helper function to check input parameters for functions {copy}Tex{Sub}Ima ge. 798 // Helper function to check input parameters for functions {copy}Tex{Sub}Ima ge.
796 // Generates GL error and returns false if parameters are invalid. 799 // Generates GL error and returns false if parameters are invalid.
797 bool validateTexFuncParameters(const char* functionName, TexFuncValidationFu nctionType, GLenum target, GLint level, GLenum internalformat, GLsizei width, GL sizei height, GLint border, GLenum format, GLenum type); 800 bool validateTexFuncParameters(const char* functionName, TexImageFunctionTyp e, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei hei ght, GLint border, GLenum format, GLenum type);
798 801
799 enum NullDisposition { 802 enum NullDisposition {
800 NullAllowed, 803 NullAllowed,
801 NullNotAllowed 804 NullNotAllowed
802 }; 805 };
803 806
804 // Helper function to validate that the given ArrayBufferView 807 // Helper function to validate that the given ArrayBufferView
805 // is of the correct type and contains enough data for the texImage call. 808 // is of the correct type and contains enough data for the texImage call.
806 // Generates GL error and returns false if parameters are invalid. 809 // Generates GL error and returns false if parameters are invalid.
807 bool validateTexFuncData(const char* functionName, GLint level, GLsizei widt h, GLsizei height, GLenum format, GLenum type, DOMArrayBufferView* pixels, NullD isposition); 810 bool validateTexFuncData(const char* functionName, GLint level, GLsizei widt h, GLsizei height, GLenum format, GLenum type, DOMArrayBufferView* pixels, NullD isposition);
808 811
809 // Helper function to validate a given texture format is settable as in 812 // Helper function to validate a given texture format is settable as in
810 // you can supply data to texImage2D, or call texImage2D, copyTexImage2D and 813 // you can supply data to texImage2D, or call texImage2D, copyTexImage2D and
811 // copyTexSubImage2D. 814 // copyTexSubImage2D.
812 // Generates GL error and returns false if the format is not settable. 815 // Generates GL error and returns false if the format is not settable.
813 bool validateSettableTexFormat(const char* functionName, GLenum format); 816 bool validateSettableTexFormat(const char* functionName, GLenum format);
814 817
815 // Helper function to validate compressed texture data is correct size 818 // Helper function to validate compressed texture data is correct size
816 // for the given format and dimensions. 819 // for the given format and dimensions.
817 bool validateCompressedTexFuncData(const char* functionName, GLsizei width, GLsizei height, GLenum format, DOMArrayBufferView* pixels); 820 bool validateCompressedTexFuncData(const char* functionName, GLsizei width, GLsizei height, GLenum format, DOMArrayBufferView* pixels);
818 821
819 // Helper function for validating compressed texture formats. 822 // Helper function for validating compressed texture formats.
820 bool validateCompressedTexFormat(GLenum format); 823 bool validateCompressedTexFormat(GLenum format);
821 824
822 // Helper function to validate compressed texture dimensions are valid for 825 // Helper function to validate compressed texture dimensions are valid for
823 // the given format. 826 // the given format.
824 bool validateCompressedTexDimensions(const char* functionName, TexFuncValida tionFunctionType, GLenum target, GLint level, GLsizei width, GLsizei height, GLe num format); 827 bool validateCompressedTexDimensions(const char* functionName, TexImageFunct ionType, GLenum target, GLint level, GLsizei width, GLsizei height, GLenum forma t);
825 828
826 // Helper function to validate compressed texture dimensions are valid for 829 // Helper function to validate compressed texture dimensions are valid for
827 // the given format. 830 // the given format.
828 bool validateCompressedTexSubDimensions(const char* functionName, GLenum tar get, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, G Lenum format, WebGLTexture*); 831 bool validateCompressedTexSubDimensions(const char* functionName, GLenum tar get, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, G Lenum format, WebGLTexture*);
829 832
830 // Helper function to validate mode for draw{Arrays/Elements}. 833 // Helper function to validate mode for draw{Arrays/Elements}.
831 bool validateDrawMode(const char* functionName, GLenum); 834 bool validateDrawMode(const char* functionName, GLenum);
832 835
833 // Helper function to validate if front/back stencilMask and stencilFunc set tings are the same. 836 // Helper function to validate if front/back stencilMask and stencilFunc set tings are the same.
834 bool validateStencilSettings(const char* functionName); 837 bool validateStencilSettings(const char* functionName);
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 static IntSize oldestContextSize(); 967 static IntSize oldestContextSize();
965 }; 968 };
966 969
967 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co ntext->is3d(), context.is3d()); 970 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co ntext->is3d(), context.is3d());
968 971
969 } // namespace blink 972 } // namespace blink
970 973
971 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(blink::WebGLRenderingContextB ase::TextureUnitState); 974 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(blink::WebGLRenderingContextB ase::TextureUnitState);
972 975
973 #endif // WebGLRenderingContextBase_h 976 #endif // WebGLRenderingContextBase_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698