Browse Source

KTX2Loader: Support .generateMipmaps=true (#31621)

* KTX2Loader: Support .generateMipmaps=true
* KTX2Exporter: Update to ktx-parse v1.1
Don McCurdy 5 tháng trước cách đây
mục cha
commit
c06699ee25

+ 4 - 2
examples/jsm/exporters/KTX2Exporter.js

@@ -17,8 +17,8 @@ import {
 } from 'three';
 
 import {
+	createDefaultContainer,
 	write,
-	KTX2Container,
 	KHR_DF_CHANNEL_RGBSDA_ALPHA,
 	KHR_DF_CHANNEL_RGBSDA_BLUE,
 	KHR_DF_CHANNEL_RGBSDA_GREEN,
@@ -191,7 +191,7 @@ export class KTX2Exporter {
 
 		const array = texture.image.data;
 		const channelCount = getChannelCount( texture );
-		const container = new KTX2Container();
+		const container = createDefaultContainer();
 
 		container.vkFormat = VK_FORMAT_MAP[ texture.format ][ texture.type ][ texture.colorSpace ];
 		container.typeSize = array.BYTES_PER_ELEMENT;
@@ -257,6 +257,8 @@ export class KTX2Exporter {
 
 		//
 
+		container.levelCount = 1;
+
 		container.levels = [ {
 
 			levelData: new Uint8Array( array.buffer, array.byteOffset, array.byteLength ),

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
examples/jsm/libs/ktx-parse.module.js


+ 9 - 3
examples/jsm/loaders/KTX2Loader.js

@@ -9,6 +9,8 @@ import {
 	HalfFloatType,
 	LinearFilter,
 	LinearMipmapLinearFilter,
+	NearestFilter,
+	NearestMipmapNearestFilter,
 	LinearSRGBColorSpace,
 	Loader,
 	NoColorSpace,
@@ -1035,7 +1037,6 @@ async function createRawTexture( container ) {
 
 	const mipmaps = [];
 
-
 	for ( let levelIndex = 0; levelIndex < container.levels.length; levelIndex ++ ) {
 
 		const levelWidth = Math.max( 1, container.pixelWidth >> levelIndex );
@@ -1109,6 +1110,9 @@ async function createRawTexture( container ) {
 
 	}
 
+	// levelCount = 0 implies runtime-generated mipmaps.
+	const useMipmaps = container.levelCount === 0 || mipmaps.length > 1
+
 	let texture;
 
 	if ( UNCOMPRESSED_FORMATS.has( FORMAT_MAP[ vkFormat ] ) ) {
@@ -1116,14 +1120,16 @@ async function createRawTexture( container ) {
 		texture = container.pixelDepth === 0
 			? new DataTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight )
 			: new Data3DTexture( mipmaps[ 0 ].data, container.pixelWidth, container.pixelHeight, container.pixelDepth );
+		texture.minFilter = useMipmaps ? NearestMipmapNearestFilter : NearestFilter;
+		texture.magFilter = NearestFilter;
+		texture.generateMipmaps = container.levelCount === 0;
 
 	} else {
 
 		if ( container.pixelDepth > 0 ) throw new Error( 'THREE.KTX2Loader: Unsupported pixelDepth.' );
 
 		texture = new CompressedTexture( mipmaps, container.pixelWidth, container.pixelHeight );
-
-		texture.minFilter = mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;
+		texture.minFilter = useMipmaps ? LinearMipmapLinearFilter : LinearFilter;
 		texture.magFilter = LinearFilter;
 
 	}

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác

粤ICP备19079148号