onnxruntime

Форк
0
/
glsl-array-lib.ts 
74 строки · 1.9 Кб
1
// Copyright (c) Microsoft Corporation. All rights reserved.
2
// Licensed under the MIT License.
3

4
import { GlslContext, GlslLib, GlslLibRoutine } from './glsl-definitions';
5
/**
6
 * This library produces routines needed for non-constant access to uniform arrays
7
 */
8
export class ArrayGlslLib extends GlslLib {
9
  getFunctions(): { [name: string]: GlslLibRoutine } {
10
    return this.generate();
11
  }
12
  getCustomTypes(): { [name: string]: string } {
13
    return {};
14
  }
15
  constructor(context: GlslContext) {
16
    super(context);
17
  }
18
  protected generate(): { [name: string]: GlslLibRoutine } {
19
    const result: { [name: string]: GlslLibRoutine } = {};
20
    for (let i = 1; i <= 16; i++) {
21
      result[`setItem${i}`] = new GlslLibRoutine(this.generateSetItem(i));
22
      result[`getItem${i}`] = new GlslLibRoutine(this.generateGetItem(i));
23
    }
24
    return result;
25
  }
26
  protected generateSetItem(length: number): string {
27
    let block = `
28
       if(index < 0)
29
           index = ${length} + index;
30
       if (index == 0)
31
           a[0] = value;
32
       `;
33
    for (let i = 1; i < length - 1; ++i) {
34
      block += `
35
       else if (index == ${i})
36
           a[${i}] = value;
37
           `;
38
    }
39
    block += `
40
       else
41
           a[${length - 1}] = value;
42
       `;
43
    const body = `
44
     void setItem${length}(out float a[${length}], int index, float value) {
45
       ${block}
46
     }
47
       `;
48
    return body;
49
  }
50
  protected generateGetItem(length: number): string {
51
    let block = `
52
       if(index < 0)
53
           index = ${length} + index;
54
       if (index == 0)
55
           return a[0];
56
     `;
57
    for (let i = 1; i < length - 1; ++i) {
58
      block += `
59
       else if (index == ${i})
60
           return a[${i}];
61
     `;
62
    }
63
    block += `
64
       else
65
           return a[${length - 1}];
66
       `;
67
    const body = `
68
     float getItem${length}(float a[${length}], int index) {
69
       ${block}
70
     }
71
   `;
72
    return body;
73
  }
74
}
75

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.