tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

WebGL2ContextState.cpp (3667B)


      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 "GLContext.h"
      8 #include "WebGL2Context.h"
      9 #include "WebGLBuffer.h"
     10 #include "WebGLContextUtils.h"
     11 #include "WebGLFramebuffer.h"
     12 #include "WebGLSampler.h"
     13 #include "WebGLTransformFeedback.h"
     14 #include "WebGLVertexArray.h"
     15 
     16 namespace mozilla {
     17 
     18 Maybe<double> WebGL2Context::GetParameter(GLenum pname) {
     19  const FuncScope funcScope(*this, "getParameter");
     20  // The following cases are handled in WebGLContext::GetParameter():
     21  //     case LOCAL_GL_MAX_COLOR_ATTACHMENTS:
     22  //     case LOCAL_GL_MAX_DRAW_BUFFERS:
     23  //     case LOCAL_GL_DRAW_BUFFERi:
     24 
     25  if (IsContextLost()) return Nothing();
     26 
     27  switch (pname) {
     28    /* GLboolean */
     29    case LOCAL_GL_RASTERIZER_DISCARD:
     30    case LOCAL_GL_SAMPLE_ALPHA_TO_COVERAGE:
     31    case LOCAL_GL_SAMPLE_COVERAGE: {
     32      realGLboolean b = 0;
     33      gl->fGetBooleanv(pname, &b);
     34      return Some(bool(b));
     35    }
     36 
     37    case LOCAL_GL_TRANSFORM_FEEDBACK_ACTIVE:
     38      return Some(mBoundTransformFeedback->mIsActive);
     39    case LOCAL_GL_TRANSFORM_FEEDBACK_PAUSED:
     40      return Some(mBoundTransformFeedback->mIsPaused);
     41 
     42    /* GLenum */
     43    case LOCAL_GL_READ_BUFFER: {
     44      if (!mBoundReadFramebuffer) return Some(mDefaultFB_ReadBuffer);
     45 
     46      if (!mBoundReadFramebuffer->ColorReadBuffer()) return Some(LOCAL_GL_NONE);
     47 
     48      return Some(mBoundReadFramebuffer->ColorReadBuffer()->mAttachmentPoint);
     49    }
     50 
     51    case LOCAL_GL_FRAGMENT_SHADER_DERIVATIVE_HINT:
     52      /* fall through */
     53 
     54    /* GLint */
     55    case LOCAL_GL_MAX_COMBINED_UNIFORM_BLOCKS:
     56    case LOCAL_GL_MAX_ELEMENTS_INDICES:
     57    case LOCAL_GL_MAX_ELEMENTS_VERTICES:
     58    case LOCAL_GL_MAX_FRAGMENT_INPUT_COMPONENTS:
     59    case LOCAL_GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
     60    case LOCAL_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
     61    case LOCAL_GL_MAX_PROGRAM_TEXEL_OFFSET:
     62    case LOCAL_GL_MAX_SAMPLES:
     63    case LOCAL_GL_MAX_TEXTURE_LOD_BIAS:
     64    case LOCAL_GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
     65    case LOCAL_GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
     66    case LOCAL_GL_MAX_VERTEX_OUTPUT_COMPONENTS:
     67    case LOCAL_GL_MAX_VERTEX_UNIFORM_BLOCKS:
     68    case LOCAL_GL_MAX_VERTEX_UNIFORM_COMPONENTS:
     69    case LOCAL_GL_MIN_PROGRAM_TEXEL_OFFSET: {
     70      GLint val;
     71      gl->fGetIntegerv(pname, &val);
     72      return Some(val);
     73    }
     74 
     75    case LOCAL_GL_MAX_VARYING_COMPONENTS: {
     76      // On OS X Core Profile this is buggy.  The spec says that the
     77      // value is 4 * GL_MAX_VARYING_VECTORS
     78      GLint val;
     79      gl->fGetIntegerv(LOCAL_GL_MAX_VARYING_VECTORS, &val);
     80      return Some(4 * val);
     81    }
     82 
     83    case LOCAL_GL_MAX_ELEMENT_INDEX:
     84      // GL_MAX_ELEMENT_INDEX becomes available in GL 4.3 or via ES3
     85      // compatibility
     86      if (!gl->IsSupported(gl::GLFeature::ES3_compatibility))
     87        return Some(UINT32_MAX);
     88 
     89      /*** fall through to fGetInteger64v ***/
     90      [[fallthrough]];
     91 
     92    case LOCAL_GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
     93    case LOCAL_GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
     94    case LOCAL_GL_MAX_UNIFORM_BLOCK_SIZE: {
     95      GLint64 val;
     96      gl->fGetInteger64v(pname, &val);
     97      return Some(static_cast<double>(val));
     98    }
     99 
    100    /* GLuint64 */
    101    case LOCAL_GL_MAX_SERVER_WAIT_TIMEOUT: {
    102      GLuint64 val;
    103      gl->fGetInteger64v(pname, (GLint64*)&val);
    104      return Some(static_cast<double>(val));
    105    }
    106 
    107    default:
    108      return WebGLContext::GetParameter(pname);
    109  }
    110 }
    111 
    112 }  // namespace mozilla