소스 검색

WebGLTextures: Added DataTexture unpackAlignment check. See #9566.

Mr.doob 9 년 전
부모
커밋
888b6be98b
1개의 변경된 파일12개의 추가작업 그리고 1개의 파일을 삭제
  1. 12 1
      src/renderers/webgl/WebGLTextures.js

+ 12 - 1
src/renderers/webgl/WebGLTextures.js

@@ -2,7 +2,7 @@
  * @author mrdoob / http://mrdoob.com/
  */
 
-import { LinearFilter, NearestFilter, RGBFormat, RGBAFormat, DepthFormat, DepthStencilFormat, FloatType, HalfFloatType, ClampToEdgeWrapping, NearestMipMapLinearFilter, NearestMipMapNearestFilter } from '../../constants';
+import { LinearFilter, NearestFilter, RGBFormat, RGBAFormat, DepthFormat, DepthStencilFormat, FloatType, HalfFloatType, UnsignedByteType, ClampToEdgeWrapping, NearestMipMapLinearFilter, NearestMipMapNearestFilter } from '../../constants';
 import { _Math } from '../../math/Math';
 
 function WebGLTextures( _gl, extensions, state, properties, capabilities, paramThreeToGL, info ) {
@@ -410,6 +410,17 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, paramT
 
 		_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
 		_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
+
+		if ( texture.isDataTexture && texture.unpackAlignment !== 1 &&
+			_Math.isPowerOfTwo( texture.image.width ) === false &&
+			texture.format === RGBFormat &&
+			texture.type === UnsignedByteType ) {
+
+			console.warn( 'THREE.WebGLRenderer: Changed unpackAlignment to 1. See #9566.', texture );
+			texture.unpackAlignment = 1;
+
+		}
+
 		_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
 
 		var image = clampToMaxSize( texture.image, capabilities.maxTextureSize );