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 + ")"
}