hint.html (4274B)
1 <!-- 2 Copyright (c) 2022 The Khronos Group Inc. 3 Use of this source code is governed by an MIT-style license that can be 4 found in the LICENSE.txt file. 5 --> 6 7 <!DOCTYPE html> 8 <html> 9 <head> 10 <meta charset=utf-8> 11 <link rel="stylesheet" href="../../resources/js-test-style.css"/> 12 <script src="../../js/js-test-pre.js"></script> 13 <script src="../../js/webgl-test-utils.js"></script> 14 </head> 15 <body> 16 <div id="description"></div> 17 <div id="console"></div> 18 19 <script> 20 "use strict"; 21 const wtu = WebGLTestUtils; 22 description("Tests webgl.hint()"); 23 24 const gl = wtu.create3DContext(); 25 wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Setup should succeed"); 26 27 // From https://kdashg.github.io/misc/gl/search-headers.html#str=_HINT 28 const HINT_TARGETS = { 29 GL_GENERATE_MIPMAP_HINT: 0x8192, 30 GL_FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8B8B, 31 GL_BINNING_CONTROL_HINT_QCOM: 0x8FB0, 32 GL_PROGRAM_BINARY_RETRIEVABLE_HINT: 0x8257, 33 GL_LINE_SMOOTH_HINT: 0x0C52, 34 GL_POLYGON_SMOOTH_HINT: 0x0C53, 35 EGL_PRODUCER_MAX_FRAME_HINT_NV: 0x3337, 36 EGL_CONSUMER_MAX_FRAME_HINT_NV: 0x3338, 37 EGL_YUV_COLOR_SPACE_HINT_EXT: 0x327B, 38 EGL_SAMPLE_RANGE_HINT_EXT: 0x327C, 39 EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT: 0x327D, 40 EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT: 0x327E, 41 EGL_LOCK_USAGE_HINT_KHR: 0x30C5, 42 GL_TEXTURE_COMPRESSION_HINT: 0x84EF, 43 GL_TEXTURE_STORAGE_HINT_APPLE: 0x85BC, 44 GL_TRANSFORM_HINT_APPLE: 0x85B1, 45 GL_VERTEX_ARRAY_STORAGE_HINT_APPLE: 0x851F, 46 GL_CLIP_VOLUME_CLIPPING_HINT_EXT: 0x80F0, 47 GL_PACK_CMYK_HINT_EXT: 0x800E, 48 GL_UNPACK_CMYK_HINT_EXT: 0x800F, 49 GL_MULTISAMPLE_FILTER_HINT_NV: 0x8534, 50 GL_PREFER_DOUBLEBUFFER_HINT_PGI: 0x1A1F8, 51 GL_CONSERVE_MEMORY_HINT_PGI: 0x1A1FD, 52 GL_RECLAIM_MEMORY_HINT_PGI: 0x1A1FE, 53 GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI: 0x1A203, 54 GL_NATIVE_GRAPHICS_END_HINT_PGI: 0x1A204, 55 GL_ALWAYS_FAST_HINT_PGI: 0x1A20C, 56 GL_ALWAYS_SOFT_HINT_PGI: 0x1A20D, 57 GL_ALLOW_DRAW_OBJ_HINT_PGI: 0x1A20E, 58 GL_ALLOW_DRAW_WIN_HINT_PGI: 0x1A20F, 59 GL_ALLOW_DRAW_FRG_HINT_PGI: 0x1A210, 60 GL_ALLOW_DRAW_MEM_HINT_PGI: 0x1A211, 61 GL_STRICT_DEPTHFUNC_HINT_PGI: 0x1A216, 62 GL_STRICT_LIGHTING_HINT_PGI: 0x1A217, 63 GL_STRICT_SCISSOR_HINT_PGI: 0x1A218, 64 GL_FULL_STIPPLE_HINT_PGI: 0x1A219, 65 GL_CLIP_NEAR_HINT_PGI: 0x1A220, 66 GL_CLIP_FAR_HINT_PGI: 0x1A221, 67 GL_WIDE_LINE_HINT_PGI: 0x1A222, 68 GL_BACK_NORMALS_HINT_PGI: 0x1A223, 69 GL_VERTEX_DATA_HINT_PGI: 0x1A22A, 70 GL_VERTEX_CONSISTENT_HINT_PGI: 0x1A22B, 71 GL_MATERIAL_SIDE_HINT_PGI: 0x1A22C, 72 GL_MAX_VERTEX_HINT_PGI: 0x1A22D, 73 GL_GENERATE_MIPMAP_HINT_SGIS: 0x8192, 74 GL_CONVOLUTION_HINT_SGIX: 0x8316, 75 GL_SCALEBIAS_HINT_SGIX: 0x8322, 76 GL_TEXTURE_MULTI_BUFFER_HINT_SGIX: 0x812E, 77 GL_VERTEX_PRECLIP_HINT_SGIX: 0x83EF, 78 GL_PHONG_HINT_WIN: 0x80EB, 79 }; 80 81 async function testValidTargets(validTargets) { 82 Object.entries(HINT_TARGETS).forEach(kv => { 83 const [k,v] = kv; 84 let targetError = gl.INVALID_ENUM; 85 if (validTargets[v]) { 86 targetError = 0; 87 } 88 debug(""); 89 debug(k); 90 wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, `gl.hint(HINT_TARGETS.${k}, gl.DONT_CARE-1)`); 91 wtu.shouldGenerateGLError(gl, targetError, `gl.hint(HINT_TARGETS.${k}, gl.DONT_CARE)`); 92 wtu.shouldGenerateGLError(gl, targetError, `gl.hint(HINT_TARGETS.${k}, gl.FASTEST)`); 93 wtu.shouldGenerateGLError(gl, targetError, `gl.hint(HINT_TARGETS.${k}, gl.NICEST)`); 94 wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, `gl.hint(HINT_TARGETS.${k}, gl.NICEST+1)`); 95 }); 96 } 97 98 (async () => { 99 const validTargets = {}; 100 validTargets[HINT_TARGETS.GL_GENERATE_MIPMAP_HINT] = true; 101 102 if (gl.FRAGMENT_SHADER_DERIVATIVE_HINT) { // webgl2 103 validTargets[gl.FRAGMENT_SHADER_DERIVATIVE_HINT] = true; 104 } 105 testValidTargets(validTargets); 106 107 const ext = gl.getExtension("OES_standard_derivatives"); 108 if (ext) { 109 debug(""); 110 debug(""); 111 debug("-----------------------------------------"); 112 debug("Test with OES_standard_derivatives enabled"); 113 debug(""); 114 validTargets[ext.FRAGMENT_SHADER_DERIVATIVE_HINT_OES] = true; 115 testValidTargets(validTargets); 116 } 117 118 finishTest(); 119 })(); 120 121 var successfullyParsed = true; 122 </script> 123 </body> 124 </html>