Bibliothèque sequa::3d (espace de noms sequa::three_d), sans dépendance à un moteur : interface I3DEngineAdapter, tampons et négociation des capacités, synchronisation de la scène par deltas versionnés tout ou rien (SceneState, snapshot), demandes d'image et mesures communes. NullEngineAdapter (SIMULÉ) pour les tests. Types provisoires en attendant le format du schéma.
57 lines
2.0 KiB
C++
57 lines
2.0 KiB
C++
// SPDX-License-Identifier: MPL-2.0
|
|
#include "sequa/3d/adapter.hpp"
|
|
#include "sequa/3d/capabilities.hpp"
|
|
|
|
#include <doctest/doctest.h>
|
|
|
|
using namespace sequa::three_d;
|
|
|
|
TEST_CASE("BufferSet : union, intersection, difference")
|
|
{
|
|
const BufferSet a{FrameBuffer::color, FrameBuffer::depth};
|
|
const BufferSet b{FrameBuffer::depth, FrameBuffer::albedo};
|
|
CHECK((a | b) == BufferSet{FrameBuffer::color, FrameBuffer::depth, FrameBuffer::albedo});
|
|
CHECK((a & b) == BufferSet{FrameBuffer::depth});
|
|
CHECK((a - b) == BufferSet{FrameBuffer::color});
|
|
CHECK(a.contains(FrameBuffer::color));
|
|
CHECK_FALSE(a.contains(FrameBuffer::albedo));
|
|
CHECK(BufferSet::all().contains(a | b));
|
|
CHECK(BufferSet{}.empty());
|
|
}
|
|
|
|
TEST_CASE("negotiate : separe les tampons accordes des manquants")
|
|
{
|
|
EngineCapabilities caps;
|
|
caps.engine_name = "test";
|
|
caps.buffers = {FrameBuffer::color, FrameBuffer::depth};
|
|
const Negotiation n = negotiate({FrameBuffer::color, FrameBuffer::object_ids}, caps);
|
|
CHECK(n.granted == BufferSet{FrameBuffer::color});
|
|
CHECK(n.missing == BufferSet{FrameBuffer::object_ids});
|
|
}
|
|
|
|
TEST_CASE("validate_request : tampon absent ou taille invalide refuses")
|
|
{
|
|
EngineCapabilities caps;
|
|
caps.engine_name = "test";
|
|
caps.buffers = {FrameBuffer::color};
|
|
caps.max_width = 1920;
|
|
caps.max_height = 1080;
|
|
|
|
FrameRequest request;
|
|
request.width = 1280;
|
|
request.height = 720;
|
|
CHECK_FALSE(validate_request(request, caps).has_value());
|
|
|
|
request.buffers = {FrameBuffer::color, FrameBuffer::albedo};
|
|
const auto missing = validate_request(request, caps);
|
|
REQUIRE(missing.has_value());
|
|
CHECK(missing->code == Error::Code::unsupported);
|
|
CHECK(missing->message.find("albedo") != std::string::npos);
|
|
|
|
request.buffers = {FrameBuffer::color};
|
|
request.width = 3840;
|
|
REQUIRE(validate_request(request, caps).has_value());
|
|
request.width = 0;
|
|
CHECK(validate_request(request, caps)->code == Error::Code::invalid_argument);
|
|
}
|