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, TestType, Level, Size } 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', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 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', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 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', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 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', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 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', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 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', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 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', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 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', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 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', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 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', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 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', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 302 async function (done) { 303 console.info("webgltest [webgl_test_getShaderParameter_1] getShaderParameter"); 304 getShaderParameter((vShader) => { 305 let shaderType = gl.getShaderParameter(vShader, gl.DELETE_STATUS); 306 console.log("webgltest ShaderType : ", shaderType); 307 }, () => { 308 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 309 }) 310 done(); 311 }) 312 313 314 /** 315 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0012 316 * @tc.name webgl_test_getShaderParameter_2 317 * @tc.desc Test getShaderParameter. 318 */ 319 it('webgl_test_getShaderParameter_2', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 320 async function (done) { 321 console.info("webgltest [webgl_test_getShaderParameter_2] getShaderParameter"); 322 getShaderParameter((vShader) => { 323 let shaderType = gl.getShaderParameter(vShader, null); 324 console.log("webgltest ShaderType : ", shaderType); 325 }, () => { 326 expect(checkError(gl)).assertEqual(gl.INVALID_ENUM); 327 }) 328 done(); 329 }) 330 331 332 /** 333 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0013 334 * @tc.name webgl_test_getShaderParameter_3 335 * @tc.desc Test getShaderParameter. 336 */ 337 it('webgl_test_getShaderParameter_3', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 338 async function (done) { 339 console.info("webgltest [webgl_test_getShaderParameter_3] getShaderParameter"); 340 getShaderParameter((vShader) => { 341 let shaderType = gl.getShaderParameter(vShader, undefined); 342 console.log("webgltest ShaderType : ", shaderType); 343 }, () => { 344 expect(checkError(gl)).assertEqual(gl.INVALID_ENUM); 345 }) 346 done(); 347 }) 348 349 /** 350 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0014 351 * @tc.name webgl_test_compileShader 352 * @tc.desc Test compileShader. 353 */ 354 it('webgl_test_compileShader', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 355 console.info("webgltest [webgl_test_compileShader] compileShader"); 356 let vShader = gl.createShader(gl.VERTEX_SHADER); 357 let vSource = ` 358 attribute vec4 a_Position; 359 attribute float a_PointSize; 360 void main(){ 361 gl_Position = a_Position; 362 gl_PointSize = a_PointSize; 363 }` 364 gl.shaderSource(vShader, vSource); 365 let shaderParameter1 = gl.getShaderParameter(vShader, gl.COMPILE_STATUS); 366 console.info("webgltest shaderParameter1 before compile : ", shaderParameter1); 367 expect(shaderParameter1).assertEqual(false); 368 gl.compileShader(vShader); 369 let shaderParameter2 = gl.getShaderParameter(vShader, gl.COMPILE_STATUS); 370 console.info("webgltest shaderParameter2 after compile : ", shaderParameter2); 371 expect(shaderParameter2).assertEqual(true); 372 gl.deleteShader(vShader); 373 checkError(gl); 374 done(); 375 }) 376 377 /** 378 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0015 379 * @tc.name webgl_test_getShaderInfoLog 380 * @tc.desc Test getShaderInfoLog. 381 */ 382 it('webgl_test_getShaderInfoLog', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 383 console.info("webgltest [webgl_test_getShaderInfoLog] getShaderInfoLog"); 384 let vShader = gl.createShader(gl.VERTEX_SHADER); 385 let vSource = ` 386 attribute vec4 a_Position; 387 attribute float a_PointSize; 388 void main(){ 389 gl_Position = a_Position; 390 gl_PointSize = a_PointSizeErr; 391 }` 392 gl.shaderSource(vShader, vSource); 393 let log1 = gl.getShaderInfoLog(vShader); 394 console.info("webgltest log : ", log1); 395 expect(log1).assertEqual(null || ''); 396 gl.compileShader(vShader); 397 let compileStatus = gl.getShaderParameter(vShader, gl.COMPILE_STATUS); 398 console.info("webgltest compileStatus : ", compileStatus); 399 let errLog = gl.getShaderInfoLog(vShader); 400 console.info("webgltest compile log : ", errLog); 401 expect(errLog.length > 0).assertTrue(); 402 gl.deleteShader(vShader); 403 checkError(gl); 404 done(); 405 }) 406 407 /** 408 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0016 409 * @tc.name webgl_test_isShader 410 * @tc.desc Test isShader. 411 */ 412 it('webgl_test_isShader', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 413 console.info("webgltest [webgl_test_isShader] isShader"); 414 let vShader = gl.createShader(gl.VERTEX_SHADER); 415 console.info("isShader ", gl.isShader(vShader)); 416 expect(gl.isShader(vShader)).assertEqual(true); 417 console.info("delete Shader"); 418 gl.deleteShader(vShader); 419 console.info("isShader ", gl.isShader(vShader)); 420 expect(gl.isShader(vShader)).assertEqual(false); 421 checkError(gl); 422 done(); 423 }) 424 425 426 /** 427 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0017 428 * @tc.name webgl_test_isShader_1 429 * @tc.desc Test isShader. 430 */ 431 it('webgl_test_isShader_1', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 432 console.info("webgltest [webgl_test_isShader_1] isShader"); 433 let vShader = gl.createShader(gl.VERTEX_SHADER); 434 console.info("isShader ", gl.isShader(null)); 435 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 436 gl.deleteShader(vShader); 437 checkError(gl); 438 done(); 439 }) 440 441 442 /** 443 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0018 444 * @tc.name webgl_test_isShader_2 445 * @tc.desc Test isShader. 446 */ 447 it('webgl_test_isShader_2', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 448 console.info("webgltest [webgl_test_isShader_2] isShader"); 449 let vShader = gl.createShader(gl.VERTEX_SHADER); 450 console.info("isShader ", gl.isShader(undefined)); 451 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 452 gl.deleteShader(vShader); 453 checkError(gl); 454 done(); 455 }) 456 457 /** 458 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0019 459 * @tc.name webgl_test_deleteShader 460 * @tc.desc Test deleteShader. 461 */ 462 it('webgl_test_deleteShader', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 463 console.info("webgltest [webgl_test_deleteShader] deleteShader"); 464 let vShader = gl.createShader(gl.VERTEX_SHADER); 465 console.info("isShader ", gl.isShader(vShader)); 466 expect(gl.isShader(vShader) == true).assertTrue(); 467 console.info("delete Shader"); 468 gl.deleteShader(vShader); 469 console.info("isShader ", gl.isShader(vShader)); 470 expect(gl.isShader(vShader)).assertEqual(false); 471 gl.deleteShader(null); 472 checkError(gl); 473 done(); 474 }) 475 476 477 /** 478 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0020 479 * @tc.name webgl_test_deleteShader_1 480 * @tc.desc Test deleteShader. 481 */ 482 it('webgl_test_deleteShader_1', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 483 console.info("webgltest [webgl_test_deleteShader_1] deleteShader"); 484 let vShader = gl.createShader(gl.VERTEX_SHADER); 485 expect(gl.isShader(vShader) == true).assertTrue(); 486 gl.deleteShader(undefined); 487 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 488 checkError(gl); 489 done(); 490 }) 491 492 /** 493 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0021 494 * @tc.name webgl_test_attachShader 495 * @tc.desc Test attachShader. 496 */ 497 it('webgl_test_attachShader', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 498 console.info("webgltest [webgl_test_attachShader] attachShader"); 499 let program = gl.createProgram(); 500 expect(gl.getError()).assertEqual(gl.NO_ERROR); 501 console.info("webgl_test_attachShader initShader"); 502 let vShader = initShader(gl, gl.VERTEX_SHADER, ` 503 attribute vec4 a_Position; 504 attribute float a_PointSize; 505 void main(){ 506 gl_Position = a_Position; 507 gl_PointSize = a_PointSize; 508 } 509 `); 510 expect(gl.getError()).assertEqual(gl.NO_ERROR); 511 console.info("webgl_test_attachShader attachShader"); 512 gl.attachShader(program, vShader); 513 expect(gl.getError()).assertEqual(gl.NO_ERROR); 514 console.info("webgl_test_attachShader getAttachedShaders"); 515 let attachedShaders = gl.getAttachedShaders(program); 516 expect(gl.getError()).assertEqual(gl.NO_ERROR); 517 console.info("webgltest getAttachedShaders:", attachedShaders); 518 expect(attachedShaders[0]).assertEqual(vShader); 519 expect(attachedShaders[0] != null).assertTrue(); 520 expect(attachedShaders.length).assertEqual(1); 521 gl.deleteShader(vShader); 522 gl.deleteProgram(program); 523 checkError(gl); 524 done(); 525 }) 526 527 /** 528 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0022 529 * @tc.name webgl_test_getAttachedShaders 530 * @tc.desc Test getAttachedShaders. 531 */ 532 it('webgl_test_getAttachedShaders', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 533 console.info("webgltest [webgl_test_getAttachedShaders] getAttachedShaders"); 534 let program = gl.createProgram(); 535 let vShader = initShader(gl, gl.VERTEX_SHADER, ` 536 attribute vec4 a_Position; 537 attribute float a_PointSize; 538 void main(){ 539 gl_Position = a_Position; 540 gl_PointSize = a_PointSize; 541 } 542 `); 543 gl.attachShader(program, vShader); 544 let attachedShaders = gl.getAttachedShaders(program); 545 console.info("webgltest getAttachedShaders:", attachedShaders); 546 expect(attachedShaders[0] == vShader).assertTrue(); 547 expect(gl.getError()).assertEqual(gl.NO_ERROR); 548 console.info("webgltest gl.detachShader(program, vShader);"); 549 gl.detachShader(program, vShader); 550 console.info("webgltest getAttachedShaders:", gl.getAttachedShaders(program)); 551 expect(gl.getAttachedShaders(program).length == 0).assertTrue(); 552 gl.deleteShader(vShader); 553 gl.deleteProgram(program); 554 done(); 555 }) 556 557 /** 558 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0023 559 * @tc.name webgl_test_detachShader 560 * @tc.desc Test detachShader. 561 */ 562 it('webgl_test_detachShader', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async function (done) { 563 console.info("webgltest [webgl_test_detachShader] detachShader"); 564 let program = gl.createProgram(); 565 let vShader = initShader(gl, gl.VERTEX_SHADER, ` 566 attribute vec4 a_Position; 567 attribute float a_PointSize; 568 void main(){ 569 gl_Position = a_Position; 570 gl_PointSize = a_PointSize; 571 } 572 `); 573 gl.attachShader(program, vShader); 574 let attachedShaders = gl.getAttachedShaders(program); 575 console.info("webgltest getAttachedShaders:", attachedShaders); 576 expect(attachedShaders[0]).assertEqual(vShader); 577 expect(gl.getError()).assertEqual(gl.NO_ERROR); 578 console.info("webgltest gl.detachShader(program, vShader);"); 579 gl.detachShader(program, vShader); 580 console.info("webgltest getAttachedShaders:", gl.getAttachedShaders(program)); 581 expect(gl.getAttachedShaders(program).length).assertEqual(0); 582 gl.deleteShader(vShader); 583 gl.deleteProgram(program); 584 done(); 585 }) 586 587 /** 588 * WebGL API 的 WebGLRenderingContext.getShaderPrecisionFormat() 589 * 方法返回一个新的 WebGLShaderPrecisionFormat 对象,描述指定着色器的范围和精度 数字格式 590 */ 591 function getShaderPrecisionFormat(callback, finish) { 592 let program = gl.createProgram(); 593 let vShader = initShader(gl, gl.VERTEX_SHADER, ` 594 precision mediump float; 595 attribute vec4 a_Position; 596 attribute float a_PointSize; 597 void main(){ 598 gl_Position = a_Position; 599 gl_PointSize = a_PointSize; 600 } 601 `); 602 gl.attachShader(program, vShader); 603 callback(vShader) 604 finish() 605 gl.deleteShader(vShader); 606 gl.deleteProgram(program); 607 } 608 609 610 /** 611 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0024 612 * @tc.name webgl_test_getShaderPrecisionFormat 613 * @tc.desc Test getShaderPrecisionFormat. 614 */ 615 it('webgl_test_getShaderPrecisionFormat', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 616 async function (done) { 617 console.info("webgltest [webgl_test_getShaderPrecisionFormat] getShaderPrecisionFormat"); 618 let program = gl.createProgram(); 619 let vShader = initShader(gl, gl.VERTEX_SHADER, ` 620 precision mediump float; 621 attribute vec4 a_Position; 622 attribute float a_PointSize; 623 void main(){ 624 gl_Position = a_Position; 625 gl_PointSize = a_PointSize; 626 } 627 `); 628 gl.attachShader(program, vShader); 629 let shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT); 630 expect(gl.getError()).assertEqual(gl.NO_ERROR); 631 console.info('webgltest shaderPrecisionFormat:', JSON.stringify(shaderPrecisionFormat), 632 shaderPrecisionFormat); 633 expect(typeof shaderPrecisionFormat).assertEqual("object"); 634 gl.deleteShader(vShader); 635 gl.deleteProgram(program); 636 done(); 637 }) 638 639 640 /** 641 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0025 642 * @tc.name webgl_test_getShaderPrecisionFormat_1 643 * @tc.desc Test getShaderPrecisionFormat. 644 */ 645 it('webgl_test_getShaderPrecisionFormat_1', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 646 async function (done) { 647 console.info("webgltest [webgl_test_getShaderPrecisionFormat_1] getShaderPrecisionFormat"); 648 getShaderPrecisionFormat((vShader) => { 649 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT); 650 }, () => { 651 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 652 }) 653 done(); 654 }) 655 656 657 /** 658 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0026 659 * @tc.name webgl_test_getShaderPrecisionFormat_2 660 * @tc.desc Test getShaderPrecisionFormat. 661 */ 662 it('webgl_test_getShaderPrecisionFormat_2', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 663 async function (done) { 664 console.info("webgltest [webgl_test_getShaderPrecisionFormat_2] getShaderPrecisionFormat"); 665 getShaderPrecisionFormat((vShader) => { 666 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT); 667 }, () => { 668 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 669 }) 670 done(); 671 }) 672 673 674 /** 675 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0027 676 * @tc.name webgl_test_getShaderPrecisionFormat_3 677 * @tc.desc Test getShaderPrecisionFormat. 678 */ 679 it('webgl_test_getShaderPrecisionFormat_3', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 680 async function (done) { 681 console.info("webgltest [webgl_test_getShaderPrecisionFormat_3] getShaderPrecisionFormat"); 682 getShaderPrecisionFormat((vShader) => { 683 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT); 684 }, () => { 685 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 686 }) 687 done(); 688 }) 689 690 691 /** 692 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0028 693 * @tc.name webgl_test_getShaderPrecisionFormat_4 694 * @tc.desc Test getShaderPrecisionFormat. 695 */ 696 it('webgl_test_getShaderPrecisionFormat_4', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 697 async function (done) { 698 console.info("webgltest [webgl_test_getShaderPrecisionFormat_4] getShaderPrecisionFormat"); 699 getShaderPrecisionFormat((vShader) => { 700 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_INT); 701 }, () => { 702 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 703 }) 704 done(); 705 }) 706 707 708 /** 709 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0029 710 * @tc.name webgl_test_getShaderPrecisionFormat_5 711 * @tc.desc Test getShaderPrecisionFormat. 712 */ 713 it('webgl_test_getShaderPrecisionFormat_5', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 714 async function (done) { 715 console.info("webgltest [webgl_test_getShaderPrecisionFormat_5] getShaderPrecisionFormat"); 716 getShaderPrecisionFormat((vShader) => { 717 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_INT); 718 }, () => { 719 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 720 }) 721 done(); 722 }) 723 724 725 /** 726 * @tc.number GRAPHIC_FUNCTION_JS_WEBGL_SHADER_0030 727 * @tc.name webgl_test_getShaderPrecisionFormat_6 728 * @tc.desc Test getShaderPrecisionFormat. 729 */ 730 it('webgl_test_getShaderPrecisionFormat_6', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, 731 async function (done) { 732 console.info("webgltest [webgl_test_getShaderPrecisionFormat_6] getShaderPrecisionFormat"); 733 getShaderPrecisionFormat((vShader) => { 734 gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_INT); 735 }, () => { 736 expect(checkError(gl)).assertEqual(gl.NO_ERROR); 737 }) 738 done(); 739 }) 740 }) 741} 742