OLD | NEW |
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 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
709 m_extensions.append(TypedExtensionTracker<T>::create(extensionPtr, flags
, prefixes)); | 709 m_extensions.append(TypedExtensionTracker<T>::create(extensionPtr, flags
, prefixes)); |
710 } | 710 } |
711 | 711 |
712 bool extensionSupportedAndAllowed(const ExtensionTracker*); | 712 bool extensionSupportedAndAllowed(const ExtensionTracker*); |
713 | 713 |
714 inline bool extensionEnabled(WebGLExtensionName name) | 714 inline bool extensionEnabled(WebGLExtensionName name) |
715 { | 715 { |
716 return m_extensionEnabled[name]; | 716 return m_extensionEnabled[name]; |
717 } | 717 } |
718 | 718 |
| 719 // ScopedDrawingBufferBinder is used for ReadPixels/CopyTexImage2D/CopySubIm
age2D to read from |
| 720 // a multisampled DrawingBuffer. In this situation, we need to blit to a sin
gle sampled buffer |
| 721 // for reading, during which the bindings could be changed and need to be re
covered. |
| 722 class ScopedDrawingBufferBinder { |
| 723 STACK_ALLOCATED(); |
| 724 public: |
| 725 ScopedDrawingBufferBinder(DrawingBuffer* drawingBuffer, WebGLFramebuffer
* framebufferBinding) |
| 726 : m_drawingBuffer(drawingBuffer) |
| 727 , m_readFramebufferBinding(framebufferBinding) |
| 728 { |
| 729 // Commit DrawingBuffer if needed (e.g., for multisampling) |
| 730 if (!m_readFramebufferBinding && m_drawingBuffer) |
| 731 m_drawingBuffer->commit(); |
| 732 } |
| 733 |
| 734 ~ScopedDrawingBufferBinder() |
| 735 { |
| 736 // Restore DrawingBuffer if needed |
| 737 if (!m_readFramebufferBinding && m_drawingBuffer) |
| 738 m_drawingBuffer->restoreFramebufferBindings(); |
| 739 } |
| 740 |
| 741 private: |
| 742 DrawingBuffer* m_drawingBuffer; |
| 743 Member<WebGLFramebuffer> m_readFramebufferBinding; |
| 744 }; |
| 745 |
719 // Errors raised by synthesizeGLError() while the context is lost. | 746 // Errors raised by synthesizeGLError() while the context is lost. |
720 Vector<GLenum> m_lostContextErrors; | 747 Vector<GLenum> m_lostContextErrors; |
721 | 748 |
722 bool m_isWebGL2FormatsTypesAdded; | 749 bool m_isWebGL2FormatsTypesAdded; |
723 bool m_isOESTextureFloatFormatsTypesAdded; | 750 bool m_isOESTextureFloatFormatsTypesAdded; |
724 bool m_isOESTextureHalfFloatFormatsTypesAdded; | 751 bool m_isOESTextureHalfFloatFormatsTypesAdded; |
725 bool m_isWebGLDepthTextureFormatsTypesAdded; | 752 bool m_isWebGLDepthTextureFormatsTypesAdded; |
726 bool m_isEXTsRGBFormatsTypesAdded; | 753 bool m_isEXTsRGBFormatsTypesAdded; |
727 | 754 |
728 std::set<GLenum> m_supportedInternalFormats; | 755 std::set<GLenum> m_supportedInternalFormats; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
782 | 809 |
783 // Helper function to get the bound framebuffer's color buffer format. | 810 // Helper function to get the bound framebuffer's color buffer format. |
784 virtual GLenum boundFramebufferColorFormat(); | 811 virtual GLenum boundFramebufferColorFormat(); |
785 | 812 |
786 // Helper function to verify limits on the length of uniform and attribute l
ocations. | 813 // Helper function to verify limits on the length of uniform and attribute l
ocations. |
787 virtual unsigned getMaxWebGLLocationLength() const { return 256; } | 814 virtual unsigned getMaxWebGLLocationLength() const { return 256; } |
788 bool validateLocationLength(const char* functionName, const String&); | 815 bool validateLocationLength(const char* functionName, const String&); |
789 | 816 |
790 // Helper function to check if size is non-negative. | 817 // Helper function to check if size is non-negative. |
791 // Generate GL error and return false for negative inputs; otherwise, return
true. | 818 // Generate GL error and return false for negative inputs; otherwise, return
true. |
792 bool validateSize(const char* functionName, GLint x, GLint y); | 819 bool validateSize(const char* functionName, GLint x, GLint y, GLint z = 0); |
793 | 820 |
794 // Helper function to check if all characters in the string belong to the | 821 // Helper function to check if all characters in the string belong to the |
795 // ASCII subset as defined in GLSL ES 1.0 spec section 3.1. | 822 // ASCII subset as defined in GLSL ES 1.0 spec section 3.1. |
796 bool validateString(const char* functionName, const String&); | 823 bool validateString(const char* functionName, const String&); |
797 | 824 |
798 // Helper function to check target and texture bound to the target. | 825 // Helper function to check target and texture bound to the target. |
799 // Generate GL errors and return 0 if target is invalid or texture bound is | 826 // Generate GL errors and return 0 if target is invalid or texture bound is |
800 // null. Otherwise, return the texture bound to the target. | 827 // null. Otherwise, return the texture bound to the target. |
801 virtual WebGLTexture* validateTextureBinding(const char* functionName, GLenu
m target, bool useSixEnumsForCubeMap); | 828 virtual WebGLTexture* validateTextureBinding(const char* functionName, GLenu
m target, bool useSixEnumsForCubeMap); |
802 | 829 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
855 enum NullDisposition { | 882 enum NullDisposition { |
856 NullAllowed, | 883 NullAllowed, |
857 NullNotAllowed | 884 NullNotAllowed |
858 }; | 885 }; |
859 | 886 |
860 // Helper function to validate that the given ArrayBufferView | 887 // Helper function to validate that the given ArrayBufferView |
861 // is of the correct type and contains enough data for the texImage call. | 888 // is of the correct type and contains enough data for the texImage call. |
862 // Generates GL error and returns false if parameters are invalid. | 889 // Generates GL error and returns false if parameters are invalid. |
863 bool validateTexFuncData(const char* functionName, GLint level, GLsizei widt
h, GLsizei height, GLenum internalformat, GLenum format, GLenum type, DOMArrayBu
fferView* pixels, NullDisposition); | 890 bool validateTexFuncData(const char* functionName, GLint level, GLsizei widt
h, GLsizei height, GLenum internalformat, GLenum format, GLenum type, DOMArrayBu
fferView* pixels, NullDisposition); |
864 | 891 |
| 892 // Helper function to validate that a copyTexSubImage call is valid. |
| 893 bool validateCopyTexSubImage(const char* functionName, GLenum target, GLint
level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei wi
dth, GLsizei height); |
| 894 |
865 // Helper function to validate a given texture format is settable as in | 895 // Helper function to validate a given texture format is settable as in |
866 // you can supply data to texImage2D, or call texImage2D, copyTexImage2D and | 896 // you can supply data to texImage2D, or call texImage2D, copyTexImage2D and |
867 // copyTexSubImage2D. | 897 // copyTexSubImage2D. |
868 // Generates GL error and returns false if the format is not settable. | 898 // Generates GL error and returns false if the format is not settable. |
869 bool validateSettableTexFormat(const char* functionName, GLenum format); | 899 bool validateSettableTexFormat(const char* functionName, GLenum format); |
870 | 900 |
871 // Helper function to validate compressed texture data is correct size | 901 // Helper function to validate compressed texture data is correct size |
872 // for the given format and dimensions. | 902 // for the given format and dimensions. |
873 bool validateCompressedTexFuncData(const char* functionName, GLsizei width,
GLsizei height, GLenum format, DOMArrayBufferView* pixels); | 903 bool validateCompressedTexFuncData(const char* functionName, GLsizei width,
GLsizei height, GLenum format, DOMArrayBufferView* pixels); |
874 | 904 |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1039 static IntSize oldestContextSize(); | 1069 static IntSize oldestContextSize(); |
1040 }; | 1070 }; |
1041 | 1071 |
1042 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co
ntext->is3d(), context.is3d()); | 1072 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co
ntext->is3d(), context.is3d()); |
1043 | 1073 |
1044 } // namespace blink | 1074 } // namespace blink |
1045 | 1075 |
1046 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(blink::WebGLRenderingContextB
ase::TextureUnitState); | 1076 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(blink::WebGLRenderingContextB
ase::TextureUnitState); |
1047 | 1077 |
1048 #endif // WebGLRenderingContextBase_h | 1078 #endif // WebGLRenderingContextBase_h |
OLD | NEW |