Created
May 3, 2016 08:22
-
-
Save subzey/dd76e5999674841fe7e2937827bdc69e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict'; | |
| const propNames = [ | |
| "canvas", | |
| "drawingBufferWidth", | |
| "drawingBufferHeight", | |
| "activeTexture", | |
| "attachShader", | |
| "bindAttribLocation", | |
| "bindBuffer", | |
| "bindFramebuffer", | |
| "bindRenderbuffer", | |
| "bindTexture", | |
| "blendColor", | |
| "blendEquation", | |
| "blendEquationSeparate", | |
| "blendFunc", | |
| "blendFuncSeparate", | |
| "bufferData", | |
| "bufferSubData", | |
| "checkFramebufferStatus", | |
| "clear", | |
| "clearColor", | |
| "clearDepth", | |
| "clearStencil", | |
| "colorMask", | |
| "compileShader", | |
| "compressedTexImage2D", | |
| "compressedTexSubImage2D", | |
| "copyTexImage2D", | |
| "copyTexSubImage2D", | |
| "createBuffer", | |
| "createFramebuffer", | |
| "createProgram", | |
| "createRenderbuffer", | |
| "createShader", | |
| "createTexture", | |
| "cullFace", | |
| "deleteBuffer", | |
| "deleteFramebuffer", | |
| "deleteProgram", | |
| "deleteRenderbuffer", | |
| "deleteShader", | |
| "deleteTexture", | |
| "depthFunc", | |
| "depthMask", | |
| "depthRange", | |
| "detachShader", | |
| "disable", | |
| "disableVertexAttribArray", | |
| "drawArrays", | |
| "drawElements", | |
| "enable", | |
| "enableVertexAttribArray", | |
| "finish", | |
| "flush", | |
| "framebufferRenderbuffer", | |
| "framebufferTexture2D", | |
| "frontFace", | |
| "generateMipmap", | |
| "getActiveAttrib", | |
| "getActiveUniform", | |
| "getAttachedShaders", | |
| "getAttribLocation", | |
| "getBufferParameter", | |
| "getContextAttributes", | |
| "getError", | |
| "getExtension", | |
| "getFramebufferAttachmentParameter", | |
| "getParameter", | |
| "getProgramParameter", | |
| "getProgramInfoLog", | |
| "getRenderbufferParameter", | |
| "getShaderParameter", | |
| "getShaderInfoLog", | |
| "getShaderPrecisionFormat", | |
| "getShaderSource", | |
| "getSupportedExtensions", | |
| "getTexParameter", | |
| "getUniform", | |
| "getUniformLocation", | |
| "getVertexAttrib", | |
| "getVertexAttribOffset", | |
| "hint", | |
| "isBuffer", | |
| "isContextLost", | |
| "isEnabled", | |
| "isFramebuffer", | |
| "isProgram", | |
| "isRenderbuffer", | |
| "isShader", | |
| "isTexture", | |
| "lineWidth", | |
| "linkProgram", | |
| "pixelStorei", | |
| "polygonOffset", | |
| "readPixels", | |
| "renderbufferStorage", | |
| "sampleCoverage", | |
| "scissor", | |
| "shaderSource", | |
| "stencilFunc", | |
| "stencilFuncSeparate", | |
| "stencilMask", | |
| "stencilMaskSeparate", | |
| "stencilOp", | |
| "stencilOpSeparate", | |
| "texParameterf", | |
| "texParameteri", | |
| "texImage2D", | |
| "texSubImage2D", | |
| "uniform1f", | |
| "uniform1fv", | |
| "uniform1i", | |
| "uniform1iv", | |
| "uniform2f", | |
| "uniform2fv", | |
| "uniform2i", | |
| "uniform2iv", | |
| "uniform3f", | |
| "uniform3fv", | |
| "uniform3i", | |
| "uniform3iv", | |
| "uniform4f", | |
| "uniform4fv", | |
| "uniform4i", | |
| "uniform4iv", | |
| "uniformMatrix2fv", | |
| "uniformMatrix3fv", | |
| "uniformMatrix4fv", | |
| "useProgram", | |
| "validateProgram", | |
| "vertexAttrib1f", | |
| "vertexAttrib1fv", | |
| "vertexAttrib2f", | |
| "vertexAttrib2fv", | |
| "vertexAttrib3f", | |
| "vertexAttrib3fv", | |
| "vertexAttrib4f", | |
| "vertexAttrib4fv", | |
| "vertexAttribPointer", | |
| "viewport", | |
| "DEPTH_BUFFER_BIT", | |
| "STENCIL_BUFFER_BIT", | |
| "COLOR_BUFFER_BIT", | |
| "POINTS", | |
| "LINES", | |
| "LINE_LOOP", | |
| "LINE_STRIP", | |
| "TRIANGLES", | |
| "TRIANGLE_STRIP", | |
| "TRIANGLE_FAN", | |
| "ZERO", | |
| "ONE", | |
| "SRC_COLOR", | |
| "ONE_MINUS_SRC_COLOR", | |
| "SRC_ALPHA", | |
| "ONE_MINUS_SRC_ALPHA", | |
| "DST_ALPHA", | |
| "ONE_MINUS_DST_ALPHA", | |
| "DST_COLOR", | |
| "ONE_MINUS_DST_COLOR", | |
| "SRC_ALPHA_SATURATE", | |
| "FUNC_ADD", | |
| "BLEND_EQUATION", | |
| "BLEND_EQUATION_RGB", | |
| "BLEND_EQUATION_ALPHA", | |
| "FUNC_SUBTRACT", | |
| "FUNC_REVERSE_SUBTRACT", | |
| "BLEND_DST_RGB", | |
| "BLEND_SRC_RGB", | |
| "BLEND_DST_ALPHA", | |
| "BLEND_SRC_ALPHA", | |
| "CONSTANT_COLOR", | |
| "ONE_MINUS_CONSTANT_COLOR", | |
| "CONSTANT_ALPHA", | |
| "ONE_MINUS_CONSTANT_ALPHA", | |
| "BLEND_COLOR", | |
| "ARRAY_BUFFER", | |
| "ELEMENT_ARRAY_BUFFER", | |
| "ARRAY_BUFFER_BINDING", | |
| "ELEMENT_ARRAY_BUFFER_BINDING", | |
| "STREAM_DRAW", | |
| "STATIC_DRAW", | |
| "DYNAMIC_DRAW", | |
| "BUFFER_SIZE", | |
| "BUFFER_USAGE", | |
| "CURRENT_VERTEX_ATTRIB", | |
| "FRONT", | |
| "BACK", | |
| "FRONT_AND_BACK", | |
| "TEXTURE_2D", | |
| "CULL_FACE", | |
| "BLEND", | |
| "DITHER", | |
| "STENCIL_TEST", | |
| "DEPTH_TEST", | |
| "SCISSOR_TEST", | |
| "POLYGON_OFFSET_FILL", | |
| "SAMPLE_ALPHA_TO_COVERAGE", | |
| "SAMPLE_COVERAGE", | |
| "NO_ERROR", | |
| "INVALID_ENUM", | |
| "INVALID_VALUE", | |
| "INVALID_OPERATION", | |
| "OUT_OF_MEMORY", | |
| "CW", | |
| "CCW", | |
| "LINE_WIDTH", | |
| "ALIASED_POINT_SIZE_RANGE", | |
| "ALIASED_LINE_WIDTH_RANGE", | |
| "CULL_FACE_MODE", | |
| "FRONT_FACE", | |
| "DEPTH_RANGE", | |
| "DEPTH_WRITEMASK", | |
| "DEPTH_CLEAR_VALUE", | |
| "DEPTH_FUNC", | |
| "STENCIL_CLEAR_VALUE", | |
| "STENCIL_FUNC", | |
| "STENCIL_FAIL", | |
| "STENCIL_PASS_DEPTH_FAIL", | |
| "STENCIL_PASS_DEPTH_PASS", | |
| "STENCIL_REF", | |
| "STENCIL_VALUE_MASK", | |
| "STENCIL_WRITEMASK", | |
| "STENCIL_BACK_FUNC", | |
| "STENCIL_BACK_FAIL", | |
| "STENCIL_BACK_PASS_DEPTH_FAIL", | |
| "STENCIL_BACK_PASS_DEPTH_PASS", | |
| "STENCIL_BACK_REF", | |
| "STENCIL_BACK_VALUE_MASK", | |
| "STENCIL_BACK_WRITEMASK", | |
| "VIEWPORT", | |
| "SCISSOR_BOX", | |
| "COLOR_CLEAR_VALUE", | |
| "COLOR_WRITEMASK", | |
| "UNPACK_ALIGNMENT", | |
| "PACK_ALIGNMENT", | |
| "MAX_TEXTURE_SIZE", | |
| "MAX_VIEWPORT_DIMS", | |
| "SUBPIXEL_BITS", | |
| "RED_BITS", | |
| "GREEN_BITS", | |
| "BLUE_BITS", | |
| "ALPHA_BITS", | |
| "DEPTH_BITS", | |
| "STENCIL_BITS", | |
| "POLYGON_OFFSET_UNITS", | |
| "POLYGON_OFFSET_FACTOR", | |
| "TEXTURE_BINDING_2D", | |
| "SAMPLE_BUFFERS", | |
| "SAMPLES", | |
| "SAMPLE_COVERAGE_VALUE", | |
| "SAMPLE_COVERAGE_INVERT", | |
| "COMPRESSED_TEXTURE_FORMATS", | |
| "DONT_CARE", | |
| "FASTEST", | |
| "NICEST", | |
| "GENERATE_MIPMAP_HINT", | |
| "BYTE", | |
| "UNSIGNED_BYTE", | |
| "SHORT", | |
| "UNSIGNED_SHORT", | |
| "INT", | |
| "UNSIGNED_INT", | |
| "FLOAT", | |
| "DEPTH_COMPONENT", | |
| "ALPHA", | |
| "RGB", | |
| "RGBA", | |
| "LUMINANCE", | |
| "LUMINANCE_ALPHA", | |
| "UNSIGNED_SHORT_4_4_4_4", | |
| "UNSIGNED_SHORT_5_5_5_1", | |
| "UNSIGNED_SHORT_5_6_5", | |
| "FRAGMENT_SHADER", | |
| "VERTEX_SHADER", | |
| "MAX_VERTEX_ATTRIBS", | |
| "MAX_VERTEX_UNIFORM_VECTORS", | |
| "MAX_VARYING_VECTORS", | |
| "MAX_COMBINED_TEXTURE_IMAGE_UNITS", | |
| "MAX_VERTEX_TEXTURE_IMAGE_UNITS", | |
| "MAX_TEXTURE_IMAGE_UNITS", | |
| "MAX_FRAGMENT_UNIFORM_VECTORS", | |
| "SHADER_TYPE", | |
| "DELETE_STATUS", | |
| "LINK_STATUS", | |
| "VALIDATE_STATUS", | |
| "ATTACHED_SHADERS", | |
| "ACTIVE_UNIFORMS", | |
| "ACTIVE_ATTRIBUTES", | |
| "SHADING_LANGUAGE_VERSION", | |
| "CURRENT_PROGRAM", | |
| "NEVER", | |
| "LESS", | |
| "EQUAL", | |
| "LEQUAL", | |
| "GREATER", | |
| "NOTEQUAL", | |
| "GEQUAL", | |
| "ALWAYS", | |
| "KEEP", | |
| "REPLACE", | |
| "INCR", | |
| "DECR", | |
| "INVERT", | |
| "INCR_WRAP", | |
| "DECR_WRAP", | |
| "VENDOR", | |
| "RENDERER", | |
| "VERSION", | |
| "NEAREST", | |
| "LINEAR", | |
| "NEAREST_MIPMAP_NEAREST", | |
| "LINEAR_MIPMAP_NEAREST", | |
| "NEAREST_MIPMAP_LINEAR", | |
| "LINEAR_MIPMAP_LINEAR", | |
| "TEXTURE_MAG_FILTER", | |
| "TEXTURE_MIN_FILTER", | |
| "TEXTURE_WRAP_S", | |
| "TEXTURE_WRAP_T", | |
| "TEXTURE", | |
| "TEXTURE_CUBE_MAP", | |
| "TEXTURE_BINDING_CUBE_MAP", | |
| "TEXTURE_CUBE_MAP_POSITIVE_X", | |
| "TEXTURE_CUBE_MAP_NEGATIVE_X", | |
| "TEXTURE_CUBE_MAP_POSITIVE_Y", | |
| "TEXTURE_CUBE_MAP_NEGATIVE_Y", | |
| "TEXTURE_CUBE_MAP_POSITIVE_Z", | |
| "TEXTURE_CUBE_MAP_NEGATIVE_Z", | |
| "MAX_CUBE_MAP_TEXTURE_SIZE", | |
| "TEXTURE0", | |
| "TEXTURE1", | |
| "TEXTURE2", | |
| "TEXTURE3", | |
| "TEXTURE4", | |
| "TEXTURE5", | |
| "TEXTURE6", | |
| "TEXTURE7", | |
| "TEXTURE8", | |
| "TEXTURE9", | |
| "TEXTURE10", | |
| "TEXTURE11", | |
| "TEXTURE12", | |
| "TEXTURE13", | |
| "TEXTURE14", | |
| "TEXTURE15", | |
| "TEXTURE16", | |
| "TEXTURE17", | |
| "TEXTURE18", | |
| "TEXTURE19", | |
| "TEXTURE20", | |
| "TEXTURE21", | |
| "TEXTURE22", | |
| "TEXTURE23", | |
| "TEXTURE24", | |
| "TEXTURE25", | |
| "TEXTURE26", | |
| "TEXTURE27", | |
| "TEXTURE28", | |
| "TEXTURE29", | |
| "TEXTURE30", | |
| "TEXTURE31", | |
| "ACTIVE_TEXTURE", | |
| "REPEAT", | |
| "CLAMP_TO_EDGE", | |
| "MIRRORED_REPEAT", | |
| "FLOAT_VEC2", | |
| "FLOAT_VEC3", | |
| "FLOAT_VEC4", | |
| "INT_VEC2", | |
| "INT_VEC3", | |
| "INT_VEC4", | |
| "BOOL", | |
| "BOOL_VEC2", | |
| "BOOL_VEC3", | |
| "BOOL_VEC4", | |
| "FLOAT_MAT2", | |
| "FLOAT_MAT3", | |
| "FLOAT_MAT4", | |
| "SAMPLER_2D", | |
| "SAMPLER_CUBE", | |
| "VERTEX_ATTRIB_ARRAY_ENABLED", | |
| "VERTEX_ATTRIB_ARRAY_SIZE", | |
| "VERTEX_ATTRIB_ARRAY_STRIDE", | |
| "VERTEX_ATTRIB_ARRAY_TYPE", | |
| "VERTEX_ATTRIB_ARRAY_NORMALIZED", | |
| "VERTEX_ATTRIB_ARRAY_POINTER", | |
| "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING", | |
| "IMPLEMENTATION_COLOR_READ_TYPE", | |
| "IMPLEMENTATION_COLOR_READ_FORMAT", | |
| "COMPILE_STATUS", | |
| "LOW_FLOAT", | |
| "MEDIUM_FLOAT", | |
| "HIGH_FLOAT", | |
| "LOW_INT", | |
| "MEDIUM_INT", | |
| "HIGH_INT", | |
| "FRAMEBUFFER", | |
| "RENDERBUFFER", | |
| "RGBA4", | |
| "RGB5_A1", | |
| "RGB565", | |
| "DEPTH_COMPONENT16", | |
| "STENCIL_INDEX", | |
| "STENCIL_INDEX8", | |
| "DEPTH_STENCIL", | |
| "RENDERBUFFER_WIDTH", | |
| "RENDERBUFFER_HEIGHT", | |
| "RENDERBUFFER_INTERNAL_FORMAT", | |
| "RENDERBUFFER_RED_SIZE", | |
| "RENDERBUFFER_GREEN_SIZE", | |
| "RENDERBUFFER_BLUE_SIZE", | |
| "RENDERBUFFER_ALPHA_SIZE", | |
| "RENDERBUFFER_DEPTH_SIZE", | |
| "RENDERBUFFER_STENCIL_SIZE", | |
| "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE", | |
| "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME", | |
| "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL", | |
| "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE", | |
| "COLOR_ATTACHMENT0", | |
| "DEPTH_ATTACHMENT", | |
| "STENCIL_ATTACHMENT", | |
| "DEPTH_STENCIL_ATTACHMENT", | |
| "NONE", | |
| "FRAMEBUFFER_COMPLETE", | |
| "FRAMEBUFFER_INCOMPLETE_ATTACHMENT", | |
| "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT", | |
| "FRAMEBUFFER_INCOMPLETE_DIMENSIONS", | |
| "FRAMEBUFFER_UNSUPPORTED", | |
| "FRAMEBUFFER_BINDING", | |
| "RENDERBUFFER_BINDING", | |
| "MAX_RENDERBUFFER_SIZE", | |
| "INVALID_FRAMEBUFFER_OPERATION", | |
| "UNPACK_FLIP_Y_WEBGL", | |
| "UNPACK_PREMULTIPLY_ALPHA_WEBGL", | |
| "CONTEXT_LOST_WEBGL", | |
| "UNPACK_COLORSPACE_CONVERSION_WEBGL", | |
| "BROWSER_DEFAULT_WEBGL" | |
| ]; | |
| const needed = [ | |
| 'createProgram', | |
| 'shaderSource', | |
| 'createShader', | |
| 'compileShader', | |
| 'attachShader', | |
| 'linkProgram', | |
| 'useProgram', | |
| 'bindBuffer', | |
| 'createBuffer', | |
| 'enableVertexAttribArray', | |
| 'vertexAttribPointer', | |
| 'bufferData', | |
| 'getUniformLocation', | |
| 'drawArrays' | |
| ]; | |
| const MAX_PROPNAME_LENGTH = propNames.map(v => v.length).reduce((a, b) => Math.max(a, b)); | |
| const checkHash = (positions) => { | |
| const hasher = s => { | |
| let hash = ''; | |
| for (let position of positions) { | |
| hash += [s[position]]; | |
| } | |
| return hash; | |
| } | |
| const hashes = Object.create(null); | |
| for (let str of propNames) { | |
| hashes[hasher(str)] = str; | |
| } | |
| for (let str of needed) { | |
| if (hashes[hasher(str)] !== str) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| const bruteforce = function* bruteforceGen (arr, startPos) { | |
| for (let i = startPos; i <= MAX_PROPNAME_LENGTH; i++) { | |
| yield arr.concat(i); | |
| yield* bruteforceGen(arr.concat(i), i + 1); | |
| } | |
| } | |
| const candidates = []; | |
| for (let pos of bruteforce([], 0)) { | |
| if (checkHash(pos)) { | |
| candidates.push(pos); | |
| } | |
| } | |
| candidates.sort((a, b) => a.length - b.length); | |
| console.log(candidates[0]); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment