UNPKG

@awayjs/renderer

Version:
96 lines (76 loc) 2.66 kB
import { ImageSampler, ImageCube, ImageUtils } from '@awayjs/stage'; import { TextureCube } from './TextureCube'; export class ImageTextureCube extends TextureCube { public static assetType: string = '[texture ImageTextureCube]'; /** * * @returns {string} */ public get assetType(): string { return ImageTextureCube.assetType; } /** * * @returns {ImageCube} */ public get sampler(): ImageSampler { return <ImageSampler> this._samplers[0]; } public set sampler(value: ImageSampler) { if (this._samplers[0] == value) return; this.setSamplerAt(value, 0); } /** * * @returns {ImageCube} */ public get image(): ImageCube { return <ImageCube> this._images[0]; } public set image(value: ImageCube) { if (this._images[0] == value) return; this.setImageAt(value, 0); } constructor(image: ImageCube = null) { super(); this.setNumImages(1); this.image = image; } } import { ShaderRegisterCache, ShaderRegisterData, ShaderRegisterElement, _Stage_ImageBase } from '@awayjs/stage'; import { _Shader_TextureBase } from '../base/_Shader_TextureBase'; import { _Render_RenderableBase } from '../base/_Render_RenderableBase'; import { ShaderBase } from '../base/ShaderBase'; /** * * @class away.pool.GL_SingleImageTexture */ export class _Shader_ImageTexture extends _Shader_TextureBase { protected _textureIndex: number; protected _imageIndex: number; protected _samplerIndex: number; /** * * @param shader * @param regCache * @param targetReg The register in which to store the sampled colour. * @param uvReg The uv coordinate vector with which to sample the texture map. * @returns {string} * @private */ public _getFragmentCode(targetReg: ShaderRegisterElement, regCache: ShaderRegisterCache, sharedReg: ShaderRegisterData, inputReg: ShaderRegisterElement): string { const wrap: string = 'wrap'; const format: string = ''; const filter: string = 'linear,miplinear'; this._imageIndex = this._shader.renderMaterial.getImageIndex(this.texture, 0); const textureReg: ShaderRegisterElement = this.getTextureReg(this._imageIndex, regCache, sharedReg); this._textureIndex = textureReg.index; return 'tex ' + targetReg + ', ' + inputReg + ', ' + textureReg + ' <' + this._shader.renderMaterial.images[this._imageIndex].getImageType() + ',' + filter + ',' + format + wrap + '>\n'; } public _setRenderState(renderState: _Render_RenderableBase): void { renderState.images[this._imageIndex].activate(this._textureIndex, renderState.samplers[this._imageIndex]); } } ShaderBase.registerAbstraction(_Shader_ImageTexture, ImageTextureCube);