LCOV - code coverage report
Current view: top level - dom/canvas - WebGL2ContextState.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 51 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
       3             : /* This Source Code Form is subject to the terms of the Mozilla Public
       4             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       5             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       6             : 
       7             : #include "WebGL2Context.h"
       8             : 
       9             : #include "GLContext.h"
      10             : #include "WebGLBuffer.h"
      11             : #include "WebGLContextUtils.h"
      12             : #include "WebGLFramebuffer.h"
      13             : #include "WebGLSampler.h"
      14             : #include "WebGLTransformFeedback.h"
      15             : #include "WebGLVertexArray.h"
      16             : 
      17             : namespace mozilla {
      18             : 
      19             : JS::Value
      20           0 : WebGL2Context::GetParameter(JSContext* cx, GLenum pname, ErrorResult& rv)
      21             : {
      22             :   // The following cases are handled in WebGLContext::GetParameter():
      23             :   //     case LOCAL_GL_MAX_COLOR_ATTACHMENTS:
      24             :   //     case LOCAL_GL_MAX_DRAW_BUFFERS:
      25             :   //     case LOCAL_GL_DRAW_BUFFERi:
      26             : 
      27           0 :   if (IsContextLost())
      28           0 :     return JS::NullValue();
      29             : 
      30           0 :   MakeContextCurrent();
      31             : 
      32           0 :   switch (pname) {
      33             :     /* GLboolean */
      34             :     case LOCAL_GL_RASTERIZER_DISCARD:
      35             :     case LOCAL_GL_SAMPLE_ALPHA_TO_COVERAGE:
      36             :     case LOCAL_GL_SAMPLE_COVERAGE: {
      37           0 :       realGLboolean b = 0;
      38           0 :       gl->fGetBooleanv(pname, &b);
      39           0 :       return JS::BooleanValue(bool(b));
      40             :     }
      41             : 
      42             :     case LOCAL_GL_TRANSFORM_FEEDBACK_ACTIVE:
      43           0 :       return JS::BooleanValue(mBoundTransformFeedback->mIsActive);
      44             :     case LOCAL_GL_TRANSFORM_FEEDBACK_PAUSED:
      45           0 :       return JS::BooleanValue(mBoundTransformFeedback->mIsPaused);
      46             : 
      47             :     /* GLenum */
      48             :     case LOCAL_GL_READ_BUFFER: {
      49           0 :       if (!mBoundReadFramebuffer)
      50           0 :         return JS::Int32Value(gl->Screen()->GetReadBufferMode());
      51             : 
      52           0 :       if (!mBoundReadFramebuffer->ColorReadBuffer())
      53           0 :         return JS::Int32Value(LOCAL_GL_NONE);
      54             : 
      55           0 :       return JS::Int32Value(mBoundReadFramebuffer->ColorReadBuffer()->mAttachmentPoint);
      56             :     }
      57             : 
      58             :     case LOCAL_GL_FRAGMENT_SHADER_DERIVATIVE_HINT:
      59             :       /* fall through */
      60             : 
      61             :     /* GLint */
      62             :     case LOCAL_GL_MAX_COMBINED_UNIFORM_BLOCKS:
      63             :     case LOCAL_GL_MAX_ELEMENTS_INDICES:
      64             :     case LOCAL_GL_MAX_ELEMENTS_VERTICES:
      65             :     case LOCAL_GL_MAX_FRAGMENT_INPUT_COMPONENTS:
      66             :     case LOCAL_GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
      67             :     case LOCAL_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
      68             :     case LOCAL_GL_MAX_PROGRAM_TEXEL_OFFSET:
      69             :     case LOCAL_GL_MAX_SAMPLES:
      70             :     case LOCAL_GL_MAX_TEXTURE_LOD_BIAS:
      71             :     case LOCAL_GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
      72             :     case LOCAL_GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
      73             :     case LOCAL_GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
      74             :     case LOCAL_GL_MAX_UNIFORM_BUFFER_BINDINGS:
      75             :     case LOCAL_GL_MAX_VERTEX_OUTPUT_COMPONENTS:
      76             :     case LOCAL_GL_MAX_VERTEX_UNIFORM_BLOCKS:
      77             :     case LOCAL_GL_MAX_VERTEX_UNIFORM_COMPONENTS:
      78             :     case LOCAL_GL_MIN_PROGRAM_TEXEL_OFFSET:
      79             :     case LOCAL_GL_PACK_ROW_LENGTH:
      80             :     case LOCAL_GL_PACK_SKIP_PIXELS:
      81             :     case LOCAL_GL_PACK_SKIP_ROWS:
      82             :     case LOCAL_GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
      83             :     case LOCAL_GL_UNPACK_IMAGE_HEIGHT:
      84             :     case LOCAL_GL_UNPACK_ROW_LENGTH: {
      85             :       GLint val;
      86           0 :       gl->fGetIntegerv(pname, &val);
      87           0 :       return JS::Int32Value(val);
      88             :     }
      89             : 
      90             :     case LOCAL_GL_UNPACK_SKIP_IMAGES:
      91           0 :       return JS::Int32Value(mPixelStore_UnpackSkipImages);
      92             : 
      93             :     case LOCAL_GL_UNPACK_SKIP_PIXELS:
      94           0 :       return JS::Int32Value(mPixelStore_UnpackSkipPixels);
      95             : 
      96             :     case LOCAL_GL_UNPACK_SKIP_ROWS:
      97           0 :       return JS::Int32Value(mPixelStore_UnpackSkipRows);
      98             : 
      99             :     case LOCAL_GL_MAX_3D_TEXTURE_SIZE:
     100           0 :       return JS::Int32Value(mImplMax3DTextureSize);
     101             : 
     102             :     case LOCAL_GL_MAX_ARRAY_TEXTURE_LAYERS:
     103           0 :       return JS::Int32Value(mImplMaxArrayTextureLayers);
     104             : 
     105             :     case LOCAL_GL_MAX_VARYING_COMPONENTS: {
     106             :       // On OS X Core Profile this is buggy.  The spec says that the
     107             :       // value is 4 * GL_MAX_VARYING_VECTORS
     108             :       GLint val;
     109           0 :       gl->fGetIntegerv(LOCAL_GL_MAX_VARYING_VECTORS, &val);
     110           0 :       return JS::Int32Value(4*val);
     111             :     }
     112             : 
     113             :     /* GLint64 */
     114             :     case LOCAL_GL_MAX_CLIENT_WAIT_TIMEOUT_WEBGL:
     115           0 :       return JS::NumberValue(kMaxClientWaitSyncTimeoutNS);
     116             : 
     117             :     case LOCAL_GL_MAX_ELEMENT_INDEX:
     118             :       // GL_MAX_ELEMENT_INDEX becomes available in GL 4.3 or via ES3
     119             :       // compatibility
     120           0 :       if (!gl->IsSupported(gl::GLFeature::ES3_compatibility))
     121           0 :         return JS::NumberValue(UINT32_MAX);
     122             : 
     123             :       /*** fall through to fGetInteger64v ***/
     124             :       MOZ_FALLTHROUGH;
     125             : 
     126             :     case LOCAL_GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
     127             :     case LOCAL_GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
     128             :     case LOCAL_GL_MAX_UNIFORM_BLOCK_SIZE: {
     129             :       GLint64 val;
     130           0 :       gl->fGetInteger64v(pname, &val);
     131           0 :       return JS::DoubleValue(static_cast<double>(val));
     132             :     }
     133             : 
     134             : 
     135             :     /* GLuint64 */
     136             :     case LOCAL_GL_MAX_SERVER_WAIT_TIMEOUT: {
     137             :       GLuint64 val;
     138           0 :       gl->fGetInteger64v(pname, (GLint64*) &val);
     139           0 :       return JS::DoubleValue(static_cast<double>(val));
     140             :     }
     141             : 
     142             :     case LOCAL_GL_COPY_READ_BUFFER_BINDING:
     143           0 :       return WebGLObjectAsJSValue(cx, mBoundCopyReadBuffer.get(), rv);
     144             : 
     145             :     case LOCAL_GL_COPY_WRITE_BUFFER_BINDING:
     146           0 :       return WebGLObjectAsJSValue(cx, mBoundCopyWriteBuffer.get(), rv);
     147             : 
     148             :     case LOCAL_GL_PIXEL_PACK_BUFFER_BINDING:
     149           0 :       return WebGLObjectAsJSValue(cx, mBoundPixelPackBuffer.get(), rv);
     150             : 
     151             :     case LOCAL_GL_PIXEL_UNPACK_BUFFER_BINDING:
     152           0 :       return WebGLObjectAsJSValue(cx, mBoundPixelUnpackBuffer.get(), rv);
     153             : 
     154             :     case LOCAL_GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
     155             :       {
     156           0 :         const auto& tf = mBoundTransformFeedback;
     157           0 :         return WebGLObjectAsJSValue(cx, tf->mGenericBufferBinding.get(), rv);
     158             :       }
     159             : 
     160             :     case LOCAL_GL_UNIFORM_BUFFER_BINDING:
     161           0 :       return WebGLObjectAsJSValue(cx, mBoundUniformBuffer.get(), rv);
     162             : 
     163             :     // DRAW_FRAMEBUFFER_BINDING is the same as FRAMEBUFFER_BINDING.
     164             :     case LOCAL_GL_READ_FRAMEBUFFER_BINDING:
     165           0 :       return WebGLObjectAsJSValue(cx, mBoundReadFramebuffer.get(), rv);
     166             : 
     167             :     case LOCAL_GL_SAMPLER_BINDING:
     168           0 :       return WebGLObjectAsJSValue(cx, mBoundSamplers[mActiveTexture].get(), rv);
     169             : 
     170             :     case LOCAL_GL_TEXTURE_BINDING_2D_ARRAY:
     171           0 :       return WebGLObjectAsJSValue(cx, mBound2DArrayTextures[mActiveTexture].get(), rv);
     172             : 
     173             :     case LOCAL_GL_TEXTURE_BINDING_3D:
     174           0 :       return WebGLObjectAsJSValue(cx, mBound3DTextures[mActiveTexture].get(), rv);
     175             : 
     176             :     case LOCAL_GL_TRANSFORM_FEEDBACK_BINDING:
     177             :       {
     178           0 :         const WebGLTransformFeedback* tf = mBoundTransformFeedback;
     179           0 :         if (tf == mDefaultTransformFeedback) {
     180           0 :           tf = nullptr;
     181             :         }
     182           0 :         return WebGLObjectAsJSValue(cx, tf, rv);
     183             :       }
     184             : 
     185             :     case LOCAL_GL_VERTEX_ARRAY_BINDING: {
     186             :       WebGLVertexArray* vao =
     187           0 :         (mBoundVertexArray != mDefaultVertexArray) ? mBoundVertexArray.get() : nullptr;
     188           0 :       return WebGLObjectAsJSValue(cx, vao, rv);
     189             :     }
     190             : 
     191             :     case LOCAL_GL_VERSION:
     192           0 :       return StringValue(cx, "WebGL 2.0", rv);
     193             : 
     194             :     case LOCAL_GL_SHADING_LANGUAGE_VERSION:
     195           0 :       return StringValue(cx, "WebGL GLSL ES 3.00", rv);
     196             : 
     197             :     default:
     198           0 :       return WebGLContext::GetParameter(cx, pname, rv);
     199             :   }
     200             : }
     201             : 
     202             : } // namespace mozilla

Generated by: LCOV version 1.13