• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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