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

Side by Side Diff: Source/modules/webgl/WebGLRenderingContextBase.h

Issue 1300573002: WebGL 2: add readPixels API to read pixels into pixel pack buffer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: code refactoring to fix bugs in conformance test Created 5 years, 3 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) 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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 115
116 struct FormatTypeCompare { 116 struct FormatTypeCompare {
117 bool operator() (const FormatType& lhs, const FormatType& rhs) const 117 bool operator() (const FormatType& lhs, const FormatType& rhs) const
118 { 118 {
119 return (lhs.internalformat < rhs.internalformat 119 return (lhs.internalformat < rhs.internalformat
120 || ((lhs.internalformat == rhs.internalformat) && (lhs.format < rhs. format)) 120 || ((lhs.internalformat == rhs.internalformat) && (lhs.format < rhs. format))
121 || ((lhs.internalformat == rhs.internalformat) && (lhs.format == rhs .format) && (lhs.type < rhs.type))); 121 || ((lhs.internalformat == rhs.internalformat) && (lhs.format == rhs .format) && (lhs.type < rhs.type)));
122 } 122 }
123 }; 123 };
124 124
125 // ScopedDrawingBufferBinder is used for ReadPixels/CopyTexImage2D/CopySubImage2 D to read from
126 // a multisampled DrawingBuffer. In this situation, we need to blit to a single sampled buffer
127 // for reading, during which the bindings could be changed and need to be recove red.
128 class ScopedDrawingBufferBinder {
129 STACK_ALLOCATED();
130 public:
131 ScopedDrawingBufferBinder(DrawingBuffer* drawingBuffer, WebGLFramebuffer* fr amebufferBinding)
132 : m_drawingBuffer(drawingBuffer)
133 , m_readFramebufferBinding(framebufferBinding)
134 {
135 // Commit DrawingBuffer if needed (e.g., for multisampling)
136 if (!m_readFramebufferBinding && m_drawingBuffer)
137 m_drawingBuffer->commit();
138 }
139
140 ~ScopedDrawingBufferBinder()
141 {
142 // Restore DrawingBuffer if needed
143 if (!m_readFramebufferBinding && m_drawingBuffer)
144 m_drawingBuffer->restoreFramebufferBindings();
145 }
146
147 private:
148 DrawingBuffer* m_drawingBuffer;
149 Member<WebGLFramebuffer> m_readFramebufferBinding;
150 };
151
125 class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext, public Page::MultisamplingChangedObserver { 152 class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext, public Page::MultisamplingChangedObserver {
126 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(WebGLRenderingContextBase); 153 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(WebGLRenderingContextBase);
127 public: 154 public:
128 ~WebGLRenderingContextBase() override; 155 ~WebGLRenderingContextBase() override;
129 156
130 virtual unsigned version() const = 0; 157 virtual unsigned version() const = 0;
131 virtual String contextName() const = 0; 158 virtual String contextName() const = 0;
132 virtual void registerContextExtensions() = 0; 159 virtual void registerContextExtensions() = 0;
133 160
134 virtual void initializeNewContext(); 161 virtual void initializeNewContext();
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 GLboolean isFramebuffer(WebGLFramebuffer*); 270 GLboolean isFramebuffer(WebGLFramebuffer*);
244 GLboolean isProgram(WebGLProgram*); 271 GLboolean isProgram(WebGLProgram*);
245 GLboolean isRenderbuffer(WebGLRenderbuffer*); 272 GLboolean isRenderbuffer(WebGLRenderbuffer*);
246 GLboolean isShader(WebGLShader*); 273 GLboolean isShader(WebGLShader*);
247 GLboolean isTexture(WebGLTexture*); 274 GLboolean isTexture(WebGLTexture*);
248 275
249 void lineWidth(GLfloat); 276 void lineWidth(GLfloat);
250 void linkProgram(WebGLProgram*); 277 void linkProgram(WebGLProgram*);
251 void pixelStorei(GLenum pname, GLint param); 278 void pixelStorei(GLenum pname, GLint param);
252 void polygonOffset(GLfloat factor, GLfloat units); 279 void polygonOffset(GLfloat factor, GLfloat units);
253 void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum form at, GLenum type, DOMArrayBufferView* pixels); 280 virtual void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLe num format, GLenum type, DOMArrayBufferView* pixels);
254 void renderbufferStorage(GLenum target, GLenum internalformat, GLsizei width , GLsizei height); 281 void renderbufferStorage(GLenum target, GLenum internalformat, GLsizei width , GLsizei height);
255 void sampleCoverage(GLfloat value, GLboolean invert); 282 void sampleCoverage(GLfloat value, GLboolean invert);
256 void scissor(GLint x, GLint y, GLsizei width, GLsizei height); 283 void scissor(GLint x, GLint y, GLsizei width, GLsizei height);
257 void shaderSource(WebGLShader*, const String&); 284 void shaderSource(WebGLShader*, const String&);
258 void stencilFunc(GLenum func, GLint ref, GLuint mask); 285 void stencilFunc(GLenum func, GLint ref, GLuint mask);
259 void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask); 286 void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
260 void stencilMask(GLuint); 287 void stencilMask(GLuint);
261 void stencilMaskSeparate(GLenum face, GLuint mask); 288 void stencilMaskSeparate(GLenum face, GLuint mask);
262 void stencilOp(GLenum fail, GLenum zfail, GLenum zpass); 289 void stencilOp(GLenum fail, GLenum zfail, GLenum zpass);
263 void stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) ; 290 void stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) ;
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 // Generates INVALID_ENUM and returns false if parameters are invalid. 870 // Generates INVALID_ENUM and returns false if parameters are invalid.
844 virtual bool validateReadPixelsFormatAndType(GLenum format, GLenum type); 871 virtual bool validateReadPixelsFormatAndType(GLenum format, GLenum type);
845 872
846 // Helper function to get expected ArrayBuffer view type for readPixels. 873 // Helper function to get expected ArrayBuffer view type for readPixels.
847 virtual DOMArrayBufferView::ViewType readPixelsExpectedArrayBufferViewType(G Lenum type); 874 virtual DOMArrayBufferView::ViewType readPixelsExpectedArrayBufferViewType(G Lenum type);
848 875
849 // Helper function to check format/type combination for readPixels. 876 // Helper function to check format/type combination for readPixels.
850 // Generates INVALID_OPERATION and returns false if the combination is unsup ported. 877 // Generates INVALID_OPERATION and returns false if the combination is unsup ported.
851 bool validateReadPixelsFormatTypeCombination(GLenum format, GLenum type, GLe num readBufferInternalFormat, GLenum readBufferType); 878 bool validateReadPixelsFormatTypeCombination(GLenum format, GLenum type, GLe num readBufferInternalFormat, GLenum readBufferType);
852 879
880 // Helper function to check parameters of readPixels. Returns true if all pa rameters
881 // are valid. Otherwise, generates appropriate error and returns false.
882 bool validateReadPixelsFuncParameters(GLsizei width, GLsizei height, GLenum format, GLenum type, long long bufferSize);
883
853 virtual GLint getMaxTextureLevelForTarget(GLenum target); 884 virtual GLint getMaxTextureLevelForTarget(GLenum target);
854 885
855 // Helper function to check input level for functions {copy}Tex{Sub}Image. 886 // Helper function to check input level for functions {copy}Tex{Sub}Image.
856 // Generates GL error and returns false if level is invalid. 887 // Generates GL error and returns false if level is invalid.
857 bool validateTexFuncLevel(const char* functionName, GLenum target, GLint lev el); 888 bool validateTexFuncLevel(const char* functionName, GLenum target, GLint lev el);
858 889
859 // Helper function to check if a 64-bit value is non-negative and can fit in to a 32-bit integer. 890 // Helper function to check if a 64-bit value is non-negative and can fit in to a 32-bit integer.
860 // Generates GL error and returns false if not. 891 // Generates GL error and returns false if not.
861 bool validateValueFitNonNegInt32(const char* functionName, const char* param Name, long long value); 892 bool validateValueFitNonNegInt32(const char* functionName, const char* param Name, long long value);
862 893
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 static IntSize oldestContextSize(); 1102 static IntSize oldestContextSize();
1072 }; 1103 };
1073 1104
1074 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co ntext->is3d(), context.is3d()); 1105 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co ntext->is3d(), context.is3d());
1075 1106
1076 } // namespace blink 1107 } // namespace blink
1077 1108
1078 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(blink::WebGLRenderingContextB ase::TextureUnitState); 1109 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(blink::WebGLRenderingContextB ase::TextureUnitState);
1079 1110
1080 #endif // WebGLRenderingContextBase_h 1111 #endif // WebGLRenderingContextBase_h
OLDNEW
« no previous file with comments | « Source/modules/webgl/WebGLBuffer.cpp ('k') | Source/modules/webgl/WebGLRenderingContextBase.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698