mirror of
https://github.com/Xaymar/obs-StreamFX
synced 2024-11-30 15:23:01 +00:00
filter-transform: Add shearing support
This commit is contained in:
parent
b07b5b1a0a
commit
90563e6b31
2 changed files with 30 additions and 9 deletions
|
@ -45,6 +45,9 @@ extern "C" {
|
|||
#define ST_SCALE "Filter.Transform.Scale"
|
||||
#define ST_SCALE_X "Filter.Transform.Scale.X"
|
||||
#define ST_SCALE_Y "Filter.Transform.Scale.Y"
|
||||
#define ST_SHEAR "Filter.Transform.Shear"
|
||||
#define ST_SHEAR_X "Filter.Transform.Shear.X"
|
||||
#define ST_SHEAR_Y "Filter.Transform.Shear.Y"
|
||||
#define ST_ROTATION_ORDER "Filter.Transform.Rotation.Order"
|
||||
#define ST_ROTATION_ORDER_XYZ "Filter.Transform.Rotation.Order.XYZ"
|
||||
#define ST_ROTATION_ORDER_XZY "Filter.Transform.Rotation.Order.XZY"
|
||||
|
@ -110,6 +113,8 @@ void Filter::Transform::get_defaults(obs_data_t *data) {
|
|||
obs_data_set_default_double(data, ST_ROTATION_Z, 0);
|
||||
obs_data_set_default_double(data, ST_SCALE_X, 100);
|
||||
obs_data_set_default_double(data, ST_SCALE_Y, 100);
|
||||
obs_data_set_default_double(data, ST_SHEAR_X, 0);
|
||||
obs_data_set_default_double(data, ST_SHEAR_Y, 0);
|
||||
obs_data_set_default_bool(data, S_ADVANCED, false);
|
||||
obs_data_set_default_int(data, ST_ROTATION_ORDER,
|
||||
RotationOrder::ZXY); //ZXY
|
||||
|
@ -172,6 +177,18 @@ obs_properties_t * Filter::Transform::get_properties(void *) {
|
|||
P_TRANSLATE(kv.second));
|
||||
}
|
||||
}
|
||||
{
|
||||
std::pair<const char*, const char*> entries[] = {
|
||||
std::make_pair(ST_SHEAR_X, P_DESC(ST_SHEAR_X)),
|
||||
std::make_pair(ST_SHEAR_Y, P_DESC(ST_SHEAR_Y)),
|
||||
};
|
||||
for (auto kv : entries) {
|
||||
p = obs_properties_add_float_slider(pr, kv.first,
|
||||
P_TRANSLATE(kv.first), -100.0, 100.0, 0.01);
|
||||
obs_property_set_long_description(p,
|
||||
P_TRANSLATE(kv.second));
|
||||
}
|
||||
}
|
||||
|
||||
p = obs_properties_add_bool(pr, S_ADVANCED, P_TRANSLATE(S_ADVANCED));
|
||||
obs_property_set_modified_callback(p, modified_properties);
|
||||
|
@ -307,6 +324,9 @@ void Filter::Transform::Instance::update(obs_data_t *data) {
|
|||
ST_ROTATION_Y) / 180.0f * PI;
|
||||
m_rotation.z = (float)obs_data_get_double(data,
|
||||
ST_ROTATION_Z) / 180.0f * PI;
|
||||
m_shear.x = (float)obs_data_get_double(data, ST_SHEAR_X) / 100.0f;
|
||||
m_shear.y = (float)obs_data_get_double(data, ST_SHEAR_Y) / 100.0f;
|
||||
m_shear.z = 0.0;
|
||||
m_isMeshUpdateRequired = true;
|
||||
}
|
||||
|
||||
|
@ -435,8 +455,8 @@ void Filter::Transform::Instance::video_render(gs_effect_t *paramEffect) {
|
|||
GS::Vertex& v = m_vertexHelper->at(0);
|
||||
v.uv[0].x = 0; v.uv[0].y = 0;
|
||||
v.color = 0xFFFFFFFF;
|
||||
v.position.x = -p_x;
|
||||
v.position.y = -p_y;
|
||||
v.position.x = -p_x + m_shear.x;
|
||||
v.position.y = -p_y - m_shear.y;
|
||||
v.position.z = 0.0f;
|
||||
vec3_transform(&v.position, &v.position, &ident);
|
||||
}
|
||||
|
@ -444,8 +464,8 @@ void Filter::Transform::Instance::video_render(gs_effect_t *paramEffect) {
|
|||
GS::Vertex& v = m_vertexHelper->at(1);
|
||||
v.uv[0].x = 1; v.uv[0].y = 0;
|
||||
v.color = 0xFFFFFFFF;
|
||||
v.position.x = p_x;
|
||||
v.position.y = -p_y;
|
||||
v.position.x = p_x + m_shear.x;
|
||||
v.position.y = -p_y + m_shear.y;
|
||||
v.position.z = 0.0f;
|
||||
vec3_transform(&v.position, &v.position, &ident);
|
||||
}
|
||||
|
@ -453,8 +473,8 @@ void Filter::Transform::Instance::video_render(gs_effect_t *paramEffect) {
|
|||
GS::Vertex& v = m_vertexHelper->at(2);
|
||||
v.uv[0].x = 0; v.uv[0].y = 1;
|
||||
v.color = 0xFFFFFFFF;
|
||||
v.position.x = -p_x;
|
||||
v.position.y = p_y;
|
||||
v.position.x = -p_x - m_shear.x;
|
||||
v.position.y = p_y - m_shear.y;
|
||||
v.position.z = 0.0f;
|
||||
vec3_transform(&v.position, &v.position, &ident);
|
||||
}
|
||||
|
@ -462,8 +482,8 @@ void Filter::Transform::Instance::video_render(gs_effect_t *paramEffect) {
|
|||
GS::Vertex& v = m_vertexHelper->at(3);
|
||||
v.uv[0].x = 1; v.uv[0].y = 1;
|
||||
v.color = 0xFFFFFFFF;
|
||||
v.position.x = p_x;
|
||||
v.position.y = p_y;
|
||||
v.position.x = p_x - m_shear.x;
|
||||
v.position.y = p_y + m_shear.y;
|
||||
v.position.z = 0.0f;
|
||||
vec3_transform(&v.position, &v.position, &ident);
|
||||
}
|
||||
|
|
|
@ -78,7 +78,8 @@ namespace Filter {
|
|||
uint32_t m_rotationOrder;
|
||||
vec3 m_position,
|
||||
m_rotation,
|
||||
m_scale;
|
||||
m_scale,
|
||||
m_shear;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue