• 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 } 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