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

Unified Diff: third_party/WebKit/Source/modules/webgl/WebGLTransformFeedback.h

Issue 2773843002: Fix state management of transform feedback buffers. (Closed)
Patch Set: Created 3 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/webgl/WebGLTransformFeedback.h
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLTransformFeedback.h b/third_party/WebKit/Source/modules/webgl/WebGLTransformFeedback.h
index be3551d95fe97cba9b8509811d2351403ef6cc34..f0a748ce057bdcdfb14a19d2f62219f64898eb7a 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLTransformFeedback.h
+++ b/third_party/WebKit/Source/modules/webgl/WebGLTransformFeedback.h
@@ -12,14 +12,22 @@
namespace blink {
class WebGL2RenderingContextBase;
+class WebGLBuffer;
class WebGLTransformFeedback : public WebGLSharedPlatform3DObject {
DEFINE_WRAPPERTYPEINFO();
public:
+ enum TFType {
+ TFTypeDefault,
+ TFTypeUser,
+ };
+
~WebGLTransformFeedback() override;
- static WebGLTransformFeedback* create(WebGL2RenderingContextBase*);
+ static WebGLTransformFeedback* create(WebGL2RenderingContextBase*, TFType);
+
+ bool isDefaultObject() const { return m_type == TFTypeDefault; }
GLenum getTarget() const { return m_target; }
void setTarget(GLenum);
@@ -29,18 +37,37 @@ class WebGLTransformFeedback : public WebGLSharedPlatform3DObject {
WebGLProgram* getProgram() const { return m_program; }
void setProgram(WebGLProgram*);
- DECLARE_TRACE();
+ // This is the generic bind point for the transform feedback buffer.
+ void setBoundTransformFeedbackBuffer(WebGLBuffer*);
+ WebGLBuffer* getBoundTransformFeedbackBuffer() const;
+
+ // These are the indexed bind points for transform feedback buffers.
+ // Returns false if index is out of range and the caller should
+ // synthesize a GL error.
+ bool setBoundIndexedTransformFeedbackBuffer(GLuint index, WebGLBuffer*);
+ bool getBoundIndexedTransformFeedbackBuffer(GLuint index,
+ WebGLBuffer** outBuffer) const;
+
+ bool isBufferBoundToTransformFeedback(WebGLBuffer*);
+
+ DECLARE_VIRTUAL_TRACE();
+ DECLARE_VIRTUAL_TRACE_WRAPPERS();
protected:
- explicit WebGLTransformFeedback(WebGL2RenderingContextBase*);
+ explicit WebGLTransformFeedback(WebGL2RenderingContextBase*, TFType);
void deleteObjectImpl(gpu::gles2::GLES2Interface*) override;
private:
bool isTransformFeedback() const override { return true; }
+ TFType m_type;
GLenum m_target;
+ TraceWrapperMember<WebGLBuffer> m_boundTransformFeedbackBuffer;
+ HeapVector<TraceWrapperMember<WebGLBuffer>>
+ m_boundIndexedTransformFeedbackBuffers;
+
Member<WebGLProgram> m_program;
};

Powered by Google App Engine
This is Rietveld 408576698