1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import { ProcessingOptions } from './shaderProcessingOptions';
- import { StringTools } from '../../Misc/stringTools';
- /** @hidden */
- export class ShaderCodeNode {
- line: string;
- children: ShaderCodeNode[] = [];
- additionalDefineKey?: string;
- additionalDefineValue?: string;
- isValid(preprocessors: { [key: string]: string }): boolean {
- return true;
- }
- process(preprocessors: { [key: string]: string }, options: ProcessingOptions): string {
- let result = "";
- if (this.line) {
- let value: string = this.line;
- let processor = options.processor;
- if (processor) {
- if (processor.attributeProcessor && StringTools.StartsWith(this.line, "attribute")) {
- value = processor.attributeProcessor(this.line);
- } else if (processor.varyingProcessor && StringTools.StartsWith(this.line, "varying")) {
- value = processor.varyingProcessor(this.line, options.isFragment);
- } else if ((processor.uniformProcessor || processor.uniformBufferProcessor) && StringTools.StartsWith(this.line, "uniform")) {
- let regex = /uniform (.+) (.+)/;
- if (regex.test(this.line)) { // uniform
- if (processor.uniformProcessor) {
- value = processor.uniformProcessor(this.line, options.isFragment);
- }
- } else { // Uniform buffer
- if (processor.uniformBufferProcessor) {
- value = processor.uniformBufferProcessor(this.line, options.isFragment);
- options.lookForClosingBracketForUniformBuffer = true;
- }
- }
- }
- if (processor.endOfUniformBufferProcessor) {
- if (options.lookForClosingBracketForUniformBuffer && this.line.indexOf("}") !== -1) {
- options.lookForClosingBracketForUniformBuffer = false;
- value = processor.endOfUniformBufferProcessor(this.line, options.isFragment);
- }
- }
- if (processor.lineProcessor) {
- value = processor.lineProcessor(value, options.isFragment);
- }
- }
- result += value + "\r\n";
- }
- this.children.forEach((child) => {
- result += child.process(preprocessors, options);
- });
- if (this.additionalDefineKey) {
- preprocessors[this.additionalDefineKey] = this.additionalDefineValue || "true";
- }
- return result;
- }
- }
|