1 | /**************************************************************************** |
2 | ** |
3 | ** Copyright (C) 2016 Paul Lemire <paul.lemire350@gmail.com> |
4 | ** Contact: https://www.qt.io/licensing/ |
5 | ** |
6 | ** This file is part of the Qt3D module of the Qt Toolkit. |
7 | ** |
8 | ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ |
9 | ** Commercial License Usage |
10 | ** Licensees holding valid commercial Qt licenses may use this file in |
11 | ** accordance with the commercial license agreement provided with the |
12 | ** Software or, alternatively, in accordance with the terms contained in |
13 | ** a written agreement between you and The Qt Company. For licensing terms |
14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
15 | ** information use the contact form at https://www.qt.io/contact-us. |
16 | ** |
17 | ** GNU General Public License Usage |
18 | ** Alternatively, this file may be used under the terms of the GNU |
19 | ** General Public License version 3 as published by the Free Software |
20 | ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT |
21 | ** included in the packaging of this file. Please review the following |
22 | ** information to ensure the GNU General Public License requirements will |
23 | ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
24 | ** |
25 | ** $QT_END_LICENSE$ |
26 | ** |
27 | ****************************************************************************/ |
28 | |
29 | |
30 | #include <QtTest/QTest> |
31 | #include <Qt3DRender/qcameralens.h> |
32 | #include <Qt3DRender/private/qcameralens_p.h> |
33 | #include <QObject> |
34 | #include <QSignalSpy> |
35 | #include <Qt3DCore/private/qnodecreatedchangegenerator_p.h> |
36 | #include <Qt3DCore/qnodecreatedchange.h> |
37 | #include "testpostmanarbiter.h" |
38 | |
39 | class tst_QCameraLens : public QObject |
40 | { |
41 | Q_OBJECT |
42 | |
43 | private Q_SLOTS: |
44 | |
45 | void initTestCase() |
46 | { |
47 | qRegisterMetaType<Qt3DRender::QCameraLens::ProjectionType>(typeName: "QCameraLens::ProjectionType" ); |
48 | } |
49 | |
50 | void checkDefaultConstruction() |
51 | { |
52 | // GIVEN |
53 | Qt3DRender::QCameraLens cameraLens; |
54 | |
55 | // THEN |
56 | QCOMPARE(cameraLens.projectionType(), Qt3DRender::QCameraLens::PerspectiveProjection); |
57 | QCOMPARE(cameraLens.nearPlane(), 0.1f); |
58 | QCOMPARE(cameraLens.farPlane(), 1024.0f); |
59 | QCOMPARE(cameraLens.fieldOfView(), 25.0f); |
60 | QCOMPARE(cameraLens.aspectRatio(), 1.0f); |
61 | QCOMPARE(cameraLens.left(), -0.5f); |
62 | QCOMPARE(cameraLens.right(), 0.5f); |
63 | QCOMPARE(cameraLens.bottom(), -0.5f); |
64 | QCOMPARE(cameraLens.top(), 0.5f); |
65 | QCOMPARE(cameraLens.exposure(), 0.0f); |
66 | } |
67 | |
68 | void checkPropertyChanges() |
69 | { |
70 | // GIVEN |
71 | Qt3DRender::QCameraLens cameraLens; |
72 | |
73 | { |
74 | // WHEN |
75 | QSignalSpy spy(&cameraLens, SIGNAL(projectionTypeChanged(QCameraLens::ProjectionType))); |
76 | const Qt3DRender::QCameraLens::ProjectionType newValue = Qt3DRender::QCameraLens::OrthographicProjection; |
77 | cameraLens.setProjectionType(newValue); |
78 | |
79 | // THEN |
80 | QVERIFY(spy.isValid()); |
81 | QCOMPARE(cameraLens.projectionType(), newValue); |
82 | QCOMPARE(spy.count(), 1); |
83 | |
84 | // WHEN |
85 | spy.clear(); |
86 | cameraLens.setProjectionType(newValue); |
87 | |
88 | // THEN |
89 | QCOMPARE(cameraLens.projectionType(), newValue); |
90 | QCOMPARE(spy.count(), 0); |
91 | } |
92 | { |
93 | // WHEN |
94 | QSignalSpy spy(&cameraLens, SIGNAL(nearPlaneChanged(float))); |
95 | const float newValue = 10.0f; |
96 | cameraLens.setNearPlane(newValue); |
97 | |
98 | // THEN |
99 | QVERIFY(spy.isValid()); |
100 | QCOMPARE(cameraLens.nearPlane(), newValue); |
101 | QCOMPARE(spy.count(), 1); |
102 | |
103 | // WHEN |
104 | spy.clear(); |
105 | cameraLens.setNearPlane(newValue); |
106 | |
107 | // THEN |
108 | QCOMPARE(cameraLens.nearPlane(), newValue); |
109 | QCOMPARE(spy.count(), 0); |
110 | } |
111 | { |
112 | // WHEN |
113 | QSignalSpy spy(&cameraLens, SIGNAL(farPlaneChanged(float))); |
114 | const float newValue = 1.0f; |
115 | cameraLens.setFarPlane(newValue); |
116 | |
117 | // THEN |
118 | QVERIFY(spy.isValid()); |
119 | QCOMPARE(cameraLens.farPlane(), newValue); |
120 | QCOMPARE(spy.count(), 1); |
121 | |
122 | // WHEN |
123 | spy.clear(); |
124 | cameraLens.setFarPlane(newValue); |
125 | |
126 | // THEN |
127 | QCOMPARE(cameraLens.farPlane(), newValue); |
128 | QCOMPARE(spy.count(), 0); |
129 | } |
130 | { |
131 | // WHEN |
132 | QSignalSpy spy(&cameraLens, SIGNAL(fieldOfViewChanged(float))); |
133 | const float newValue = 5.0f; |
134 | cameraLens.setFieldOfView(newValue); |
135 | |
136 | // THEN |
137 | QVERIFY(spy.isValid()); |
138 | QCOMPARE(cameraLens.fieldOfView(), newValue); |
139 | QCOMPARE(spy.count(), 1); |
140 | |
141 | // WHEN |
142 | spy.clear(); |
143 | cameraLens.setFieldOfView(newValue); |
144 | |
145 | // THEN |
146 | QCOMPARE(cameraLens.fieldOfView(), newValue); |
147 | QCOMPARE(spy.count(), 0); |
148 | } |
149 | { |
150 | // WHEN |
151 | QSignalSpy spy(&cameraLens, SIGNAL(aspectRatioChanged(float))); |
152 | const float newValue = 4.0f / 3.0f; |
153 | cameraLens.setAspectRatio(newValue); |
154 | |
155 | // THEN |
156 | QVERIFY(spy.isValid()); |
157 | QCOMPARE(cameraLens.aspectRatio(), newValue); |
158 | QCOMPARE(spy.count(), 1); |
159 | |
160 | // WHEN |
161 | spy.clear(); |
162 | cameraLens.setAspectRatio(newValue); |
163 | |
164 | // THEN |
165 | QCOMPARE(cameraLens.aspectRatio(), newValue); |
166 | QCOMPARE(spy.count(), 0); |
167 | } |
168 | { |
169 | // WHEN |
170 | QSignalSpy spy(&cameraLens, SIGNAL(leftChanged(float))); |
171 | const float newValue = 0.0f; |
172 | cameraLens.setLeft(newValue); |
173 | |
174 | // THEN |
175 | QVERIFY(spy.isValid()); |
176 | QCOMPARE(cameraLens.left(), newValue); |
177 | QCOMPARE(spy.count(), 1); |
178 | |
179 | // WHEN |
180 | spy.clear(); |
181 | cameraLens.setLeft(newValue); |
182 | |
183 | // THEN |
184 | QCOMPARE(cameraLens.left(), newValue); |
185 | QCOMPARE(spy.count(), 0); |
186 | } |
187 | { |
188 | // WHEN |
189 | QSignalSpy spy(&cameraLens, SIGNAL(rightChanged(float))); |
190 | const float newValue = 1.0f; |
191 | cameraLens.setRight(newValue); |
192 | |
193 | // THEN |
194 | QVERIFY(spy.isValid()); |
195 | QCOMPARE(cameraLens.right(), newValue); |
196 | QCOMPARE(spy.count(), 1); |
197 | |
198 | // WHEN |
199 | spy.clear(); |
200 | cameraLens.setRight(newValue); |
201 | |
202 | // THEN |
203 | QCOMPARE(cameraLens.right(), newValue); |
204 | QCOMPARE(spy.count(), 0); |
205 | } |
206 | { |
207 | // WHEN |
208 | QSignalSpy spy(&cameraLens, SIGNAL(bottomChanged(float))); |
209 | const float newValue = 2.0f; |
210 | cameraLens.setBottom(newValue); |
211 | |
212 | // THEN |
213 | QVERIFY(spy.isValid()); |
214 | QCOMPARE(cameraLens.bottom(), newValue); |
215 | QCOMPARE(spy.count(), 1); |
216 | |
217 | // WHEN |
218 | spy.clear(); |
219 | cameraLens.setBottom(newValue); |
220 | |
221 | // THEN |
222 | QCOMPARE(cameraLens.bottom(), newValue); |
223 | QCOMPARE(spy.count(), 0); |
224 | } |
225 | { |
226 | // WHEN |
227 | QSignalSpy spy(&cameraLens, SIGNAL(topChanged(float))); |
228 | const float newValue = -2.0f; |
229 | cameraLens.setTop(newValue); |
230 | |
231 | // THEN |
232 | QVERIFY(spy.isValid()); |
233 | QCOMPARE(cameraLens.top(), newValue); |
234 | QCOMPARE(spy.count(), 1); |
235 | |
236 | // WHEN |
237 | spy.clear(); |
238 | cameraLens.setTop(newValue); |
239 | |
240 | // THEN |
241 | QCOMPARE(cameraLens.top(), newValue); |
242 | QCOMPARE(spy.count(), 0); |
243 | } |
244 | { |
245 | // WHEN |
246 | QSignalSpy spy(&cameraLens, SIGNAL(exposureChanged(float))); |
247 | const float newValue = -2.0f; |
248 | cameraLens.setExposure(newValue); |
249 | |
250 | // THEN |
251 | QVERIFY(spy.isValid()); |
252 | QCOMPARE(cameraLens.exposure(), newValue); |
253 | QCOMPARE(spy.count(), 1); |
254 | QCOMPARE(spy.takeFirst().first().toFloat(), -2.0f); |
255 | |
256 | // WHEN |
257 | spy.clear(); |
258 | cameraLens.setExposure(newValue); |
259 | |
260 | // THEN |
261 | QCOMPARE(cameraLens.exposure(), newValue); |
262 | QCOMPARE(spy.count(), 0); |
263 | } |
264 | { |
265 | // WHEN |
266 | QSignalSpy spy(&cameraLens, SIGNAL(projectionMatrixChanged(QMatrix4x4))); |
267 | QMatrix4x4 newValue; |
268 | newValue.translate(x: 5.0f, y: 2.0f, z: 4.3f); |
269 | cameraLens.setProjectionMatrix(newValue); |
270 | |
271 | // THEN |
272 | QVERIFY(spy.isValid()); |
273 | QCOMPARE(cameraLens.projectionMatrix(), newValue); |
274 | QCOMPARE(cameraLens.projectionType(), Qt3DRender::QCameraLens::CustomProjection); |
275 | QCOMPARE(spy.count(), 1); |
276 | |
277 | // WHEN |
278 | spy.clear(); |
279 | cameraLens.setProjectionMatrix(newValue); |
280 | |
281 | // THEN |
282 | QCOMPARE(cameraLens.projectionMatrix(), newValue); |
283 | QCOMPARE(spy.count(), 0); |
284 | } |
285 | } |
286 | |
287 | void checkSetOrthographicProjection() |
288 | { |
289 | // GIVEN |
290 | Qt3DRender::QCameraLens cameraLens; |
291 | |
292 | { |
293 | // WHEN |
294 | QSignalSpy spy(&cameraLens, SIGNAL(projectionMatrixChanged(QMatrix4x4))); |
295 | cameraLens.setOrthographicProjection(left: -1.0f, right: 1.0f, bottom: -1.0f, top: 1.0f, nearPlane: 0.5f, farPlane: 50.0f); |
296 | |
297 | // THEN |
298 | QVERIFY(spy.isValid()); |
299 | QCOMPARE(spy.count(), 8); // Triggered for each property being set + 1 |
300 | QCOMPARE(cameraLens.projectionType(), Qt3DRender::QCameraLens::OrthographicProjection); |
301 | QCOMPARE(cameraLens.nearPlane(), 0.5f); |
302 | QCOMPARE(cameraLens.farPlane(), 50.0f); |
303 | QCOMPARE(cameraLens.left(), -1.0f); |
304 | QCOMPARE(cameraLens.right(), 1.0f); |
305 | QCOMPARE(cameraLens.bottom(), -1.0f); |
306 | QCOMPARE(cameraLens.top(), 1.0f); |
307 | } |
308 | } |
309 | |
310 | void checkSetPerspectiveProjection() |
311 | { |
312 | // GIVEN |
313 | Qt3DRender::QCameraLens cameraLens; |
314 | |
315 | { |
316 | // WHEN |
317 | QSignalSpy spy(&cameraLens, SIGNAL(projectionMatrixChanged(QMatrix4x4))); |
318 | cameraLens.setPerspectiveProjection(fieldOfView: 20.0f, aspect: 16.0f / 9.0f, nearPlane: 0.5f, farPlane: 50.0f); |
319 | |
320 | // THEN |
321 | QVERIFY(spy.isValid()); |
322 | QCOMPARE(spy.count(), 5); // Triggered for each property being set (- projectionTye which is the default value) + 1 |
323 | QCOMPARE(cameraLens.projectionType(), Qt3DRender::QCameraLens::PerspectiveProjection); |
324 | QCOMPARE(cameraLens.nearPlane(), 0.5f); |
325 | QCOMPARE(cameraLens.farPlane(), 50.0f); |
326 | QCOMPARE(cameraLens.fieldOfView(), 20.0f); |
327 | QCOMPARE(cameraLens.aspectRatio(), 16.0f / 9.0f); |
328 | } |
329 | } |
330 | |
331 | void checkSetFrustumProjection() |
332 | { |
333 | // GIVEN |
334 | Qt3DRender::QCameraLens cameraLens; |
335 | |
336 | { |
337 | // WHEN |
338 | QSignalSpy spy(&cameraLens, SIGNAL(projectionMatrixChanged(QMatrix4x4))); |
339 | cameraLens.setFrustumProjection(left: -1.0f, right: 1.0f, bottom: -1.0f, top: 1.0f, nearPlane: 0.5f, farPlane: 50.0f); |
340 | |
341 | // THEN |
342 | QVERIFY(spy.isValid()); |
343 | QCOMPARE(spy.count(), 8); // Triggered for each property being set + 1 |
344 | QCOMPARE(cameraLens.projectionType(), Qt3DRender::QCameraLens::FrustumProjection); |
345 | QCOMPARE(cameraLens.nearPlane(), 0.5f); |
346 | QCOMPARE(cameraLens.farPlane(), 50.0f); |
347 | QCOMPARE(cameraLens.left(), -1.0f); |
348 | QCOMPARE(cameraLens.right(), 1.0f); |
349 | QCOMPARE(cameraLens.bottom(), -1.0f); |
350 | QCOMPARE(cameraLens.top(), 1.0f); |
351 | } |
352 | } |
353 | |
354 | void checkCreationData() |
355 | { |
356 | // GIVEN |
357 | Qt3DRender::QCameraLens cameraLens; |
358 | |
359 | cameraLens.setNearPlane(0.5); |
360 | cameraLens.setFarPlane(1005.0f); |
361 | cameraLens.setFieldOfView(35.0f); |
362 | cameraLens.setAspectRatio(16.0f/9.0f); |
363 | cameraLens.setExposure(1.0f); |
364 | |
365 | // WHEN |
366 | QVector<Qt3DCore::QNodeCreatedChangeBasePtr> creationChanges; |
367 | |
368 | { |
369 | Qt3DCore::QNodeCreatedChangeGenerator creationChangeGenerator(&cameraLens); |
370 | creationChanges = creationChangeGenerator.creationChanges(); |
371 | } |
372 | |
373 | // THEN |
374 | { |
375 | QCOMPARE(creationChanges.size(), 1); |
376 | |
377 | const auto creationChangeData = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<Qt3DRender::QCameraLensData>>(src: creationChanges.first()); |
378 | const Qt3DRender::QCameraLensData cloneData = creationChangeData->data; |
379 | |
380 | QCOMPARE(cameraLens.projectionMatrix(), cloneData.projectionMatrix); |
381 | QCOMPARE(cameraLens.exposure(), cloneData.exposure); |
382 | QCOMPARE(cameraLens.id(), creationChangeData->subjectId()); |
383 | QCOMPARE(cameraLens.isEnabled(), true); |
384 | QCOMPARE(cameraLens.isEnabled(), creationChangeData->isNodeEnabled()); |
385 | QCOMPARE(cameraLens.metaObject(), creationChangeData->metaObject()); |
386 | } |
387 | |
388 | // WHEN |
389 | cameraLens.setEnabled(false); |
390 | |
391 | { |
392 | Qt3DCore::QNodeCreatedChangeGenerator creationChangeGenerator(&cameraLens); |
393 | creationChanges = creationChangeGenerator.creationChanges(); |
394 | } |
395 | |
396 | // THEN |
397 | { |
398 | QCOMPARE(creationChanges.size(), 1); |
399 | |
400 | const auto creationChangeData = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<Qt3DRender::QCameraLensData>>(src: creationChanges.first()); |
401 | const Qt3DRender::QCameraLensData cloneData = creationChangeData->data; |
402 | |
403 | QCOMPARE(cameraLens.projectionMatrix(), cloneData.projectionMatrix); |
404 | QCOMPARE(cameraLens.exposure(), cloneData.exposure); |
405 | QCOMPARE(cameraLens.id(), creationChangeData->subjectId()); |
406 | QCOMPARE(cameraLens.isEnabled(), false); |
407 | QCOMPARE(cameraLens.isEnabled(), creationChangeData->isNodeEnabled()); |
408 | QCOMPARE(cameraLens.metaObject(), creationChangeData->metaObject()); |
409 | } |
410 | } |
411 | |
412 | void checkProjectionTypeUpdate() |
413 | { |
414 | // GIVEN |
415 | TestArbiter arbiter; |
416 | Qt3DRender::QCameraLens cameraLens; |
417 | arbiter.setArbiterOnNode(&cameraLens); |
418 | |
419 | { |
420 | // WHEN |
421 | cameraLens.setProjectionType(Qt3DRender::QCameraLens::FrustumProjection); |
422 | QCoreApplication::processEvents(); |
423 | |
424 | // THEN |
425 | QCOMPARE(arbiter.events.size(), 0); |
426 | QCOMPARE(arbiter.dirtyNodes.size(), 1); |
427 | QCOMPARE(arbiter.dirtyNodes.front(), &cameraLens); |
428 | |
429 | arbiter.dirtyNodes.clear(); |
430 | } |
431 | |
432 | { |
433 | // WHEN |
434 | cameraLens.setProjectionType(Qt3DRender::QCameraLens::FrustumProjection); |
435 | QCoreApplication::processEvents(); |
436 | |
437 | // THEN |
438 | QCOMPARE(arbiter.events.size(), 0); |
439 | QCOMPARE(arbiter.dirtyNodes.size(), 0); |
440 | } |
441 | |
442 | } |
443 | |
444 | void checkNearPlaneUpdate() |
445 | { |
446 | // GIVEN |
447 | TestArbiter arbiter; |
448 | Qt3DRender::QCameraLens cameraLens; |
449 | arbiter.setArbiterOnNode(&cameraLens); |
450 | |
451 | { |
452 | // WHEN |
453 | cameraLens.setNearPlane(5.0f); |
454 | |
455 | // THEN |
456 | QCOMPARE(arbiter.events.size(), 0); |
457 | QCOMPARE(arbiter.dirtyNodes.size(), 1); |
458 | QCOMPARE(arbiter.dirtyNodes.front(), &cameraLens); |
459 | |
460 | arbiter.dirtyNodes.clear(); |
461 | } |
462 | |
463 | { |
464 | // WHEN |
465 | cameraLens.setNearPlane(5.0f); |
466 | |
467 | // THEN |
468 | QCOMPARE(arbiter.events.size(), 0); |
469 | QCOMPARE(arbiter.dirtyNodes.size(), 0); |
470 | } |
471 | |
472 | } |
473 | |
474 | void checkFarPlaneUpdate() |
475 | { |
476 | // GIVEN |
477 | TestArbiter arbiter; |
478 | Qt3DRender::QCameraLens cameraLens; |
479 | arbiter.setArbiterOnNode(&cameraLens); |
480 | |
481 | { |
482 | // WHEN |
483 | cameraLens.setFarPlane(5.0f); |
484 | |
485 | // THEN |
486 | QCOMPARE(arbiter.events.size(), 0); |
487 | QCOMPARE(arbiter.dirtyNodes.size(), 1); |
488 | QCOMPARE(arbiter.dirtyNodes.front(), &cameraLens); |
489 | |
490 | arbiter.dirtyNodes.clear(); |
491 | } |
492 | |
493 | { |
494 | // WHEN |
495 | cameraLens.setFarPlane(5.0f); |
496 | |
497 | // THEN |
498 | QCOMPARE(arbiter.events.size(), 0); |
499 | QCOMPARE(arbiter.dirtyNodes.size(), 0); |
500 | } |
501 | |
502 | } |
503 | |
504 | void checkFieldOfViewUpdate() |
505 | { |
506 | // GIVEN |
507 | TestArbiter arbiter; |
508 | Qt3DRender::QCameraLens cameraLens; |
509 | arbiter.setArbiterOnNode(&cameraLens); |
510 | |
511 | { |
512 | // WHEN |
513 | cameraLens.setFieldOfView(5.0f); |
514 | |
515 | // THEN |
516 | QCOMPARE(arbiter.events.size(), 0); |
517 | QCOMPARE(arbiter.dirtyNodes.size(), 1); |
518 | QCOMPARE(arbiter.dirtyNodes.front(), &cameraLens); |
519 | |
520 | arbiter.dirtyNodes.clear(); |
521 | } |
522 | |
523 | { |
524 | // WHEN |
525 | cameraLens.setFieldOfView(5.0f); |
526 | |
527 | // THEN |
528 | QCOMPARE(arbiter.events.size(), 0); |
529 | QCOMPARE(arbiter.dirtyNodes.size(), 0); |
530 | } |
531 | |
532 | } |
533 | |
534 | void checkAspectRatioUpdate() |
535 | { |
536 | // GIVEN |
537 | TestArbiter arbiter; |
538 | Qt3DRender::QCameraLens cameraLens; |
539 | arbiter.setArbiterOnNode(&cameraLens); |
540 | |
541 | { |
542 | // WHEN |
543 | cameraLens.setAspectRatio(9.0f); |
544 | |
545 | // THEN |
546 | QCOMPARE(arbiter.events.size(), 0); |
547 | QCOMPARE(arbiter.dirtyNodes.size(), 1); |
548 | QCOMPARE(arbiter.dirtyNodes.front(), &cameraLens); |
549 | |
550 | arbiter.dirtyNodes.clear(); |
551 | } |
552 | |
553 | { |
554 | // WHEN |
555 | cameraLens.setAspectRatio(9.0f); |
556 | |
557 | // THEN |
558 | QCOMPARE(arbiter.events.size(), 0); |
559 | QCOMPARE(arbiter.dirtyNodes.size(), 0); |
560 | } |
561 | |
562 | } |
563 | |
564 | void checkLeftUpdate() |
565 | { |
566 | // GIVEN |
567 | TestArbiter arbiter; |
568 | Qt3DRender::QCameraLens cameraLens; |
569 | arbiter.setArbiterOnNode(&cameraLens); |
570 | |
571 | { |
572 | // WHEN |
573 | cameraLens.setLeft(0.0f); |
574 | |
575 | // THEN |
576 | QCOMPARE(arbiter.events.size(), 0); |
577 | QCOMPARE(arbiter.dirtyNodes.size(), 1); |
578 | QCOMPARE(arbiter.dirtyNodes.front(), &cameraLens); |
579 | |
580 | arbiter.dirtyNodes.clear(); |
581 | } |
582 | |
583 | { |
584 | // WHEN |
585 | cameraLens.setLeft(0.0f); |
586 | |
587 | // THEN |
588 | QCOMPARE(arbiter.events.size(), 0); |
589 | QCOMPARE(arbiter.dirtyNodes.size(), 0); |
590 | } |
591 | |
592 | } |
593 | |
594 | void checkRightUpdate() |
595 | { |
596 | // GIVEN |
597 | TestArbiter arbiter; |
598 | Qt3DRender::QCameraLens cameraLens; |
599 | arbiter.setArbiterOnNode(&cameraLens); |
600 | |
601 | { |
602 | // WHEN |
603 | cameraLens.setRight(24.0f); |
604 | |
605 | // THEN |
606 | QCOMPARE(arbiter.events.size(), 0); |
607 | QCOMPARE(arbiter.dirtyNodes.size(), 1); |
608 | QCOMPARE(arbiter.dirtyNodes.front(), &cameraLens); |
609 | |
610 | arbiter.dirtyNodes.clear(); |
611 | } |
612 | |
613 | { |
614 | // WHEN |
615 | cameraLens.setRight(24.0f); |
616 | |
617 | // THEN |
618 | QCOMPARE(arbiter.events.size(), 0); |
619 | QCOMPARE(arbiter.dirtyNodes.size(), 0); |
620 | } |
621 | |
622 | } |
623 | |
624 | void checkBottomUpdate() |
625 | { |
626 | // GIVEN |
627 | TestArbiter arbiter; |
628 | Qt3DRender::QCameraLens cameraLens; |
629 | arbiter.setArbiterOnNode(&cameraLens); |
630 | |
631 | { |
632 | // WHEN |
633 | cameraLens.setBottom(-12.0f); |
634 | |
635 | // THEN |
636 | QCOMPARE(arbiter.events.size(), 0); |
637 | QCOMPARE(arbiter.dirtyNodes.size(), 1); |
638 | QCOMPARE(arbiter.dirtyNodes.front(), &cameraLens); |
639 | |
640 | arbiter.dirtyNodes.clear(); |
641 | } |
642 | |
643 | { |
644 | // WHEN |
645 | cameraLens.setBottom(-12.0f); |
646 | |
647 | // THEN |
648 | QCOMPARE(arbiter.events.size(), 0); |
649 | QCOMPARE(arbiter.dirtyNodes.size(), 0); |
650 | } |
651 | |
652 | } |
653 | |
654 | void checkTopUpdate() |
655 | { |
656 | // GIVEN |
657 | TestArbiter arbiter; |
658 | Qt3DRender::QCameraLens cameraLens; |
659 | arbiter.setArbiterOnNode(&cameraLens); |
660 | |
661 | { |
662 | // WHEN |
663 | cameraLens.setTop(12.0f); |
664 | |
665 | // THEN |
666 | QCOMPARE(arbiter.events.size(), 0); |
667 | QCOMPARE(arbiter.dirtyNodes.size(), 1); |
668 | QCOMPARE(arbiter.dirtyNodes.front(), &cameraLens); |
669 | |
670 | arbiter.dirtyNodes.clear(); |
671 | } |
672 | |
673 | { |
674 | // WHEN |
675 | cameraLens.setTop(12.0f); |
676 | |
677 | // THEN |
678 | QCOMPARE(arbiter.events.size(), 0); |
679 | QCOMPARE(arbiter.dirtyNodes.size(), 0); |
680 | } |
681 | |
682 | } |
683 | |
684 | void checkExposureUpdate() |
685 | { |
686 | // GIVEN |
687 | TestArbiter arbiter; |
688 | Qt3DRender::QCameraLens cameraLens; |
689 | arbiter.setArbiterOnNode(&cameraLens); |
690 | |
691 | { |
692 | // WHEN |
693 | cameraLens.setExposure(2.0f); |
694 | |
695 | // THEN |
696 | QCOMPARE(arbiter.events.size(), 0); |
697 | QCOMPARE(arbiter.dirtyNodes.size(), 1); |
698 | QCOMPARE(arbiter.dirtyNodes.front(), &cameraLens); |
699 | |
700 | arbiter.dirtyNodes.clear(); |
701 | } |
702 | |
703 | { |
704 | // WHEN |
705 | cameraLens.setExposure(2.0f); |
706 | |
707 | // THEN |
708 | QCOMPARE(arbiter.events.size(), 0); |
709 | QCOMPARE(arbiter.dirtyNodes.size(), 0); |
710 | } |
711 | |
712 | } |
713 | |
714 | void checkProjectionMatrixUpdate() |
715 | { |
716 | // GIVEN |
717 | TestArbiter arbiter; |
718 | Qt3DRender::QCameraLens cameraLens; |
719 | arbiter.setArbiterOnNode(&cameraLens); |
720 | |
721 | QMatrix4x4 m; |
722 | m.translate(x: -5.0f, y: 5.0f, z: 25.0f); |
723 | |
724 | { |
725 | // WHEN |
726 | cameraLens.setProjectionMatrix(m); |
727 | |
728 | // THEN |
729 | QCOMPARE(arbiter.events.size(), 0); |
730 | QCOMPARE(arbiter.dirtyNodes.size(), 1); |
731 | QCOMPARE(arbiter.dirtyNodes.front(), &cameraLens); |
732 | |
733 | arbiter.dirtyNodes.clear(); |
734 | } |
735 | |
736 | { |
737 | // WHEN |
738 | cameraLens.setProjectionMatrix(m); |
739 | |
740 | // THEN |
741 | QCOMPARE(arbiter.events.size(), 0); |
742 | QCOMPARE(arbiter.events.size(), 0); |
743 | } |
744 | |
745 | } |
746 | |
747 | }; |
748 | |
749 | QTEST_MAIN(tst_QCameraLens) |
750 | |
751 | #include "tst_qcameralens.moc" |
752 | |