add setImage method to set texture image directly from buffer
This commit is contained in:
@@ -879,6 +879,31 @@ bool Texture_loadImage(
|
|||||||
pixelDataType.value,
|
pixelDataType.value,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ffi.Native<
|
||||||
|
ffi.Bool Function(
|
||||||
|
ffi.Pointer<TEngine>,
|
||||||
|
ffi.Pointer<TTexture>,
|
||||||
|
ffi.Uint32,
|
||||||
|
ffi.Pointer<ffi.Uint8>,
|
||||||
|
ffi.Size,
|
||||||
|
ffi.Uint32,
|
||||||
|
ffi.Uint32,
|
||||||
|
ffi.Uint32,
|
||||||
|
ffi.Uint32,
|
||||||
|
ffi.Uint32)>(isLeaf: true)
|
||||||
|
external bool Texture_setImage(
|
||||||
|
ffi.Pointer<TEngine> tEngine,
|
||||||
|
ffi.Pointer<TTexture> tTexture,
|
||||||
|
int level,
|
||||||
|
ffi.Pointer<ffi.Uint8> data,
|
||||||
|
int size,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
int channels,
|
||||||
|
int bufferFormat,
|
||||||
|
int pixelDataType,
|
||||||
|
);
|
||||||
|
|
||||||
@ffi.Native<
|
@ffi.Native<
|
||||||
ffi.Pointer<TLinearImage> Function(
|
ffi.Pointer<TLinearImage> Function(
|
||||||
ffi.Uint32, ffi.Uint32, ffi.Uint32)>(isLeaf: true)
|
ffi.Uint32, ffi.Uint32, ffi.Uint32)>(isLeaf: true)
|
||||||
|
|||||||
@@ -306,8 +306,8 @@ abstract class Texture {
|
|||||||
covariant LinearImage image, PixelDataFormat format, PixelDataType type);
|
covariant LinearImage image, PixelDataFormat format, PixelDataType type);
|
||||||
|
|
||||||
/// Sets the image data for a 2D texture or a texture level
|
/// Sets the image data for a 2D texture or a texture level
|
||||||
Future setImage(
|
Future setImage(int level, Uint8List buffer, int width, int height,
|
||||||
int level, Uint8List buffer, PixelDataFormat format, PixelDataType type);
|
int channels, PixelDataFormat format, PixelDataType type);
|
||||||
|
|
||||||
/// Sets the image data for a region of a 2D texture
|
/// Sets the image data for a region of a 2D texture
|
||||||
Future setSubImage(int level, int xOffset, int yOffset, int width, int height,
|
Future setSubImage(int level, int xOffset, int yOffset, int width, int height,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ void main() async {
|
|||||||
final testHelper = TestHelper("material");
|
final testHelper = TestHelper("material");
|
||||||
|
|
||||||
group("image", () {
|
group("image", () {
|
||||||
test('decode image', () async {
|
test('set texture from decoded image', () async {
|
||||||
await testHelper.withViewer((viewer) async {
|
await testHelper.withViewer((viewer) async {
|
||||||
var imageData =
|
var imageData =
|
||||||
File("${testHelper.testDir}/assets/cube_texture_512x512.png")
|
File("${testHelper.testDir}/assets/cube_texture_512x512.png")
|
||||||
@@ -25,6 +25,30 @@ void main() async {
|
|||||||
await texture.dispose();
|
await texture.dispose();
|
||||||
}, bg: kRed);
|
}, bg: kRed);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('setImage', () async {
|
||||||
|
await testHelper.withViewer((viewer) async {
|
||||||
|
var imageData =
|
||||||
|
File("${testHelper.testDir}/assets/cube_texture_512x512.png")
|
||||||
|
.readAsBytesSync();
|
||||||
|
final image = await viewer.decodeImage(imageData);
|
||||||
|
expect(await image.getChannels(), 4);
|
||||||
|
expect(await image.getWidth(), 512);
|
||||||
|
expect(await image.getHeight(), 512);
|
||||||
|
|
||||||
|
final texture = await viewer.createTexture(
|
||||||
|
await image.getWidth(), await image.getHeight(),
|
||||||
|
textureFormat: TextureFormat.RGBA32F);
|
||||||
|
var data = await image.getData();
|
||||||
|
|
||||||
|
await texture.setImage(
|
||||||
|
0,
|
||||||
|
data.buffer.asUint8List(data.offsetInBytes),
|
||||||
|
512, 512, 4, PixelDataFormat.RGBA, PixelDataType.FLOAT
|
||||||
|
);
|
||||||
|
await texture.dispose();
|
||||||
|
}, bg: kRed);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
group("sampler", () {
|
group("sampler", () {
|
||||||
|
|||||||
Reference in New Issue
Block a user