merge native setImage with setImageWithDepth
This commit is contained in:
@@ -30,7 +30,8 @@ class FFITexture extends Texture {
|
||||
|
||||
@override
|
||||
Future<void> generateMipmaps() async {
|
||||
await withVoidCallback((requestId, cb) => Texture_generateMipMapsRenderThread(pointer, _engine, requestId, cb));
|
||||
await withVoidCallback((requestId, cb) =>
|
||||
Texture_generateMipMapsRenderThread(pointer, _engine, requestId, cb));
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -73,7 +74,8 @@ class FFITexture extends Texture {
|
||||
|
||||
@override
|
||||
Future<void> setImage(int level, Uint8List buffer, int width, int height,
|
||||
int channels, PixelDataFormat format, PixelDataType type) async {
|
||||
PixelDataFormat format, PixelDataType type,
|
||||
{int depth = 1, int xOffset = 0, int yOffset = 0, int zOffset = 0 }) async {
|
||||
final success = await withBoolCallback((cb) {
|
||||
Texture_setImageRenderThread(
|
||||
_engine,
|
||||
@@ -81,9 +83,10 @@ class FFITexture extends Texture {
|
||||
level,
|
||||
buffer.address,
|
||||
buffer.lengthInBytes,
|
||||
xOffset, yOffset, zOffset,
|
||||
width,
|
||||
height,
|
||||
channels,
|
||||
depth,
|
||||
format.index,
|
||||
type.index,
|
||||
cb);
|
||||
@@ -94,44 +97,6 @@ class FFITexture extends Texture {
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> setImage3D(
|
||||
int level,
|
||||
int xOffset,
|
||||
int yOffset,
|
||||
int zOffset,
|
||||
int width,
|
||||
int height,
|
||||
int channels,
|
||||
int depth,
|
||||
Uint8List buffer,
|
||||
PixelDataFormat format,
|
||||
PixelDataType type) async {
|
||||
throw UnimplementedError();
|
||||
// final success = await withBoolCallback((cb) {
|
||||
// Texture_setImageWithDepthRenderThread(
|
||||
// _engine,
|
||||
// pointer,
|
||||
// level,
|
||||
// buffer.address,
|
||||
// buffer.lengthInBytes,
|
||||
// 0,
|
||||
// 0,
|
||||
// zOffset,
|
||||
// width,
|
||||
// height,
|
||||
// channels,
|
||||
// depth,
|
||||
// format.index,
|
||||
// type.index,
|
||||
// cb);
|
||||
// });
|
||||
|
||||
// if (!success) {
|
||||
// throw Exception("Failed to set image");
|
||||
// }
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> setSubImage(
|
||||
int level,
|
||||
|
||||
@@ -333,30 +333,18 @@ abstract class Texture {
|
||||
/// Sets the given [image] as the source data for this texture.
|
||||
///
|
||||
Future setLinearImage(
|
||||
covariant LinearImage image, PixelDataFormat format, PixelDataType type, {int level = 0});
|
||||
covariant LinearImage image, PixelDataFormat format, PixelDataType type,
|
||||
{int level = 0});
|
||||
|
||||
/// Sets the image data for a 2D texture or a texture level
|
||||
Future setImage(int level, Uint8List buffer, int width, int height,
|
||||
int channels, PixelDataFormat format, PixelDataType type);
|
||||
Future<void> setImage(int level, Uint8List buffer, int width, int height,
|
||||
PixelDataFormat format, PixelDataType type,
|
||||
{int depth = 1, int xOffset = 0, int yOffset = 0, int zOffset = 0});
|
||||
|
||||
/// Sets the image data for a region of a 2D texture
|
||||
Future setSubImage(int level, int xOffset, int yOffset, int width, int height,
|
||||
Uint8List buffer, PixelDataFormat format, PixelDataType type);
|
||||
|
||||
/// Sets the image data for a 3D texture or cubemap
|
||||
Future setImage3D(
|
||||
int level,
|
||||
int xOffset,
|
||||
int yOffset,
|
||||
int zOffset,
|
||||
int width,
|
||||
int height,
|
||||
int channels,
|
||||
int depth,
|
||||
Uint8List buffer,
|
||||
PixelDataFormat format,
|
||||
PixelDataType type);
|
||||
|
||||
/// Sets an external image (like a video or camera frame) as the texture source
|
||||
Future setExternalImage(dynamic externalImage);
|
||||
|
||||
@@ -407,15 +395,16 @@ enum PixelDataFormat {
|
||||
|
||||
/// The integer value of the enum
|
||||
final int value;
|
||||
|
||||
|
||||
/// Constructor with the integer value
|
||||
const PixelDataFormat(this.value);
|
||||
|
||||
|
||||
/// Factory constructor to create a PixelDataFormat from an integer value
|
||||
factory PixelDataFormat.fromValue(int value) {
|
||||
return PixelDataFormat.values.firstWhere(
|
||||
(format) => format.value == value,
|
||||
orElse: () => throw ArgumentError('Invalid PixelDataFormat value: $value'),
|
||||
orElse: () =>
|
||||
throw ArgumentError('Invalid PixelDataFormat value: $value'),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -460,10 +449,10 @@ enum PixelDataType {
|
||||
|
||||
/// The integer value of the enum
|
||||
final int value;
|
||||
|
||||
|
||||
/// Constructor with the integer value
|
||||
const PixelDataType(this.value);
|
||||
|
||||
|
||||
/// Factory constructor to create a PixelDataType from an integer value
|
||||
factory PixelDataType.fromValue(int value) {
|
||||
return PixelDataType.values.firstWhere(
|
||||
@@ -473,7 +462,6 @@ enum PixelDataType {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@deprecated
|
||||
typedef ThermionTexture = Texture;
|
||||
|
||||
@@ -483,34 +471,26 @@ abstract class LinearImage {
|
||||
Future<int> getWidth();
|
||||
Future<int> getHeight();
|
||||
Future<int> getChannels();
|
||||
|
||||
/// Decodes the image contained in [data] and returns a texture of
|
||||
/// the corresponding size with the image set as mip-level 0.
|
||||
///
|
||||
///
|
||||
static Future<Texture> decodeToTexture(Uint8List data, {
|
||||
TextureFormat textureFormat = TextureFormat.RGB32F,
|
||||
PixelDataFormat pixelDataFormat = PixelDataFormat.RGB,
|
||||
PixelDataType pixelDataType = PixelDataType.FLOAT,
|
||||
int levels = 1,
|
||||
bool requireAlpha = false}) async {
|
||||
final decodedImage = await FilamentApp.instance!.decodeImage(data, requireAlpha: requireAlpha);
|
||||
|
||||
final texture = await FilamentApp.instance!.createTexture(
|
||||
await decodedImage.getWidth(),
|
||||
await decodedImage.getHeight(),
|
||||
textureFormat: textureFormat,
|
||||
levels:levels
|
||||
);
|
||||
|
||||
await texture.setLinearImage(
|
||||
decodedImage,
|
||||
pixelDataFormat,
|
||||
pixelDataType
|
||||
);
|
||||
/// Decodes the image contained in [data] and returns a texture of
|
||||
/// the corresponding size with the image set as mip-level 0.
|
||||
///
|
||||
///
|
||||
static Future<Texture> decodeToTexture(Uint8List data,
|
||||
{TextureFormat textureFormat = TextureFormat.RGB32F,
|
||||
PixelDataFormat pixelDataFormat = PixelDataFormat.RGB,
|
||||
PixelDataType pixelDataType = PixelDataType.FLOAT,
|
||||
int levels = 1,
|
||||
bool requireAlpha = false}) async {
|
||||
final decodedImage = await FilamentApp.instance!
|
||||
.decodeImage(data, requireAlpha: requireAlpha);
|
||||
|
||||
final texture = await FilamentApp.instance!.createTexture(
|
||||
await decodedImage.getWidth(), await decodedImage.getHeight(),
|
||||
textureFormat: textureFormat, levels: levels);
|
||||
|
||||
await texture.setLinearImage(decodedImage, pixelDataFormat, pixelDataType);
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user