Initial graph evaluations, added Float to Vec3 Node, minor editor tweaks.

This commit is contained in:
Martin Felis
2022-04-03 21:05:11 +02:00
parent 08ae84fcb4
commit 5d8c1e289b
6 changed files with 269 additions and 59 deletions
+88 -43
View File
@@ -2,10 +2,9 @@
// Created by martin on 04.02.22.
//
#include "AnimGraph/AnimGraphResource.h"
#include "AnimGraph/AnimGraph.h"
#include "AnimGraph/AnimGraphEditor.h"
#include "AnimGraph/AnimGraphResource.h"
#include "catch.hpp"
TEST_CASE("BasicGraph", "[AnimGraphResource]") {
@@ -81,14 +80,22 @@ TEST_CASE("BasicGraph", "[AnimGraphResource]") {
size_t blend_index = blend2_instance->m_index;
REQUIRE(graph.m_node_input_connections[blend_index].size() == 2);
CHECK(graph.m_node_input_connections[blend_index][0].m_source_node == anim_sampler_walk);
CHECK(graph.m_node_input_connections[blend_index][1].m_source_node == anim_sampler_run);
CHECK(
graph.m_node_input_connections[blend_index][0].m_source_node
== anim_sampler_walk);
CHECK(
graph.m_node_input_connections[blend_index][1].m_source_node
== anim_sampler_run);
REQUIRE(graph.m_node_output_connections[anim_sampler_index0].size() == 1);
CHECK(graph.m_node_output_connections[anim_sampler_index0][0].m_target_node == blend2_instance);
CHECK(
graph.m_node_output_connections[anim_sampler_index0][0].m_target_node
== blend2_instance);
REQUIRE(graph.m_node_output_connections[anim_sampler_index1].size() == 1);
CHECK(graph.m_node_output_connections[anim_sampler_index1][0].m_target_node == blend2_instance);
CHECK(
graph.m_node_output_connections[anim_sampler_index1][0].m_target_node
== blend2_instance);
// Emulate evaluation
CHECK(graph.m_anim_data_work_buffer.m_available_data.size() == 5);
@@ -108,16 +115,16 @@ TEST_CASE("BasicGraph", "[AnimGraphResource]") {
CHECK(graph.m_anim_data_work_buffer.m_available_data.size() == 4);
graph.prepareNodeEval(0);
Socket* graph_output_socket = graph.getOutputSocket("GraphOutput");
const Socket* graph_output_socket = graph.getOutputSocket("GraphOutput");
CHECK(blend2_instance->o_output == (*graph_output_socket->m_value.ptr_ptr));
AnimData* graph_output = static_cast<AnimData*>(*graph_output_socket->m_value.ptr_ptr);
AnimData* graph_output =
static_cast<AnimData*>(*graph_output_socket->m_value.ptr_ptr);
graph.finishNodeEval(0);
CHECK(blend2_instance->o_output == nullptr);
CHECK(graph_output == (*graph_output_socket->m_value.ptr_ptr));
CHECK(graph.m_anim_data_work_buffer.m_available_data.size() == 5);
}
/*
TEST_CASE("InputAttributeConversion", "[AnimGraphResource]") {
int node_id = 3321;
int input_index = 221;
@@ -137,30 +144,62 @@ TEST_CASE("InputAttributeConversion", "[AnimGraphResource]") {
CHECK(output_index == parsed_output_index);
}
TEST_CASE("ResourceSaveLoadGraphInputs", "[AnimGraphResource]") {
TEST_CASE("ResourceSaveLoadMathGraphInputs", "[AnimGraphResource]") {
AnimGraphResource graph_resource_origin;
graph_resource_origin.clear();
graph_resource_origin.m_name = "TestInputOutputGraph";
AnimNodeResource& graph_output_node = graph_resource_origin.m_nodes[0];
graph_output_node.m_socket_accessor->RegisterInput<AnimData>(
"GraphOutput",
nullptr);
size_t float_to_vec3_node_index =
graph_resource_origin.addNode(AnimNodeResourceFactory("MathFloatToVec3Node"));
AnimNodeResource& graph_output_node =
graph_resource_origin.getGraphOutputNode();
graph_output_node.m_socket_accessor->RegisterInput<float>(
"SomeFloatOutput",
"GraphFloatOutput",
nullptr);
graph_output_node.m_socket_accessor->RegisterInput<Vec3>(
"GraphVec3Output",
nullptr);
AnimNodeResource& graph_input_node = graph_resource_origin.m_nodes[1];
graph_input_node.m_socket_accessor->RegisterOutput<AnimData>(
"GraphAnimInput",
nullptr);
AnimNodeResource& graph_input_node =
graph_resource_origin.getGraphInputNode();
graph_input_node.m_socket_accessor->RegisterOutput<float>(
"GraphFloatInput",
nullptr);
graph_input_node.m_socket_accessor->RegisterOutput<bool>(
"GraphBoolInput",
nullptr);
// Prepare graph inputs and outputs
AnimNodeResource& float_to_vec3_node =
graph_resource_origin.m_nodes[float_to_vec3_node_index];
REQUIRE(graph_resource_origin.connectSockets(
graph_input_node,
"GraphFloatInput",
graph_output_node,
"GraphFloatOutput"));
REQUIRE(graph_resource_origin.connectSockets(
graph_input_node,
"GraphFloatInput",
float_to_vec3_node,
"Input0"));
REQUIRE(graph_resource_origin.connectSockets(
graph_input_node,
"GraphFloatInput",
float_to_vec3_node,
"Input1"));
REQUIRE(graph_resource_origin.connectSockets(
graph_input_node,
"GraphFloatInput",
float_to_vec3_node,
"Input2"));
REQUIRE(graph_resource_origin.connectSockets(
float_to_vec3_node,
"Output",
graph_output_node,
"GraphVec3Output"));
WHEN("Saving and loading graph resource") {
const char* filename = "ResourceSaveLoadGraphInputs.json";
@@ -183,43 +222,49 @@ TEST_CASE("ResourceSaveLoadGraphInputs", "[AnimGraphResource]") {
graph_input_node.m_socket_accessor->m_outputs.size()
== graph_loaded_input_node.m_socket_accessor->m_outputs.size());
REQUIRE(
graph_loaded_input_node.m_socket_accessor->FindOutputSocket(
"GraphAnimInput")
!= nullptr);
REQUIRE(
graph_loaded_input_node.m_socket_accessor->FindOutputSocket(
"GraphFloatInput")
!= nullptr);
REQUIRE(
graph_loaded_input_node.m_socket_accessor->FindOutputSocket(
"GraphBoolInput")
!= nullptr);
REQUIRE(
graph_loaded_output_node.m_socket_accessor->FindInputSocket(
"GraphOutput")
"GraphFloatOutput")
!= nullptr);
REQUIRE(
graph_loaded_output_node.m_socket_accessor->FindInputSocket(
"SomeFloatOutput")
"GraphVec3Output")
!= nullptr);
}
WHEN("Instantiating an AnimGraph") {
AnimGraph anim_graph = graph_resource_loaded.createInstance();
WHEN("Instantiating an AnimGraph") {
AnimGraph anim_graph = graph_resource_loaded.createInstance();
REQUIRE(
anim_graph.getOutput("GraphOutput") == anim_graph.m_output_buffer);
REQUIRE(
anim_graph.getOutput("SomeFloatOutput")
== anim_graph.m_output_buffer + sizeof(AnimData));
REQUIRE(anim_graph.getInputSocket("GraphFloatInput") != nullptr);
REQUIRE(anim_graph.getInputPtr("GraphFloatInput") == anim_graph.m_input_buffer);
REQUIRE(anim_graph.getInput("GraphAnimInput") == nullptr);
REQUIRE(anim_graph.getInput("GraphFloatInput") == nullptr);
REQUIRE(anim_graph.getInput("GraphBoolInput") == nullptr);
float* graph_float_input = nullptr;
graph_float_input = static_cast<float*>(anim_graph.getInputPtr("GraphFloatInput"));
*graph_float_input = 123.456f;
anim_graph.updateTime(0.f);
anim_graph.evaluate();
anim_graph.evalOutputNode();
Socket* float_output_socket = anim_graph.getOutputSocket("GraphFloatOutput");
Socket* vec3_output_socket = anim_graph.getOutputSocket("GraphVec3Output");
Vec3& vec3_output = *static_cast<Vec3*>(vec3_output_socket->m_value.ptr);
CHECK(vec3_output[0] == *graph_float_input);
CHECK(vec3_output[1] == *graph_float_input);
CHECK(vec3_output[2] == *graph_float_input);
}
}
}
}
/*
WHEN("Connecting input to output and instantiating the graph") {
AnimNodeResource& graph_output_node = graph_resource_origin.m_nodes[0];