forked from mirrors/gecko-dev
		
	 91ab854fc8
			
		
	
	
		91ab854fc8
		
	
	
	
	
		
			
			Our goal here is to just be fast enough that we don't need to cache. Differential Revision: https://phabricator.services.mozilla.com/D64215 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			2.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/. */
 | |
| 
 | |
| #include "WebGLVertexArray.h"
 | |
| 
 | |
| #include "GLContext.h"
 | |
| #include "mozilla/dom/WebGLRenderingContextBinding.h"
 | |
| #include "WebGLBuffer.h"
 | |
| #include "WebGLContext.h"
 | |
| #include "WebGLVertexArrayGL.h"
 | |
| #include "WebGLVertexArrayFake.h"
 | |
| 
 | |
| namespace mozilla {
 | |
| 
 | |
| WebGLVertexArray* WebGLVertexArray::Create(WebGLContext* webgl) {
 | |
|   if (webgl->gl->IsSupported(gl::GLFeature::vertex_array_object)) {
 | |
|     return new WebGLVertexArrayGL(webgl);
 | |
|   }
 | |
|   return new WebGLVertexArrayFake(webgl);
 | |
| }
 | |
| 
 | |
| WebGLVertexArray::WebGLVertexArray(WebGLContext* const webgl)
 | |
|     : WebGLContextBoundObject(webgl) {
 | |
|   const webgl::VertAttribPointerDesc defaultDesc;
 | |
|   const webgl::VertAttribPointerCalculated defaultCalc;
 | |
|   for (const auto i : IntegerRange(mContext->MaxVertexAttribs())) {
 | |
|     AttribPointer(i, nullptr, defaultDesc, defaultCalc);
 | |
|   }
 | |
| }
 | |
| 
 | |
| WebGLVertexArray::~WebGLVertexArray() = default;
 | |
| 
 | |
| Maybe<double> WebGLVertexArray::GetVertexAttrib(const uint32_t index,
 | |
|                                                 const GLenum pname) const {
 | |
|   const auto& binding = mBindings[index];
 | |
|   const auto& desc = mDescs[index];
 | |
| 
 | |
|   switch (pname) {
 | |
|     case LOCAL_GL_VERTEX_ATTRIB_ARRAY_STRIDE:
 | |
|       return Some(desc.byteStrideOrZero);
 | |
| 
 | |
|     case LOCAL_GL_VERTEX_ATTRIB_ARRAY_SIZE:
 | |
|       return Some(desc.channels);
 | |
| 
 | |
|     case LOCAL_GL_VERTEX_ATTRIB_ARRAY_TYPE:
 | |
|       return Some(desc.type);
 | |
| 
 | |
|     case LOCAL_GL_VERTEX_ATTRIB_ARRAY_INTEGER:
 | |
|       return Some(desc.intFunc);
 | |
| 
 | |
|     case LOCAL_GL_VERTEX_ATTRIB_ARRAY_DIVISOR:
 | |
|       return Some(binding.layout.divisor);
 | |
| 
 | |
|     case LOCAL_GL_VERTEX_ATTRIB_ARRAY_ENABLED:
 | |
|       return Some(binding.layout.isArray);
 | |
| 
 | |
|     case LOCAL_GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
 | |
|       return Some(desc.normalized);
 | |
| 
 | |
|     case LOCAL_GL_VERTEX_ATTRIB_ARRAY_POINTER:
 | |
|       return Some(binding.layout.byteOffset);
 | |
| 
 | |
|     default:
 | |
|       return {};
 | |
|   }
 | |
| }
 | |
| 
 | |
| }  // namespace mozilla
 |