getInternalFormat method

int getInternalFormat(
  1. dynamic internalFormatName,
  2. int glFormat,
  3. int glType,
  4. String colorSpace, [
  5. bool forceLinearTransfer = false,
])

Implementation

int getInternalFormat(internalFormatName, int glFormat, int glType, String colorSpace, [bool forceLinearTransfer = false]) {
		if ( internalFormatName != null ) {
			if ( WebGL.get( internalFormatName ) != null ) return WebGL.get( internalFormatName )!;
			console.warning( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' );
		}

		int internalFormat = glFormat;

		if ( glFormat == WebGL.RED ) {
			if ( glType == WebGL.FLOAT ) internalFormat = WebGL.R32F;
			if ( glType == WebGL.HALF_FLOAT ) internalFormat = WebGL.R16F;
			if ( glType == WebGL.UNSIGNED_BYTE ) internalFormat = WebGL.R8;
		}

		if ( glFormat == WebGL.RED_INTEGER ) {
			if ( glType == WebGL.UNSIGNED_BYTE ) internalFormat = WebGL.R8UI;
			if ( glType == WebGL.UNSIGNED_SHORT ) internalFormat = WebGL.R16UI;
			if ( glType == WebGL.UNSIGNED_INT ) internalFormat = WebGL.R32UI;
			if ( glType == WebGL.BYTE ) internalFormat = WebGL.R8I;
			if ( glType == WebGL.SHORT ) internalFormat = WebGL.R16I;
			if ( glType == WebGL.INT ) internalFormat = WebGL.R32I;
		}

		if ( glFormat == WebGL.RG ) {
			if ( glType == WebGL.FLOAT ) internalFormat = WebGL.RG32F;
			if ( glType == WebGL.HALF_FLOAT ) internalFormat = WebGL.RG16F;
			if ( glType == WebGL.UNSIGNED_BYTE ) internalFormat = WebGL.RG8;
		}

		if ( glFormat == WebGL.RG_INTEGER ) {
			if ( glType == WebGL.UNSIGNED_BYTE ) internalFormat = WebGL.RG8UI;
			if ( glType == WebGL.UNSIGNED_SHORT ) internalFormat = WebGL.RG16UI;
			if ( glType == WebGL.UNSIGNED_INT ) internalFormat = WebGL.RG32UI;
			if ( glType == WebGL.BYTE ) internalFormat = WebGL.RG8I;
			if ( glType == WebGL.SHORT ) internalFormat = WebGL.RG16I;
			if ( glType == WebGL.INT ) internalFormat = WebGL.RG32I;
		}

		if ( glFormat == WebGL.RGB_INTEGER ) {
			if ( glType == WebGL.UNSIGNED_BYTE ) internalFormat = WebGL.RGB8UI;
			if ( glType == WebGL.UNSIGNED_SHORT ) internalFormat = WebGL.RGB16UI;
			if ( glType == WebGL.UNSIGNED_INT ) internalFormat = WebGL.RGB32UI;
			if ( glType == WebGL.BYTE ) internalFormat = WebGL.RGB8I;
			if ( glType == WebGL.SHORT ) internalFormat = WebGL.RGB16I;
			if ( glType == WebGL.INT ) internalFormat = WebGL.RGB32I;
		}

		if ( glFormat == WebGL.RGBA_INTEGER ) {

			if ( glType == WebGL.UNSIGNED_BYTE ) internalFormat = WebGL.RGBA8UI;
			if ( glType == WebGL.UNSIGNED_SHORT ) internalFormat = WebGL.RGBA16UI;
			if ( glType == WebGL.UNSIGNED_INT ) internalFormat = WebGL.RGBA32UI;
			if ( glType == WebGL.SHORT ) internalFormat = WebGL.RGBA16I;
			if ( glType == WebGL.INT ) internalFormat = WebGL.RGBA32I;

		}

		if ( glFormat == WebGL.RGB ) {
			if ( glType == WebGL.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = WebGL.RGB9_E5;
		}

		if ( glFormat == WebGL.RGBA ) {
			final String transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer( ColorSpace.fromString(colorSpace));

			if ( glType == WebGL.FLOAT ) internalFormat = WebGL.RGBA32F;
			if ( glType == WebGL.HALF_FLOAT ) internalFormat = WebGL.RGBA16F;
			if ( glType == WebGL.UNSIGNED_BYTE ) internalFormat = ( transfer == SRGBTransfer ) ? WebGL.SRGB8_ALPHA8 : WebGL.RGBA8;
			if ( glType == WebGL.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = WebGL.RGBA4;
			if ( glType == WebGL.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = WebGL.RGB5_A1;
		}

		if ( internalFormat == WebGL.R16F || internalFormat == WebGL.R32F ||
			internalFormat == WebGL.RG16F || internalFormat == WebGL.RG32F ||
			internalFormat == WebGL.RGBA16F || internalFormat == WebGL.RGBA32F ) {
			extensions.get( 'EXT_color_buffer_float' );
		}

		return internalFormat;
}