JS::Value WebGLProgram::GetProgramParameter(GLenum pname) const { gl::GLContext* gl = mContext->gl; gl->MakeCurrent(); if (mContext->IsWebGL2()) { switch (pname) { case LOCAL_GL_ACTIVE_UNIFORM_BLOCKS: return JS::Int32Value(GetProgramiv(gl, mGLName, pname)); case LOCAL_GL_TRANSFORM_FEEDBACK_VARYINGS: return JS::Int32Value(mNextLink_TransformFeedbackVaryings.size()); case LOCAL_GL_TRANSFORM_FEEDBACK_BUFFER_MODE: return JS::Int32Value(mNextLink_TransformFeedbackBufferMode); } } switch (pname) { case LOCAL_GL_ATTACHED_SHADERS: case LOCAL_GL_ACTIVE_UNIFORMS: case LOCAL_GL_ACTIVE_ATTRIBUTES: return JS::Int32Value(GetProgramiv(gl, mGLName, pname)); case LOCAL_GL_DELETE_STATUS: return JS::BooleanValue(IsDeleteRequested()); case LOCAL_GL_LINK_STATUS: return JS::BooleanValue(IsLinked()); case LOCAL_GL_VALIDATE_STATUS: #ifdef XP_MACOSX // See comment in ValidateProgram. if (gl->WorkAroundDriverBugs()) return JS::BooleanValue(true); #endif return JS::BooleanValue(bool(GetProgramiv(gl, mGLName, pname))); default: mContext->ErrorInvalidEnumInfo("getProgramParameter: `pname`", pname); return JS::NullValue(); } }
JS::Value WebGLShader::GetShaderParameter(GLenum pname) const { switch (pname) { case LOCAL_GL_SHADER_TYPE: return JS::NumberValue(mType); case LOCAL_GL_DELETE_STATUS: return JS::BooleanValue(IsDeleteRequested()); case LOCAL_GL_COMPILE_STATUS: return JS::BooleanValue(mCompilationSuccessful); default: mContext->ErrorInvalidEnumInfo("getShaderParameter: `pname`", pname); return JS::NullValue(); } }