1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// Copyright (c) 2012-2017 VideoStitch SAS
// Copyright (c) 2018 stitchEm
#include "gpu/testing.hpp"
#include "gpu/util.hpp"
#include "gpu/allocator.hpp"
#include <gpu/render/render.hpp>
#include <gpu/render/numberDrafter.hpp>
#include "libvideostitch/gpu_device.hpp"
namespace VideoStitch {
namespace Testing {
void testFillBuffer() {
auto uniqStream = GPU::UniqueStream::create();
ENSURE(uniqStream.status());
auto stream = uniqStream.ref().borrow();
PackedDeviceBuffer reference(257, 509);
reference.fill(0x44, 0x55, 0x00);
PackedDeviceBuffer buffer(257, 509);
buffer.fill(0x0, 0x0, 0x0);
// buffer (blockingly) filled by the testing framework, should not match reference
buffer.ENSURE_NEQ(reference);
// buffer async filled by library function
ENSURE(Render::fillBuffer(buffer.gpuBuf(), Image::RGBA::pack(0x44, 0x55, 0x00, 0xff), 257, 509, stream));
ENSURE(stream.synchronize());
// should match reference now
buffer.ENSURE_EQ(reference);
}
void testDrawNumbers() {
auto uniqStream = GPU::UniqueStream::create();
ENSURE(uniqStream.status());
auto stream = uniqStream.ref().borrow();
size_t outputWidth = 1901;
size_t outputHeight = 313;
DeviceBuffer<uint32_t> reference(outputWidth, outputHeight);
reference.readPngFromFile("data/render/numbers.png");
DeviceBuffer<uint32_t> buffer(outputWidth, outputHeight);
buffer.fill(0);
auto drawColor = Image::RGBA::pack(0x37, 0xaa, 0xef, 0xff);
Render::NumberDrafter drafter(outputWidth / 12);
Render::fillBuffer(buffer.gpuBuf(), Image::RGBA::pack(0x00, 0x00, 0x0, 1), outputWidth, outputHeight, stream);
GPU::Buffer<uint32_t> b = buffer.gpuBuf();
for (int i = 0; i < 10; i++) {
drafter.draw(i, b, outputWidth, outputHeight, outputWidth / 10 * i + 15, 10, drawColor, stream);
}
stream.synchronize();
// create new reference image:
// DeviceBuffer<uint32_t> res(outputWidth, outputHeight, (uint32_t*)buffer.data());
// res.dumpToPng8888("data/render/numbers.png");
buffer.ENSURE_BUF_EQ(reference);
}
} // namespace Testing
} // namespace VideoStitch
int main(int /*argc*/, char** /*argv*/) {
VideoStitch::Testing::initTest();
VideoStitch::Testing::ENSURE(VideoStitch::GPU::setDefaultBackendDevice(0));
VideoStitch::Testing::testFillBuffer();
VideoStitch::Testing::testDrawNumbers();
return 0;
}