1/* 2 * Copyright (C) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import hilog from '@ohos.hilog'; 17import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; 18 19import {checkError, createProgram, getColorUint8Array} from './WebGL1'; 20 21 22export default function webgl1_shader() { 23 24 describe('webgl1_shader', function () { 25 let gl = global.gl; 26 // Defines a test suite. Two parameters are supported: test suite name and test suite function. 27 beforeAll(function () { 28 hilog.info(0x0000, 'testTag', '%{public}s', 'webgl1_test_01 start'); 29 // Presets an action, which is performed only once before all test cases of the test suite start. 30 // This API supports only one parameter: preset action function. 31 }) 32 beforeEach(function () { 33 // Presets an action, which is performed before each unit test case starts. 34 // The number of execution times is the same as the number of test cases defined by **it**. 35 // This API supports only one parameter: preset action function. 36 checkError(gl); 37 }) 38 afterEach(function () { 39 // Presets a clear action, which is performed after each unit test case ends. 40 // The number of execution times is the same as the number of test cases defined by **it**. 41 // This API supports only one parameter: clear action function. 42 checkError(gl); 43 }) 44 afterAll(function () { 45 // Presets a clear action, which is performed after all test cases of the test suite end. 46 // This API supports only one parameter: clear action function. 47 hilog.info(0x0000, 'testTag', '%{public}s', 'webgl1_test_01 end'); 48 }) 49 50 let VERTEX_SOURCE_DEMO = ` 51 attribute vec4 a_Position; 52 attribute float a_PointSize; 53 void main(){ 54 gl_Position = a_Position; 55 gl_PointSize = a_PointSize; 56 } 57 `; 58 let FRAGMENT_SOURCE_DEMO = ` 59 precision mediump float; 60 uniform vec4 u_FragColor; 61 void main(){ 62 gl_FragColor = u_FragColor; 63 } 64 `; 65 let initShader = (gl, type, source) => { 66 let shader = gl.createShader(type); // 创建顶点着色器 67 if (shader == null) { 68 console.log('unable to create shader'); 69 return null; 70 } 71 gl.shaderSource(shader, source); // 设置着色器代码 72 gl.compileShader(shader); // 编译 73 let shaderParameter = gl.getShaderParameter(shader, gl.COMPILE_STATUS); 74 if (!shaderParameter) { // 如果编译失败 75 let error = gl.getShaderInfoLog(shader); 76 console.log('failed to compile shader: ' + error); 77 gl.deleteShader(shader); // 删除着色器 78 return null; 79 } 80 return shader; 81 } 82 83 /** 84 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0001 85 * @tc.name webgl_test_createShader 86 * @tc.desc Test createShader. 87 */ 88 it('webgl_test_createShader', 0, async function (done) { 89 console.info("webgltest [webgl_test_createShader] createShader"); 90 let vShader = gl.createShader(gl.VERTEX_SHADER); 91 console.info("webgltest vShader: " + vShader); 92 expect(vShader != null).assertTrue(); 93 gl.deleteShader(vShader); 94 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 95 let nShader = gl.createShader(1); 96 expect(checkError(gl)).assertEqual(gl.INVALID_ENUM); 97 console.info("webgltest nShader: " + nShader); 98 expect(nShader).assertEqual(null); 99 checkError(gl); 100 done(); 101 }) 102 103 104 /** 105 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0002 106 * @tc.name webgl_test_createShader_1 107 * @tc.desc Test createShader. 108 */ 109 it('webgl_test_createShader_1', 0, async function (done) { 110 console.info("webgltest [webgl_test_createShader_1] createShader"); 111 let vShader = gl.createShader(null); 112 if (vShader) gl.deleteShader(vShader); 113 expect(checkError(gl)).assertEqual(gl.INVALID_ENUM); 114 checkError(gl); 115 done(); 116 }) 117 118 119 /** 120 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0003 121 * @tc.name webgl_test_createShader_2 122 * @tc.desc Test createShader. 123 */ 124 it('webgl_test_createShader_2', 0, async function (done) { 125 console.info("webgltest [webgl_test_createShader_2] createShader"); 126 let vShader = gl.createShader(undefined); 127 if (vShader) gl.deleteShader(vShader); 128 expect(checkError(gl)).assertEqual(gl.INVALID_ENUM); 129 checkError(gl); 130 done(); 131 }) 132 133 134 /** 135 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0004 136 * @tc.name webgl_test_createShader_3 137 * @tc.desc Test createShader. 138 */ 139 it('webgl_test_createShader_3', 0, async function (done) { 140 console.info("webgltest [webgl_test_createShader_3] createShader"); 141 let vShader = gl.createShader(""); 142 if (vShader) gl.deleteShader(vShader); 143 expect(checkError(gl)).assertEqual(gl.INVALID_ENUM); 144 checkError(gl); 145 done(); 146 }) 147 148 function shaderSource(callback, finish) { 149 let vShader = gl.createShader(gl.VERTEX_SHADER); 150 callback(vShader) 151 finish() 152 gl.deleteShader(vShader); 153 } 154 155 156 /** 157 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0005 158 * @tc.name webgl_test_shaderSource 159 * @tc.desc Test shaderSource. 160 */ 161 it('webgl_test_shaderSource', 0, async function (done) { 162 console.info("webgltest [webgl_test_shaderSource] shaderSource"); 163 let vShader = gl.createShader(gl.VERTEX_SHADER); 164 let vSource = ` 165 attribute vec4 a_Position; 166 attribute float a_PointSize; 167 void main(){ 168 gl_Position = a_Position; 169 gl_PointSize = a_PointSize; 170 }` 171 gl.shaderSource(vShader, vSource); 172 let source = gl.getShaderSource(vShader); 173 console.info("webgltest shaderSource ", source); 174 expect(vSource).assertEqual(source); 175 gl.deleteShader(vShader); 176 checkError(gl); 177 done(); 178 }) 179 180 181 /** 182 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0006 183 * @tc.name webgl_test_shaderSource_1 184 * @tc.desc Test shaderSource. 185 */ 186 it('webgl_test_shaderSource_1', 0, async function (done) { 187 console.info("webgltest [webgl_test_shaderSource_1] shaderSource"); 188 shaderSource((vShader) => { 189 gl.shaderSource(vShader, null); 190 }, () => { 191 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 192 }) 193 done(); 194 }) 195 196 197 /** 198 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0007 199 * @tc.name webgl_test_shaderSource_2 200 * @tc.desc Test shaderSource. 201 */ 202 it('webgl_test_shaderSource_2', 0, async function (done) { 203 console.info("webgltest [webgl_test_shaderSource_2] shaderSource"); 204 shaderSource((vShader) => { 205 gl.shaderSource(vShader, undefined); 206 }, () => { 207 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 208 }) 209 done(); 210 }) 211 212 213 /** 214 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0008 215 * @tc.name webgl_test_shaderSource_3 216 * @tc.desc Test shaderSource. 217 */ 218 it('webgl_test_shaderSource_3', 0, async function (done) { 219 console.info("webgltest [webgl_test_shaderSource_3] shaderSource"); 220 shaderSource((vShader) => { 221 gl.shaderSource(vShader, ""); 222 }, () => { 223 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 224 }) 225 done(); 226 }) 227 228 /** 229 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0009 230 * @tc.name webgl_test_getShaderSource 231 * @tc.desc Test getShaderSource. 232 */ 233 it('webgl_test_getShaderSource', 0, async function (done) { 234 console.info("webgltest [webgl_test_getShaderSource] getShaderSource"); 235 let vShader = gl.createShader(gl.VERTEX_SHADER); 236 let vSource = ` 237 attribute vec4 a_Position; 238 attribute float a_PointSize; 239 void main(){ 240 gl_Position = a_Position; 241 gl_PointSize = a_PointSize; 242 }` 243 gl.shaderSource(vShader, vSource); 244 let source = gl.getShaderSource(vShader); 245 console.info("webgltest shaderSource ", source); 246 expect(vSource).assertEqual(source); 247 gl.deleteShader(vShader); 248 checkError(gl); 249 done(); 250 }) 251 252 function getShaderParameter(callback, finish) { 253 let vShader = gl.createShader(gl.VERTEX_SHADER); 254 let vSource = ` 255 attribute vec4 a_Position; 256 attribute float a_PointSize; 257 void main(){ 258 gl_Position = a_Position; 259 gl_PointSize = a_PointSize; 260 }` 261 gl.shaderSource(vShader, vSource); 262 callback(vShader) 263 finish() 264 gl.deleteShader(vShader); 265 } 266 267 268 /** 269 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0010 270 * @tc.name webgl_test_getShaderParameter 271 * @tc.desc Test getShaderParameter. 272 */ 273 it('webgl_test_getShaderParameter', 0, async function (done) { 274 console.info("webgltest [webgl_test_getShaderParameter] getShaderParameter"); 275 let vShader = gl.createShader(gl.VERTEX_SHADER); 276 let vSource = ` 277 attribute vec4 a_Position; 278 attribute float a_PointSize; 279 void main(){ 280 gl_Position = a_Position; 281 gl_PointSize = a_PointSize; 282 }` 283 gl.shaderSource(vShader, vSource); 284 let shaderCompileStatus = gl.getShaderParameter(vShader, gl.COMPILE_STATUS); 285 console.log("webgltest shaderCompileStatus: ", shaderCompileStatus); 286 expect(shaderCompileStatus).assertEqual(false); 287 let shaderType = gl.getShaderParameter(vShader, gl.SHADER_TYPE); 288 console.log("webgltest ShaderType : ", shaderType); 289 expect(shaderType).assertEqual(gl.VERTEX_SHADER); 290 gl.deleteShader(vShader); 291 checkError(gl); 292 done(); 293 }) 294 295 296 /** 297 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0011 298 * @tc.name webgl_test_getShaderParameter_1 299 * @tc.desc Test getShaderParameter. 300 */ 301 it('webgl_test_getShaderParameter_1', 0, async function (done) { 302 console.info("webgltest [webgl_test_getShaderParameter_1] getShaderParameter"); 303 getShaderParameter((vShader) => { 304 let shaderType = gl.getShaderParameter(vShader, gl.DELETE_STATUS); 305 console.log("webgltest ShaderType : ", shaderType); 306 }, () => { 307 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 308 }) 309 done(); 310 }) 311 312 313 /** 314 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0012 315 * @tc.name webgl_test_getShaderParameter_2 316 * @tc.desc Test getShaderParameter. 317 */ 318 it('webgl_test_getShaderParameter_2', 0, async function (done) { 319 console.info("webgltest [webgl_test_getShaderParameter_2] getShaderParameter"); 320 getShaderParameter((vShader) => { 321 let shaderType = gl.getShaderParameter(vShader, null); 322 console.log("webgltest ShaderType : ", shaderType); 323 }, () => { 324 expect(checkError(gl)).assertEqual(gl.INVALID_ENUM); 325 }) 326 done(); 327 }) 328 329 330 /** 331 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0013 332 * @tc.name webgl_test_getShaderParameter_3 333 * @tc.desc Test getShaderParameter. 334 */ 335 it('webgl_test_getShaderParameter_3', 0, async function (done) { 336 console.info("webgltest [webgl_test_getShaderParameter_3] getShaderParameter"); 337 getShaderParameter((vShader) => { 338 let shaderType = gl.getShaderParameter(vShader, undefined); 339 console.log("webgltest ShaderType : ", shaderType); 340 }, () => { 341 expect(checkError(gl)).assertEqual(gl.INVALID_ENUM); 342 }) 343 done(); 344 }) 345 346 /** 347 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0014 348 * @tc.name webgl_test_compileShader 349 * @tc.desc Test compileShader. 350 */ 351 it('webgl_test_compileShader', 0, async function (done) { 352 console.info("webgltest [webgl_test_compileShader] compileShader"); 353 let vShader = gl.createShader(gl.VERTEX_SHADER); 354 let vSource = ` 355 attribute vec4 a_Position; 356 attribute float a_PointSize; 357 void main(){ 358 gl_Position = a_Position; 359 gl_PointSize = a_PointSize; 360 }` 361 gl.shaderSource(vShader, vSource); 362 let shaderParameter1 = gl.getShaderParameter(vShader, gl.COMPILE_STATUS); 363 console.info("webgltest shaderParameter1 before compile : ", shaderParameter1); 364 expect(shaderParameter1).assertEqual(false); 365 gl.compileShader(vShader); 366 let shaderParameter2 = gl.getShaderParameter(vShader, gl.COMPILE_STATUS); 367 console.info("webgltest shaderParameter2 after compile : ", shaderParameter2); 368 expect(shaderParameter2).assertEqual(true); 369 gl.deleteShader(vShader); 370 checkError(gl); 371 done(); 372 }) 373 374 /** 375 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0015 376 * @tc.name webgl_test_getShaderInfoLog 377 * @tc.desc Test getShaderInfoLog. 378 */ 379 it('webgl_test_getShaderInfoLog', 0, async function (done) { 380 console.info("webgltest [webgl_test_getShaderInfoLog] getShaderInfoLog"); 381 let vShader = gl.createShader(gl.VERTEX_SHADER); 382 let vSource = ` 383 attribute vec4 a_Position; 384 attribute float a_PointSize; 385 void main(){ 386 gl_Position = a_Position; 387 gl_PointSize = a_PointSizeErr; 388 }` 389 gl.shaderSource(vShader, vSource); 390 let log1 = gl.getShaderInfoLog(vShader); 391 console.info("webgltest log : ", log1); 392 expect(log1).assertEqual(null || ''); 393 gl.compileShader(vShader); 394 let compileStatus = gl.getShaderParameter(vShader, gl.COMPILE_STATUS); 395 console.info("webgltest compileStatus : ", compileStatus); 396 let errLog = gl.getShaderInfoLog(vShader); 397 console.info("webgltest compile log : ", errLog); 398 expect(errLog.length > 0).assertTrue(); 399 gl.deleteShader(vShader); 400 checkError(gl); 401 done(); 402 }) 403 404 /** 405 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0016 406 * @tc.name webgl_test_isShader 407 * @tc.desc Test isShader. 408 */ 409 it('webgl_test_isShader', 0, async function (done) { 410 console.info("webgltest [webgl_test_isShader] isShader"); 411 let vShader = gl.createShader(gl.VERTEX_SHADER); 412 console.info("isShader ", gl.isShader(vShader)); 413 expect(gl.isShader(vShader)).assertEqual(true); 414 console.info("delete Shader"); 415 gl.deleteShader(vShader); 416 console.info("isShader ", gl.isShader(vShader)); 417 expect(gl.isShader(vShader)).assertEqual(false); 418 checkError(gl); 419 done(); 420 }) 421 422 423 /** 424 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0017 425 * @tc.name webgl_test_isShader_1 426 * @tc.desc Test isShader. 427 */ 428 it('webgl_test_isShader_1', 0, async function (done) { 429 console.info("webgltest [webgl_test_isShader_1] isShader"); 430 let vShader = gl.createShader(gl.VERTEX_SHADER); 431 console.info("isShader ", gl.isShader(null)); 432 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 433 gl.deleteShader(vShader); 434 checkError(gl); 435 done(); 436 }) 437 438 439 /** 440 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0018 441 * @tc.name webgl_test_isShader_2 442 * @tc.desc Test isShader. 443 */ 444 it('webgl_test_isShader_2', 0, async function (done) { 445 console.info("webgltest [webgl_test_isShader_2] isShader"); 446 let vShader = gl.createShader(gl.VERTEX_SHADER); 447 console.info("isShader ", gl.isShader(undefined)); 448 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 449 gl.deleteShader(vShader); 450 checkError(gl); 451 done(); 452 }) 453 454 /** 455 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0019 456 * @tc.name webgl_test_deleteShader 457 * @tc.desc Test deleteShader. 458 */ 459 it('webgl_test_deleteShader', 0, async function (done) { 460 console.info("webgltest [webgl_test_deleteShader] deleteShader"); 461 let vShader = gl.createShader(gl.VERTEX_SHADER); 462 console.info("isShader ", gl.isShader(vShader)); 463 expect(gl.isShader(vShader) == true).assertTrue(); 464 console.info("delete Shader"); 465 gl.deleteShader(vShader); 466 console.info("isShader ", gl.isShader(vShader)); 467 expect(gl.isShader(vShader)).assertEqual(false); 468 gl.deleteShader(null); 469 checkError(gl); 470 done(); 471 }) 472 473 474 /** 475 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0020 476 * @tc.name webgl_test_deleteShader_1 477 * @tc.desc Test deleteShader. 478 */ 479 it('webgl_test_deleteShader_1', 0, async function (done) { 480 console.info("webgltest [webgl_test_deleteShader_1] deleteShader"); 481 let vShader = gl.createShader(gl.VERTEX_SHADER); 482 expect(gl.isShader(vShader) == true).assertTrue(); 483 gl.deleteShader(undefined); 484 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 485 checkError(gl); 486 done(); 487 }) 488 489 /** 490 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0021 491 * @tc.name webgl_test_attachShader 492 * @tc.desc Test attachShader. 493 */ 494 it('webgl_test_attachShader', 0, async function (done) { 495 console.info("webgltest [webgl_test_attachShader] attachShader"); 496 let program = gl.createProgram(); 497 expect(gl.getError()).assertEqual(gl.NO_ERROR); 498 console.info("webgl_test_attachShader initShader"); 499 let vShader = initShader(gl, gl.VERTEX_SHADER, ` 500 attribute vec4 a_Position; 501 attribute float a_PointSize; 502 void main(){ 503 gl_Position = a_Position; 504 gl_PointSize = a_PointSize; 505 } 506 `); 507 expect(gl.getError()).assertEqual(gl.NO_ERROR); 508 console.info("webgl_test_attachShader attachShader"); 509 gl.attachShader(program, vShader); 510 expect(gl.getError()).assertEqual(gl.NO_ERROR); 511 console.info("webgl_test_attachShader getAttachedShaders"); 512 let attachedShaders = gl.getAttachedShaders(program); 513 expect(gl.getError()).assertEqual(gl.NO_ERROR); 514 console.info("webgltest getAttachedShaders:", attachedShaders); 515 expect(attachedShaders[0]).assertEqual(vShader); 516 expect(attachedShaders[0] != null).assertTrue(); 517 expect(attachedShaders.length).assertEqual(1); 518 gl.deleteShader(vShader); 519 gl.deleteProgram(program); 520 checkError(gl); 521 done(); 522 }) 523 524 /** 525 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0022 526 * @tc.name webgl_test_getAttachedShaders 527 * @tc.desc Test getAttachedShaders. 528 */ 529 it('webgl_test_getAttachedShaders', 0, async function (done) { 530 console.info("webgltest [webgl_test_getAttachedShaders] getAttachedShaders"); 531 let program = gl.createProgram(); 532 let vShader = initShader(gl, gl.VERTEX_SHADER, ` 533 attribute vec4 a_Position; 534 attribute float a_PointSize; 535 void main(){ 536 gl_Position = a_Position; 537 gl_PointSize = a_PointSize; 538 } 539 `); 540 gl.attachShader(program, vShader); 541 let attachedShaders = gl.getAttachedShaders(program); 542 console.info("webgltest getAttachedShaders:", attachedShaders); 543 expect(attachedShaders[0] == vShader).assertTrue(); 544 expect(gl.getError()).assertEqual(gl.NO_ERROR); 545 console.info("webgltest gl.detachShader(program, vShader);"); 546 gl.detachShader(program, vShader); 547 console.info("webgltest getAttachedShaders:", gl.getAttachedShaders(program)); 548 expect(gl.getAttachedShaders(program).length == 0).assertTrue(); 549 gl.deleteShader(vShader); 550 gl.deleteProgram(program); 551 done(); 552 }) 553 554 /** 555 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0023 556 * @tc.name webgl_test_detachShader 557 * @tc.desc Test detachShader. 558 */ 559 it('webgl_test_detachShader', 0, async function (done) { 560 console.info("webgltest [webgl_test_detachShader] detachShader"); 561 let program = gl.createProgram(); 562 let vShader = initShader(gl, gl.VERTEX_SHADER, ` 563 attribute vec4 a_Position; 564 attribute float a_PointSize; 565 void main(){ 566 gl_Position = a_Position; 567 gl_PointSize = a_PointSize; 568 } 569 `); 570 gl.attachShader(program, vShader); 571 let attachedShaders = gl.getAttachedShaders(program); 572 console.info("webgltest getAttachedShaders:", attachedShaders); 573 expect(attachedShaders[0]).assertEqual(vShader); 574 expect(gl.getError()).assertEqual(gl.NO_ERROR); 575 console.info("webgltest gl.detachShader(program, vShader);"); 576 gl.detachShader(program, vShader); 577 console.info("webgltest getAttachedShaders:", gl.getAttachedShaders(program)); 578 expect(gl.getAttachedShaders(program).length).assertEqual(0); 579 gl.deleteShader(vShader); 580 gl.deleteProgram(program); 581 done(); 582 }) 583 584 /** 585 * WebGL API 的 WebGLRenderingContext.getShaderPrecisionFormat() 586 * 方法返回一个新的 WebGLShaderPrecisionFormat 对象,描述指定着色器的范围和精度 数字格式 587 */ 588 function getShaderPrecisionFormat(callback, finish) { 589 let program = gl.createProgram(); 590 let vShader = initShader(gl, gl.VERTEX_SHADER, ` 591 precision mediump float; 592 attribute vec4 a_Position; 593 attribute float a_PointSize; 594 void main(){ 595 gl_Position = a_Position; 596 gl_PointSize = a_PointSize; 597 } 598 `); 599 gl.attachShader(program, vShader); 600 callback(vShader) 601 finish() 602 gl.deleteShader(vShader); 603 gl.deleteProgram(program); 604 } 605 606 607 /** 608 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0024 609 * @tc.name webgl_test_getShaderPrecisionFormat 610 * @tc.desc Test getShaderPrecisionFormat. 611 */ 612 it('webgl_test_getShaderPrecisionFormat', 0, async function (done) { 613 console.info("webgltest [webgl_test_getShaderPrecisionFormat] getShaderPrecisionFormat"); 614 let program = gl.createProgram(); 615 let vShader = initShader(gl, gl.VERTEX_SHADER, ` 616 precision mediump float; 617 attribute vec4 a_Position; 618 attribute float a_PointSize; 619 void main(){ 620 gl_Position = a_Position; 621 gl_PointSize = a_PointSize; 622 } 623 `); 624 gl.attachShader(program, vShader); 625 let shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT); 626 expect(gl.getError()).assertEqual(gl.NO_ERROR); 627 console.info('webgltest shaderPrecisionFormat:', JSON.stringify(shaderPrecisionFormat), shaderPrecisionFormat); 628 expect(typeof shaderPrecisionFormat).assertEqual("object"); 629 gl.deleteShader(vShader); 630 gl.deleteProgram(program); 631 done(); 632 }) 633 634 635 /** 636 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0025 637 * @tc.name webgl_test_getShaderPrecisionFormat_1 638 * @tc.desc Test getShaderPrecisionFormat. 639 */ 640 it('webgl_test_getShaderPrecisionFormat_1', 0, async function (done) { 641 console.info("webgltest [webgl_test_getShaderPrecisionFormat_1] getShaderPrecisionFormat"); 642 getShaderPrecisionFormat((vShader) => { 643 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT); 644 }, () => { 645 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 646 }) 647 done(); 648 }) 649 650 651 /** 652 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0026 653 * @tc.name webgl_test_getShaderPrecisionFormat_2 654 * @tc.desc Test getShaderPrecisionFormat. 655 */ 656 it('webgl_test_getShaderPrecisionFormat_2', 0, async function (done) { 657 console.info("webgltest [webgl_test_getShaderPrecisionFormat_2] getShaderPrecisionFormat"); 658 getShaderPrecisionFormat((vShader) => { 659 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT); 660 }, () => { 661 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 662 }) 663 done(); 664 }) 665 666 667 /** 668 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0027 669 * @tc.name webgl_test_getShaderPrecisionFormat_3 670 * @tc.desc Test getShaderPrecisionFormat. 671 */ 672 it('webgl_test_getShaderPrecisionFormat_3', 0, async function (done) { 673 console.info("webgltest [webgl_test_getShaderPrecisionFormat_3] getShaderPrecisionFormat"); 674 getShaderPrecisionFormat((vShader) => { 675 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT); 676 }, () => { 677 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 678 }) 679 done(); 680 }) 681 682 683 /** 684 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0028 685 * @tc.name webgl_test_getShaderPrecisionFormat_4 686 * @tc.desc Test getShaderPrecisionFormat. 687 */ 688 it('webgl_test_getShaderPrecisionFormat_4', 0, async function (done) { 689 console.info("webgltest [webgl_test_getShaderPrecisionFormat_4] getShaderPrecisionFormat"); 690 getShaderPrecisionFormat((vShader) => { 691 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_INT); 692 }, () => { 693 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 694 }) 695 done(); 696 }) 697 698 699 /** 700 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0029 701 * @tc.name webgl_test_getShaderPrecisionFormat_5 702 * @tc.desc Test getShaderPrecisionFormat. 703 */ 704 it('webgl_test_getShaderPrecisionFormat_5', 0, async function (done) { 705 console.info("webgltest [webgl_test_getShaderPrecisionFormat_5] getShaderPrecisionFormat"); 706 getShaderPrecisionFormat((vShader) => { 707 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_INT); 708 }, () => { 709 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 710 }) 711 done(); 712 }) 713 714 715 /** 716 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0030 717 * @tc.name webgl_test_getShaderPrecisionFormat_6 718 * @tc.desc Test getShaderPrecisionFormat. 719 */ 720 it('webgl_test_getShaderPrecisionFormat_6', 0, async function (done) { 721 console.info("webgltest [webgl_test_getShaderPrecisionFormat_6] getShaderPrecisionFormat"); 722 getShaderPrecisionFormat((vShader) => { 723 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_INT); 724 }, () => { 725 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 726 }) 727 done(); 728 }) 729 }) 730} 731