mirror of
				https://github.com/unanmed/HumanBreak.git
				synced 2025-11-01 04:42:58 +08:00 
			
		
		
		
	feat: framebuffer
This commit is contained in:
		
							parent
							
								
									a8aaaed8ea
								
							
						
					
					
						commit
						b599f9f146
					
				| @ -198,6 +198,8 @@ export class Shader extends Container<EShaderEvent> { | |||||||
| 
 | 
 | ||||||
|     /** 当前渲染实例的所有着色器程序 */ |     /** 当前渲染实例的所有着色器程序 */ | ||||||
|     private programs: Set<ShaderProgram> = new Set(); |     private programs: Set<ShaderProgram> = new Set(); | ||||||
|  |     /** framebuffer 映射 */ | ||||||
|  |     private framebufferMap: Map<string, WebGLFramebuffer> = new Map(); | ||||||
| 
 | 
 | ||||||
|     constructor(type: RenderItemPosition = 'static') { |     constructor(type: RenderItemPosition = 'static') { | ||||||
|         super(type, !Shader.support); |         super(type, !Shader.support); | ||||||
| @ -297,6 +299,17 @@ export class Shader extends Container<EShaderEvent> { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         this.draw(gl, program, param, indices); | ||||||
|  | 
 | ||||||
|  |         this.postDraw(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private draw( | ||||||
|  |         gl: WebGL2RenderingContext, | ||||||
|  |         program: ShaderProgram, | ||||||
|  |         param: DrawParamsMap[keyof DrawParamsMap], | ||||||
|  |         indices: IShaderIndices | ||||||
|  |     ) { | ||||||
|         switch (program.renderMode) { |         switch (program.renderMode) { | ||||||
|             case RenderMode.Arrays: { |             case RenderMode.Arrays: { | ||||||
|                 const { mode, first, count } = param as DrawArraysParam; |                 const { mode, first, count } = param as DrawArraysParam; | ||||||
| @ -325,8 +338,6 @@ export class Shader extends Container<EShaderEvent> { | |||||||
|                 gl.drawElementsInstanced(mode, count, type, offset, ins); |                 gl.drawElementsInstanced(mode, count, type, offset, ins); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         this.postDraw(); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -357,6 +368,75 @@ export class Shader extends Container<EShaderEvent> { | |||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 将画面渲染至帧缓冲 | ||||||
|  |      * @param name 帧缓冲名称 | ||||||
|  |      * @param texture 渲染至的纹理 | ||||||
|  |      * @param clear 是否先清空画布再渲染 | ||||||
|  |      */ | ||||||
|  |     framebuffer( | ||||||
|  |         name: string, | ||||||
|  |         texture: IShaderTexture2D, | ||||||
|  |         clear: boolean = true | ||||||
|  |     ) { | ||||||
|  |         const gl = this.gl; | ||||||
|  |         const buffer = this.framebufferMap.get(name); | ||||||
|  |         const program = this.program; | ||||||
|  |         if (!gl || !buffer || !program) return; | ||||||
|  |         const indices = program.usingIndices; | ||||||
|  |         if (!indices) return; | ||||||
|  |         const param = program.getDrawParams(program.renderMode); | ||||||
|  |         if (!param) return; | ||||||
|  | 
 | ||||||
|  |         const tex = texture.texture; | ||||||
|  |         gl.bindTexture(gl.TEXTURE_2D, tex); | ||||||
|  |         gl.bindFramebuffer(gl.FRAMEBUFFER, buffer); | ||||||
|  |         if (clear) { | ||||||
|  |             gl.viewport(0, 0, this.canvas.width, this.canvas.height); | ||||||
|  |             gl.clearColor(0, 0, 0, 0); | ||||||
|  |             gl.clearDepth(1); | ||||||
|  |             gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); | ||||||
|  |         } | ||||||
|  |         gl.framebufferTexture2D( | ||||||
|  |             gl.FRAMEBUFFER, | ||||||
|  |             gl.COLOR_ATTACHMENT0, | ||||||
|  |             gl.TEXTURE_2D, | ||||||
|  |             tex, | ||||||
|  |             0 | ||||||
|  |         ); | ||||||
|  |         this.draw(gl, program, param, indices); | ||||||
|  |         gl.bindFramebuffer(gl.FRAMEBUFFER, null); | ||||||
|  |         gl.bindTexture(gl.TEXTURE_2D, null); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 创建一个帧缓冲对象 | ||||||
|  |      * @param name 帧缓冲名称 | ||||||
|  |      * @returns 是否创建成功 | ||||||
|  |      */ | ||||||
|  |     createFramebuffer(name: string): boolean { | ||||||
|  |         const gl = this.gl; | ||||||
|  |         if (!gl) return false; | ||||||
|  |         const buffer = gl.createFramebuffer(); | ||||||
|  |         if (!buffer) return false; | ||||||
|  |         this.framebufferMap.set(name, buffer); | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 删除一个帧缓冲对象 | ||||||
|  |      * @param name 帧缓冲名称 | ||||||
|  |      * @returns 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     deleteFramebuffer(name: string): boolean { | ||||||
|  |         const gl = this.gl; | ||||||
|  |         if (!gl) return false; | ||||||
|  |         const buffer = this.framebufferMap.get(name); | ||||||
|  |         if (!buffer) return false; | ||||||
|  |         gl.deleteFramebuffer(buffer); | ||||||
|  |         return this.framebufferMap.delete(name); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * 切换着色器程序 |      * 切换着色器程序 | ||||||
|      * @param program 着色器程序 |      * @param program 着色器程序 | ||||||
| @ -469,6 +549,8 @@ interface IShaderUniform<T extends UniformType> { | |||||||
|     readonly location: WebGLUniformLocation; |     readonly location: WebGLUniformLocation; | ||||||
|     /** 这个 uniform 变量的类型 */ |     /** 这个 uniform 变量的类型 */ | ||||||
|     readonly type: T; |     readonly type: T; | ||||||
|  |     /** 这个量所处的着色器程序 */ | ||||||
|  |     readonly program: ShaderProgram; | ||||||
|     /** |     /** | ||||||
|      * 设置这个 uniform 变量的值, |      * 设置这个 uniform 变量的值, | ||||||
|      * 参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGL2RenderingContext/uniform
 |      * 参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGL2RenderingContext/uniform
 | ||||||
| @ -482,6 +564,8 @@ interface IShaderAttrib<T extends AttribType> { | |||||||
|     readonly location: number; |     readonly location: number; | ||||||
|     /** 这个 attribute 常量的类型 */ |     /** 这个 attribute 常量的类型 */ | ||||||
|     readonly type: T; |     readonly type: T; | ||||||
|  |     /** 这个量所处的着色器程序 */ | ||||||
|  |     readonly program: ShaderProgram; | ||||||
|     /** |     /** | ||||||
|      * 设置这个 attribute 常量的值, |      * 设置这个 attribute 常量的值, | ||||||
|      * 浮点数参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/vertexAttrib
 |      * 浮点数参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/vertexAttrib
 | ||||||
| @ -496,6 +580,8 @@ interface IShaderAttribArray { | |||||||
|     readonly location: number; |     readonly location: number; | ||||||
|     /** 这个 attribute 所用的缓冲区信息 */ |     /** 这个 attribute 所用的缓冲区信息 */ | ||||||
|     readonly data: WebGLBuffer; |     readonly data: WebGLBuffer; | ||||||
|  |     /** 这个量所处的着色器程序 */ | ||||||
|  |     readonly program: ShaderProgram; | ||||||
|     /** |     /** | ||||||
|      * 修改缓冲区数据,会更改数据大小,重新分配内存,不更改数据大小的情况下建议使用 {@link sub} 代替。 |      * 修改缓冲区数据,会更改数据大小,重新分配内存,不更改数据大小的情况下建议使用 {@link sub} 代替。 | ||||||
|      * 参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/bufferData
 |      * 参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/bufferData
 | ||||||
| @ -587,6 +673,8 @@ interface IShaderAttribArray { | |||||||
| interface IShaderIndices { | interface IShaderIndices { | ||||||
|     /** 这个顶点索引所用的缓冲区信息 */ |     /** 这个顶点索引所用的缓冲区信息 */ | ||||||
|     readonly data: WebGLBuffer; |     readonly data: WebGLBuffer; | ||||||
|  |     /** 这个量所处的着色器程序 */ | ||||||
|  |     readonly program: ShaderProgram; | ||||||
|     /** |     /** | ||||||
|      * 修改缓冲区数据,会更改数据大小,重新分配内存,不更改数据大小的情况下建议使用 {@link sub} 代替。 |      * 修改缓冲区数据,会更改数据大小,重新分配内存,不更改数据大小的情况下建议使用 {@link sub} 代替。 | ||||||
|      * 参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/bufferData
 |      * 参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/bufferData
 | ||||||
| @ -636,6 +724,8 @@ interface IShaderUniformMatrix { | |||||||
|     readonly location: WebGLUniformLocation; |     readonly location: WebGLUniformLocation; | ||||||
|     /** 矩阵类型 */ |     /** 矩阵类型 */ | ||||||
|     readonly type: UniformMatrix; |     readonly type: UniformMatrix; | ||||||
|  |     /** 这个量所处的着色器程序 */ | ||||||
|  |     readonly program: ShaderProgram; | ||||||
|     /** |     /** | ||||||
|      * 设置矩阵的值,参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGL2RenderingContext/uniformMatrix
 |      * 设置矩阵的值,参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGL2RenderingContext/uniformMatrix
 | ||||||
|      * @param transpose 是否转置矩阵 |      * @param transpose 是否转置矩阵 | ||||||
| @ -653,11 +743,13 @@ interface IShaderUniformMatrix { | |||||||
| 
 | 
 | ||||||
| interface IShaderUniformBlock { | interface IShaderUniformBlock { | ||||||
|     /** 这个 uniform block 的内存地址 */ |     /** 这个 uniform block 的内存地址 */ | ||||||
|     location: GLuint; |     readonly location: GLuint; | ||||||
|     /** 与这个 uniform block 所绑定的缓冲区 */ |     /** 与这个 uniform block 所绑定的缓冲区 */ | ||||||
|     buffer: WebGLBuffer; |     readonly buffer: WebGLBuffer; | ||||||
|     /** 这个 uniform block 的大小 */ |     /** 这个 uniform block 的大小 */ | ||||||
|     size: number; |     readonly size: number; | ||||||
|  |     /** 这个量所处的着色器程序 */ | ||||||
|  |     readonly program: ShaderProgram; | ||||||
|     /** |     /** | ||||||
|      * 参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGL2RenderingContext/bindBufferBase
 |      * 参考 https://developer.mozilla.org/zh-CN/docs/Web/API/WebGL2RenderingContext/bindBufferBase
 | ||||||
|      * @param srcData 要设置为的值 |      * @param srcData 要设置为的值 | ||||||
| @ -681,6 +773,8 @@ interface IShaderTexture2D { | |||||||
|     readonly height: number; |     readonly height: number; | ||||||
|     /** 纹理所属索引 */ |     /** 纹理所属索引 */ | ||||||
|     readonly index: number; |     readonly index: number; | ||||||
|  |     /** 这个量所处的着色器程序 */ | ||||||
|  |     readonly program: ShaderProgram; | ||||||
|     /** |     /** | ||||||
|      * 设置这个纹理的图像,不建议使用,会修改宽高 |      * 设置这个纹理的图像,不建议使用,会修改宽高 | ||||||
|      * @param source 要设置成的图像源 |      * @param source 要设置成的图像源 | ||||||
| @ -707,7 +801,8 @@ class ShaderUniform<T extends UniformType> implements IShaderUniform<T> { | |||||||
|     constructor( |     constructor( | ||||||
|         readonly type: T, |         readonly type: T, | ||||||
|         readonly location: WebGLUniformLocation, |         readonly location: WebGLUniformLocation, | ||||||
|         readonly gl: WebGL2RenderingContext |         readonly gl: WebGL2RenderingContext, | ||||||
|  |         readonly program: ShaderProgram | ||||||
|     ) {} |     ) {} | ||||||
| 
 | 
 | ||||||
|     set(...params: UniformSetFn[T]): void { |     set(...params: UniformSetFn[T]): void { | ||||||
| @ -798,7 +893,8 @@ class ShaderAttrib<T extends AttribType> implements IShaderAttrib<T> { | |||||||
|     constructor( |     constructor( | ||||||
|         readonly type: T, |         readonly type: T, | ||||||
|         readonly location: number, |         readonly location: number, | ||||||
|         readonly gl: WebGL2RenderingContext |         readonly gl: WebGL2RenderingContext, | ||||||
|  |         readonly program: ShaderProgram | ||||||
|     ) {} |     ) {} | ||||||
| 
 | 
 | ||||||
|     set(...params: AttribSetFn[T]) { |     set(...params: AttribSetFn[T]) { | ||||||
| @ -856,7 +952,8 @@ class ShaderAttribArray implements IShaderAttribArray { | |||||||
|     constructor( |     constructor( | ||||||
|         readonly data: WebGLBuffer, |         readonly data: WebGLBuffer, | ||||||
|         readonly location: number, |         readonly location: number, | ||||||
|         readonly gl: WebGL2RenderingContext |         readonly gl: WebGL2RenderingContext, | ||||||
|  |         readonly program: ShaderProgram | ||||||
|     ) {} |     ) {} | ||||||
| 
 | 
 | ||||||
|     buffer(data: AllowSharedBufferSource | null, usage: GLenum): void; |     buffer(data: AllowSharedBufferSource | null, usage: GLenum): void; | ||||||
| @ -933,7 +1030,8 @@ class ShaderAttribArray implements IShaderAttribArray { | |||||||
| class ShaderIndices implements IShaderIndices { | class ShaderIndices implements IShaderIndices { | ||||||
|     constructor( |     constructor( | ||||||
|         readonly data: WebGLBuffer, |         readonly data: WebGLBuffer, | ||||||
|         readonly gl: WebGL2RenderingContext |         readonly gl: WebGL2RenderingContext, | ||||||
|  |         readonly program: ShaderProgram | ||||||
|     ) {} |     ) {} | ||||||
| 
 | 
 | ||||||
|     buffer(data: AllowSharedBufferSource | null, usage: GLenum): void; |     buffer(data: AllowSharedBufferSource | null, usage: GLenum): void; | ||||||
| @ -975,7 +1073,8 @@ class ShaderUniformMatrix implements IShaderUniformMatrix { | |||||||
|     constructor( |     constructor( | ||||||
|         readonly type: UniformMatrix, |         readonly type: UniformMatrix, | ||||||
|         readonly location: WebGLUniformLocation, |         readonly location: WebGLUniformLocation, | ||||||
|         readonly gl: WebGL2RenderingContext |         readonly gl: WebGL2RenderingContext, | ||||||
|  |         readonly program: ShaderProgram | ||||||
|     ) {} |     ) {} | ||||||
| 
 | 
 | ||||||
|     set(x2: GLboolean, x3: Float32List, x4?: number, x5?: number): void { |     set(x2: GLboolean, x3: Float32List, x4?: number, x5?: number): void { | ||||||
| @ -1017,7 +1116,8 @@ class ShaderUniformBlock implements IShaderUniformBlock { | |||||||
|         readonly size: number, |         readonly size: number, | ||||||
|         readonly buffer: WebGLBuffer, |         readonly buffer: WebGLBuffer, | ||||||
|         readonly binding: number, |         readonly binding: number, | ||||||
|         readonly gl: WebGL2RenderingContext |         readonly gl: WebGL2RenderingContext, | ||||||
|  |         readonly program: ShaderProgram | ||||||
|     ) {} |     ) {} | ||||||
| 
 | 
 | ||||||
|     set(srcData: AllowSharedBufferSource | null): void; |     set(srcData: AllowSharedBufferSource | null): void; | ||||||
| @ -1043,6 +1143,7 @@ class ShaderTexture2D implements IShaderTexture2D { | |||||||
|         readonly index: number, |         readonly index: number, | ||||||
|         readonly uniform: IShaderUniform<UniformType.Uniform1i>, |         readonly uniform: IShaderUniform<UniformType.Uniform1i>, | ||||||
|         readonly gl: WebGL2RenderingContext, |         readonly gl: WebGL2RenderingContext, | ||||||
|  |         readonly program: ShaderProgram, | ||||||
|         public width: number = 0, |         public width: number = 0, | ||||||
|         public height: number = 0 |         public height: number = 0 | ||||||
|     ) { |     ) { | ||||||
| @ -1509,7 +1610,7 @@ export class ShaderProgram extends EventEmitter<ShaderProgramEvent> { | |||||||
|         if (!program || !gl) return null; |         if (!program || !gl) return null; | ||||||
|         const location = gl.getUniformLocation(program, uniform); |         const location = gl.getUniformLocation(program, uniform); | ||||||
|         if (!location) return null; |         if (!location) return null; | ||||||
|         const obj = new ShaderUniform(type, location, gl); |         const obj = new ShaderUniform(type, location, gl, this); | ||||||
|         this.uniform.set(uniform, obj); |         this.uniform.set(uniform, obj); | ||||||
|         return obj; |         return obj; | ||||||
|     } |     } | ||||||
| @ -1537,7 +1638,7 @@ export class ShaderProgram extends EventEmitter<ShaderProgramEvent> { | |||||||
|         if (!program || !gl) return null; |         if (!program || !gl) return null; | ||||||
|         const location = gl.getUniformLocation(program, uniform); |         const location = gl.getUniformLocation(program, uniform); | ||||||
|         if (!location) return null; |         if (!location) return null; | ||||||
|         const obj = new ShaderUniformMatrix(type, location, gl); |         const obj = new ShaderUniformMatrix(type, location, gl, this); | ||||||
|         this.matrix.set(uniform, obj); |         this.matrix.set(uniform, obj); | ||||||
|         return obj; |         return obj; | ||||||
|     } |     } | ||||||
| @ -1565,7 +1666,7 @@ export class ShaderProgram extends EventEmitter<ShaderProgramEvent> { | |||||||
|         if (!program || !gl) return null; |         if (!program || !gl) return null; | ||||||
|         const location = gl.getAttribLocation(program, attrib); |         const location = gl.getAttribLocation(program, attrib); | ||||||
|         if (location === -1) return null; |         if (location === -1) return null; | ||||||
|         const obj = new ShaderAttrib(type, location, gl); |         const obj = new ShaderAttrib(type, location, gl, this); | ||||||
|         this.attribute.set(attrib, obj); |         this.attribute.set(attrib, obj); | ||||||
|         return obj; |         return obj; | ||||||
|     } |     } | ||||||
| @ -1583,7 +1684,7 @@ export class ShaderProgram extends EventEmitter<ShaderProgramEvent> { | |||||||
|         const buffer = gl.createBuffer(); |         const buffer = gl.createBuffer(); | ||||||
|         if (!buffer) return null; |         if (!buffer) return null; | ||||||
|         const location = gl.getAttribLocation(program, name); |         const location = gl.getAttribLocation(program, name); | ||||||
|         const obj = new ShaderAttribArray(buffer, location, gl); |         const obj = new ShaderAttribArray(buffer, location, gl, this); | ||||||
|         this.attribArray.set(name, obj); |         this.attribArray.set(name, obj); | ||||||
|         return obj; |         return obj; | ||||||
|     } |     } | ||||||
| @ -1600,7 +1701,7 @@ export class ShaderProgram extends EventEmitter<ShaderProgramEvent> { | |||||||
|         if (!program || !gl) return null; |         if (!program || !gl) return null; | ||||||
|         const buffer = gl.createBuffer(); |         const buffer = gl.createBuffer(); | ||||||
|         if (!buffer) return null; |         if (!buffer) return null; | ||||||
|         const obj = new ShaderIndices(buffer, gl); |         const obj = new ShaderIndices(buffer, gl, this); | ||||||
|         this.indices.set(name, obj); |         this.indices.set(name, obj); | ||||||
|         return obj; |         return obj; | ||||||
|     } |     } | ||||||
| @ -1637,17 +1738,17 @@ export class ShaderProgram extends EventEmitter<ShaderProgramEvent> { | |||||||
|         const program = this.program; |         const program = this.program; | ||||||
|         const gl = this.element.gl; |         const gl = this.element.gl; | ||||||
|         if (!program || !gl) return null; |         if (!program || !gl) return null; | ||||||
|         const location = gl.getUniformBlockIndex(program, block); |         const loc = gl.getUniformBlockIndex(program, block); | ||||||
|         if (location === -1) return null; |         if (loc === -1) return null; | ||||||
|         const buffer = gl.createBuffer(); |         const buf = gl.createBuffer(); | ||||||
|         if (!buffer) return null; |         if (!buf) return null; | ||||||
|         const data = new Float32Array(size); |         const data = new Float32Array(size); | ||||||
|         data.fill(0); |         data.fill(0); | ||||||
|         gl.bindBuffer(gl.UNIFORM_BUFFER, buffer); |         gl.bindBuffer(gl.UNIFORM_BUFFER, buf); | ||||||
|         gl.bufferData(gl.UNIFORM_BUFFER, data, usage); |         gl.bufferData(gl.UNIFORM_BUFFER, data, usage); | ||||||
|         gl.uniformBlockBinding(program, location, binding); |         gl.uniformBlockBinding(program, loc, binding); | ||||||
|         gl.bindBufferBase(gl.UNIFORM_BUFFER, binding, buffer); |         gl.bindBufferBase(gl.UNIFORM_BUFFER, binding, buf); | ||||||
|         const obj = new ShaderUniformBlock(location, size, buffer, binding, gl); |         const obj = new ShaderUniformBlock(loc, size, buf, binding, gl, this); | ||||||
|         this.block.set(block, obj); |         this.block.set(block, obj); | ||||||
|         return obj; |         return obj; | ||||||
|     } |     } | ||||||
| @ -1657,15 +1758,15 @@ export class ShaderProgram extends EventEmitter<ShaderProgramEvent> { | |||||||
|      * @param name 纹理名称 |      * @param name 纹理名称 | ||||||
|      * @param index 纹理索引,根据不同浏览器,其最大数量不一定相等,根据标准其数量应该大于等于 8 个, |      * @param index 纹理索引,根据不同浏览器,其最大数量不一定相等,根据标准其数量应该大于等于 8 个, | ||||||
|      *              因此考虑到兼容性,不建议纹理数量超过 8 个。 |      *              因此考虑到兼容性,不建议纹理数量超过 8 个。 | ||||||
|      * @param width 纹理的宽度 |      * @param w 纹理的宽度 | ||||||
|      * @param height 纹理的高度 |      * @param h 纹理的高度 | ||||||
|      * @returns 这个 texture 的操作对象,可以用于设置其内容 |      * @returns 这个 texture 的操作对象,可以用于设置其内容 | ||||||
|      */ |      */ | ||||||
|     defineTexture( |     defineTexture( | ||||||
|         name: string, |         name: string, | ||||||
|         index: number, |         index: number, | ||||||
|         width?: number, |         w?: number, | ||||||
|         height?: number |         h?: number | ||||||
|     ): IShaderTexture2D | null { |     ): IShaderTexture2D | null { | ||||||
|         const u = this.getTexture(name); |         const u = this.getTexture(name); | ||||||
|         if (u) { |         if (u) { | ||||||
| @ -1679,14 +1780,14 @@ export class ShaderProgram extends EventEmitter<ShaderProgramEvent> { | |||||||
|             logger.warn(29); |             logger.warn(29); | ||||||
|             return null; |             return null; | ||||||
|         } |         } | ||||||
|         const uniform = this.defineUniform(name, UniformType.Uniform1i); |         const uni = this.defineUniform(name, UniformType.Uniform1i); | ||||||
|         if (!uniform) return null; |         if (!uni) return null; | ||||||
|         const program = this.program; |         const program = this.program; | ||||||
|         const gl = this.element.gl; |         const gl = this.element.gl; | ||||||
|         if (!program || !gl) return null; |         if (!program || !gl) return null; | ||||||
|         const tex = gl.createTexture(); |         const tex = gl.createTexture(); | ||||||
|         if (!tex) return null; |         if (!tex) return null; | ||||||
|         const obj = new ShaderTexture2D(tex, index, uniform, gl, width, height); |         const obj = new ShaderTexture2D(tex, index, uni, gl, this, w, h); | ||||||
|         this.texture.set(name, obj); |         this.texture.set(name, obj); | ||||||
|         return obj; |         return obj; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -54,7 +54,7 @@ | |||||||
|         "28": "Redefinition of shader $1: '$2'", |         "28": "Redefinition of shader $1: '$2'", | ||||||
|         "29": "Cannot define new texture since texture index is larger than max texture count.", |         "29": "Cannot define new texture since texture index is larger than max texture count.", | ||||||
|         "30": "Cannot use indices named $1 since no definition for it. Please define it in advance.", |         "30": "Cannot use indices named $1 since no definition for it. Please define it in advance.", | ||||||
|         "31": "Cannot use indices since the indices instance is not belongs to the program.", |         "31": "Cannot use indices since the indices instance is not belong to the program.", | ||||||
|         "32": "Sub-image exceeds texture dimensions, auto adjusting size.", |         "32": "Sub-image exceeds texture dimensions, auto adjusting size.", | ||||||
|         "1001": "Item-detail extension needs 'floor-binder' and 'floor-damage' extension as dependency.", |         "1001": "Item-detail extension needs 'floor-binder' and 'floor-damage' extension as dependency.", | ||||||
|         "1101": "Cannot add new effect to point effect instance, for there's no more reserve space for it. Please increase the max count of the instance." |         "1101": "Cannot add new effect to point effect instance, for there's no more reserve space for it. Please increase the max count of the instance." | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user