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

Unified Diff: Source/modules/webgl/WebGLRenderingContextBase.h

Issue 1318853003: Implemented copyTexSubImage3D WebGL2 entry point in Blink (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: Source/modules/webgl/WebGLRenderingContextBase.h
diff --git a/Source/modules/webgl/WebGLRenderingContextBase.h b/Source/modules/webgl/WebGLRenderingContextBase.h
index fb2d4636476f6c9d2c02aead671317d4d38229e3..0e1a5ba6277637b0d3e7f94adfa1c01e3483e106 100644
--- a/Source/modules/webgl/WebGLRenderingContextBase.h
+++ b/Source/modules/webgl/WebGLRenderingContextBase.h
@@ -716,6 +716,33 @@ protected:
return m_extensionEnabled[name];
}
+ // ScopedDrawingBufferBinder is used for ReadPixels/CopyTexImage2D/CopySubImage2D to read from
+ // a multisampled DrawingBuffer. In this situation, we need to blit to a single sampled buffer
+ // for reading, during which the bindings could be changed and need to be recovered.
+ class ScopedDrawingBufferBinder {
+ STACK_ALLOCATED();
+ public:
+ ScopedDrawingBufferBinder(DrawingBuffer* drawingBuffer, WebGLFramebuffer* framebufferBinding)
+ : m_drawingBuffer(drawingBuffer)
+ , m_readFramebufferBinding(framebufferBinding)
+ {
+ // Commit DrawingBuffer if needed (e.g., for multisampling)
+ if (!m_readFramebufferBinding && m_drawingBuffer)
+ m_drawingBuffer->commit();
+ }
+
+ ~ScopedDrawingBufferBinder()
+ {
+ // Restore DrawingBuffer if needed
+ if (!m_readFramebufferBinding && m_drawingBuffer)
+ m_drawingBuffer->restoreFramebufferBindings();
+ }
+
+ private:
+ DrawingBuffer* m_drawingBuffer;
+ Member<WebGLFramebuffer> m_readFramebufferBinding;
+ };
+
// Errors raised by synthesizeGLError() while the context is lost.
Vector<GLenum> m_lostContextErrors;
@@ -789,7 +816,7 @@ protected:
// Helper function to check if size is non-negative.
// Generate GL error and return false for negative inputs; otherwise, return true.
- bool validateSize(const char* functionName, GLint x, GLint y);
+ bool validateSize(const char* functionName, GLint x, GLint y, GLint z = 0);
// Helper function to check if all characters in the string belong to the
// ASCII subset as defined in GLSL ES 1.0 spec section 3.1.
@@ -862,6 +889,9 @@ protected:
// Generates GL error and returns false if parameters are invalid.
bool validateTexFuncData(const char* functionName, GLint level, GLsizei width, GLsizei height, GLenum internalformat, GLenum format, GLenum type, DOMArrayBufferView* pixels, NullDisposition);
+ // Helper function to validate that a copyTexSubImage call is valid.
+ bool validateCopyTexSubImage(const char* functionName, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+
// Helper function to validate a given texture format is settable as in
// you can supply data to texImage2D, or call texImage2D, copyTexImage2D and
// copyTexSubImage2D.

Powered by Google App Engine
This is Rietveld 408576698