forked from mirrors/gecko-dev
		
	 35f892e782
			
		
	
	
		35f892e782
		
	
	
	
	
		
			
			* Use clearer pref names. * Default (and only support) IPDL dispatching. * Make DispatchCommands async-only. * Sync ipdl command per sync webgl entrypoint. * Eat the boilerplate cost, since there's not too many. * Run SerializedSize off same path as Serialize. * All shmem uploads go through normal DispatchCommands. * Defer pruning of dead code for now so we can iterate quickly. * Use Read/Write(begin,end) instead of (begin,size). * This would have prevented a bug where we read/wrote N*sizeof(T)*sizeof(T). Differential Revision: https://phabricator.services.mozilla.com/D81495
		
			
				
	
	
		
			156 lines
		
	
	
	
		
			6.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
	
		
			6.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #ifndef WEBGL2CONTEXT_H_
 | |
| #define WEBGL2CONTEXT_H_
 | |
| 
 | |
| #include "WebGLContext.h"
 | |
| 
 | |
| namespace mozilla {
 | |
| 
 | |
| class ErrorResult;
 | |
| class HostWebGLContext;
 | |
| class WebGLSampler;
 | |
| class WebGLSync;
 | |
| class WebGLTransformFeedback;
 | |
| class WebGLVertexArrayObject;
 | |
| namespace dom {
 | |
| class OwningUnsignedLongOrUint32ArrayOrBoolean;
 | |
| class OwningWebGLBufferOrLongLong;
 | |
| }  // namespace dom
 | |
| 
 | |
| class WebGL2Context final : public WebGLContext {
 | |
|   friend class WebGLContext;
 | |
| 
 | |
|  public:
 | |
|   WebGL2Context(HostWebGLContext& host, const webgl::InitContextDesc& desc)
 | |
|       : WebGLContext(host, desc) {}
 | |
| 
 | |
|   virtual bool IsWebGL2() const override { return true; }
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Buffer objects - WebGL2ContextBuffers.cpp
 | |
| 
 | |
|   void CopyBufferSubData(GLenum readTarget, GLenum writeTarget,
 | |
|                          uint64_t readOffset, uint64_t writeOffset,
 | |
|                          uint64_t size) const;
 | |
|   bool GetBufferSubData(GLenum target, uint64_t srcByteOffset,
 | |
|                         const Range<uint8_t>& dest) const;
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Framebuffer objects - WebGL2ContextFramebuffers.cpp
 | |
| 
 | |
|   void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
 | |
|                        GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
 | |
|                        GLbitfield mask, GLenum filter);
 | |
| 
 | |
|   void InvalidateFramebuffer(GLenum target,
 | |
|                              const Range<const GLenum>& attachments);
 | |
|   void InvalidateSubFramebuffer(GLenum target,
 | |
|                                 const Range<const GLenum>& attachments, GLint x,
 | |
|                                 GLint y, GLsizei width, GLsizei height);
 | |
|   void ReadBuffer(GLenum mode);
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Renderbuffer objects - WebGL2ContextRenderbuffers.cpp
 | |
| 
 | |
|   Maybe<std::vector<int32_t>> GetInternalformatParameter(GLenum target,
 | |
|                                                          GLenum internalformat,
 | |
|                                                          GLenum pname) const;
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Texture objects - WebGL2ContextTextures.cpp
 | |
| 
 | |
|   // GL 3.0 & ES 3.0
 | |
|   void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
 | |
|   void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Writing to the drawing buffer
 | |
| 
 | |
|   /* Implemented in WebGLContext
 | |
|   void VertexAttribDivisor(GLuint index, GLuint divisor);
 | |
|   void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count,
 | |
|                            GLsizei instanceCount);
 | |
|   void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type,
 | |
|                              WebGLintptr offset, GLsizei instanceCount);
 | |
|   */
 | |
| 
 | |
|   // ------------------------------------------------------------------------
 | |
|   // Multiple Render Targets - WebGL2ContextMRTs.cpp
 | |
| 
 | |
|  private:
 | |
|   bool ValidateClearBuffer(GLenum buffer, GLint drawBuffer,
 | |
|                            webgl::AttribBaseType funcType);
 | |
| 
 | |
|  public:
 | |
|   void ClearBufferfi(GLenum buffer, GLint drawBuffer, GLfloat depth,
 | |
|                      GLint stencil);
 | |
|   void ClearBufferTv(GLenum buffer, GLint drawBuffer,
 | |
|                      const webgl::TypedQuad& data);
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Sampler Objects - WebGL2ContextSamplers.cpp
 | |
| 
 | |
|   RefPtr<WebGLSampler> CreateSampler();
 | |
|   void BindSampler(GLuint unit, WebGLSampler* sampler);
 | |
|   void SamplerParameteri(WebGLSampler& sampler, GLenum pname, GLint param);
 | |
|   void SamplerParameterf(WebGLSampler& sampler, GLenum pname, GLfloat param);
 | |
|   Maybe<double> GetSamplerParameter(const WebGLSampler& sampler,
 | |
|                                     GLenum pname) const;
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Sync objects - WebGL2ContextSync.cpp
 | |
| 
 | |
|   const GLuint64 kMaxClientWaitSyncTimeoutNS =
 | |
|       1000 * 1000 * 1000;  // 1000ms in ns.
 | |
| 
 | |
|   RefPtr<WebGLSync> FenceSync(GLenum condition, GLbitfield flags);
 | |
|   GLenum ClientWaitSync(const WebGLSync& sync, GLbitfield flags,
 | |
|                         GLuint64 timeout);
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Transform Feedback - WebGL2ContextTransformFeedback.cpp
 | |
| 
 | |
|   RefPtr<WebGLTransformFeedback> CreateTransformFeedback();
 | |
|   void BindTransformFeedback(WebGLTransformFeedback* tf);
 | |
|   void BeginTransformFeedback(GLenum primitiveMode);
 | |
|   void EndTransformFeedback();
 | |
|   void PauseTransformFeedback();
 | |
|   void ResumeTransformFeedback();
 | |
|   void TransformFeedbackVaryings(WebGLProgram& program,
 | |
|                                  const std::vector<std::string>& varyings,
 | |
|                                  GLenum bufferMode) const;
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // Uniform Buffer Objects and Transform Feedback Buffers -
 | |
|   // WebGL2ContextUniforms.cpp
 | |
|   // TODO(djg): Implemented in WebGLContext
 | |
|   /*
 | |
|       void BindBufferBase(GLenum target, GLuint index, WebGLBuffer* buffer);
 | |
|       void BindBufferRange(GLenum target, GLuint index, WebGLBuffer* buffer,
 | |
|                            WebGLintptr offset, WebGLsizeiptr size);
 | |
|   */
 | |
|   Maybe<double> GetParameter(GLenum pname) override;
 | |
|   Maybe<double> GetIndexedParameter(GLenum pname, uint32_t index) const;
 | |
| 
 | |
|   // Make the inline version from the superclass visible here.
 | |
|   using WebGLContext::GetParameter;
 | |
| 
 | |
|   void UniformBlockBinding(WebGLProgram& program, GLuint uniformBlockIndex,
 | |
|                            GLuint uniformBlockBinding);
 | |
| 
 | |
|  private:
 | |
|   virtual UniquePtr<webgl::FormatUsageAuthority> CreateFormatUsage(
 | |
|       gl::GLContext* gl) const override;
 | |
| 
 | |
|   virtual bool IsTexParamValid(GLenum pname) const override;
 | |
| 
 | |
|   void UpdateBoundQuery(GLenum target, WebGLQuery* query);
 | |
| };
 | |
| 
 | |
| }  // namespace mozilla
 | |
| 
 | |
| #endif
 |