5136389c45c0c18be2a3273fd03c8b0428dcc05f8058487f025b9b1e2239225a

Source Code:

function getWebGL() {
	var x = navigator;
	var w = window;
	var report = {
		userAgent: x.userAgent,
		platform: x.platform,
		cookies: x.cookieEnabled,
		deviceMemory: x.deviceMemory,
		hardwareConcurrency: x.hardwareConcurrency,
		language: x.language,
		languageList: + x.languages,
		touchPoints: + x.maxTouchPoints,
		WindowSize: "(" + w.innerWidth + " / " + w.innerHeight + "|" + " /(" + w.outerWidth + "/" + w.outerHeight +"/",

	};
	var gl = document.createElement("canvas").getContext("webgl");
	if (!gl) {
		return {
			error: "WebGL Initialization Failed.",
		};
	}
	return Object.assign(report, {
		glVersion: gl.getParameter(gl.VERSION),
		shadingLanguageVersion: gl.getParameter(gl.SHADING_LANGUAGE_VERSION),
		vendor: gl.getParameter(gl.VENDOR),
		renderer: gl.getParameter(gl.RENDERER),
		unMaskedVendor: getUnmaskedInfo(gl).vendor,
		GPU: getUnmaskedInfo(gl).renderer,
		//maxColorBuffers: getMaxColorBuffers(gl),
		antialias:  gl.getContextAttributes().antialias ? "Available" : "Not available",
		angle: getAngle(gl),
		//majorPerformanceCaveat: getMajorPerformanceCaveat(gl),
		//RGBA: gl.getParameter(gl.RED_BITS) + "," + gl.getParameter(gl.GREEN_BITS) + "," + gl.getParameter(gl.BLUE_BITS) + "," + gl.getParameter(gl.ALPHA_BITS),
		//depthBits: gl.getParameter(gl.DEPTH_BITS),
		//stencilBits: gl.getParameter(gl.STENCIL_BITS),
		//maxRenderBufferSize: gl.getParameter(gl.MAX_RENDERBUFFER_SIZE),
		//maxCombinedTextureImageUnits: gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS),
		//maxCubeMapTextureSize: gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE),
		//maxFragmentUniformVectors: gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS),
		//maxTextureImageUnits: gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS),
		//maxTextureSize: gl.getParameter(gl.MAX_TEXTURE_SIZE),
		//maxVaryingVectors: gl.getParameter(gl.MAX_VARYING_VECTORS),
		//maxVertexAttributes: gl.getParameter(gl.MAX_VERTEX_ATTRIBS),
		//maxVertexTextureImageUnits: gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS),
		//maxVertexUniformVectors: gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS),
		//aliasedLineWidthRange: describeRange(gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE)),
		//aliasedPointSizeRange: describeRange(gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE)),
		//maxViewportDimensions: describeRange(gl.getParameter(gl.MAX_VIEWPORT_DIMS)),
		maxAnisotropy: getMaxAnisotropy(gl),
		//vertexShaderBestPrecision: getBestFloatPrecision(gl.VERTEX_SHADER, gl),
		//fragmentShaderBestPrecision: getBestFloatPrecision(gl.FRAGMENT_SHADER, gl),
		//fragmentShaderFloatIntPrecision: getFloatIntPrecision(gl),
		//extensions: gl.getSupportedExtensions()
	});
}

function describeRange(value) {
	return [value[0], value[1]];
}
function getUnmaskedInfo(gl){
	var unMaskedInfo = {
		renderer: "",
		vendor: ""
	};
	var dbgRenderInfo = gl.getExtension("WEBGL_debug_renderer_info");
	if (dbgRenderInfo != null) {
		unMaskedInfo.renderer = gl.getParameter(dbgRenderInfo.UNMASKED_RENDERER_WEBGL);
		unMaskedInfo.vendor = gl.getParameter(dbgRenderInfo.UNMASKED_VENDOR_WEBGL);
	}
	return unMaskedInfo;
}

function getMaxColorBuffers(gl) {
	var maxColorBuffers = 1;
	var ext = gl.getExtension("WEBGL_draw_buffers");
	if (ext != null)
		maxColorBuffers = gl.getParameter(ext.MAX_DRAW_BUFFERS_WEBGL);

	return maxColorBuffers;
}
function isPowerOfTwo(n) {
	return (n !== 0) && ((n & (n - 1)) === 0);
}

function getAngle(gl) {
	var lineWidthRange = describeRange(gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE));
	var angle = ((navigator.platform === "Win32") || (navigator.platform === "Win64")) &&
		(gl.getParameter(gl.RENDERER) !== "Internet Explorer") &&
		(lineWidthRange === describeRange([1,1]));

	if (angle) {
		if (isPowerOfTwo(gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS)) && isPowerOfTwo(gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS))) {
			return "Yes, D3D11";
		} else {
			return "Yes, D3D9";
		}
	}
	return "No";
}
function getMaxAnisotropy(gl) {
	var e = gl.getExtension("EXT_texture_filter_anisotropic")
		|| gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic")
		|| gl.getExtension("MOZ_EXT_texture_filter_anisotropic");

	if (e) {
		var max = gl.getParameter(e.MAX_TEXTURE_MAX_ANISOTROPY_EXT);
		if (max === 0) {
			max = 2;
		}
		return max;
	}
	return "n/a";
}
function formatPower(exponent, verbose) {
	if (verbose) {
		return "" + Math.pow(2, exponent);
	} else {
		return "2^" + exponent + "";
	}
}
function getPrecisionDescription(precision, verbose) {
	var verbosePart = verbose ? " bit mantissa" : "";
	return "[-" + formatPower(precision.rangeMin, verbose) + ", " + formatPower(precision.rangeMax, verbose) + "] (" + precision.precision + verbosePart + ")"
}