From f45ade151aa7bc7843dc3289b4957e1c8322e19c Mon Sep 17 00:00:00 2001 From: Chronos Ouroboros Date: Sat, 19 Oct 2019 04:41:57 -0300 Subject: [PATCH 1/2] Added direct-native versions of the Shape2D API. --- src/rendering/2d/v_2ddrawer.cpp | 50 +++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/src/rendering/2d/v_2ddrawer.cpp b/src/rendering/2d/v_2ddrawer.cpp index 2a0ced4bb..6cc59f4c0 100644 --- a/src/rendering/2d/v_2ddrawer.cpp +++ b/src/rendering/2d/v_2ddrawer.cpp @@ -81,48 +81,68 @@ DEFINE_ACTION_FUNCTION(DShape2D, SetTransform) return 0; } -DEFINE_ACTION_FUNCTION(DShape2D, Clear) +static void Shape2D_Clear(DShape2D* self, int which) { - PARAM_SELF_PROLOGUE(DShape2D); - PARAM_INT(which); - if ( which&C_Verts ) + if (which & C_Verts) { self->mVertices.Clear(); self->dirty = true; } - if ( which&C_Coords ) self->mCoords.Clear(); - if ( which&C_Indices ) self->mIndices.Clear(); + if (which & C_Coords) self->mCoords.Clear(); + if (which & C_Indices) self->mIndices.Clear(); +} + +DEFINE_ACTION_FUNCTION_NATIVE(DShape2D, Clear, Shape2D_Clear) +{ + PARAM_SELF_PROLOGUE(DShape2D); + PARAM_INT(which); + Shape2D_Clear(self, which); return 0; } -DEFINE_ACTION_FUNCTION(DShape2D, PushVertex) +static void Shape2D_PushVertex(DShape2D* self, double x, double y) +{ + self->mVertices.Push(DVector2(x, y)); + self->dirty = true; +} + +DEFINE_ACTION_FUNCTION_NATIVE(DShape2D, PushVertex, Shape2D_PushVertex) { PARAM_SELF_PROLOGUE(DShape2D); PARAM_FLOAT(x); PARAM_FLOAT(y); - self->mVertices.Push(DVector2(x,y)); - self->dirty = true; + Shape2D_PushVertex(self, x, y); return 0; } -DEFINE_ACTION_FUNCTION(DShape2D, PushCoord) +static void Shape2D_PushCoord(DShape2D* self, double u, double v) +{ + self->mCoords.Push(DVector2(u, v)); +} + +DEFINE_ACTION_FUNCTION_NATIVE(DShape2D, PushCoord, Shape2D_PushCoord) { PARAM_SELF_PROLOGUE(DShape2D); PARAM_FLOAT(u); PARAM_FLOAT(v); - self->mCoords.Push(DVector2(u,v)); + Shape2D_PushCoord(self, u, v); return 0; } -DEFINE_ACTION_FUNCTION(DShape2D, PushTriangle) +static void Shape2D_PushTriangle(DShape2D* self, int a, int b, int c) +{ + self->mIndices.Push(a); + self->mIndices.Push(b); + self->mIndices.Push(c); +} + +DEFINE_ACTION_FUNCTION_NATIVE(DShape2D, PushTriangle, Shape2D_PushTriangle) { PARAM_SELF_PROLOGUE(DShape2D); PARAM_INT(a); PARAM_INT(b); PARAM_INT(c); - self->mIndices.Push(a); - self->mIndices.Push(b); - self->mIndices.Push(c); + Shape2D_PushTriangle(self, a, b, c); return 0; } From 1a67899bba6d5cab4661ecea6ed9972e518193fb Mon Sep 17 00:00:00 2001 From: Chronos Ouroboros Date: Sat, 19 Oct 2019 05:25:31 -0300 Subject: [PATCH 2/2] Added direct-native versions of the Shape2D linear transform API. --- src/rendering/2d/v_2ddrawer.cpp | 51 ++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/src/rendering/2d/v_2ddrawer.cpp b/src/rendering/2d/v_2ddrawer.cpp index 6cc59f4c0..f36ee05c4 100644 --- a/src/rendering/2d/v_2ddrawer.cpp +++ b/src/rendering/2d/v_2ddrawer.cpp @@ -37,47 +37,72 @@ EXTERN_CVAR(Float, transsouls) IMPLEMENT_CLASS(DShape2DTransform, false, false) -DEFINE_ACTION_FUNCTION(DShape2DTransform, Clear) +static void Shape2DTransform_Clear(DShape2DTransform* self) +{ + self->transform.Identity(); +} + +DEFINE_ACTION_FUNCTION_NATIVE(DShape2DTransform, Clear, Shape2DTransform_Clear) { PARAM_SELF_PROLOGUE(DShape2DTransform); - self->transform.Identity(); + Shape2DTransform_Clear(self); return 0; } -DEFINE_ACTION_FUNCTION(DShape2DTransform, Rotate) +static void Shape2DTransform_Rotate(DShape2DTransform* self, double angle) +{ + self->transform = DMatrix3x3::Rotate2D(DEG2RAD(angle)) * self->transform; +} + +DEFINE_ACTION_FUNCTION_NATIVE(DShape2DTransform, Rotate, Shape2DTransform_Rotate) { PARAM_SELF_PROLOGUE(DShape2DTransform); PARAM_FLOAT(angle); - self->transform = DMatrix3x3::Rotate2D(DEG2RAD(angle)) * self->transform; + Shape2DTransform_Rotate(self, angle); return 0; } -DEFINE_ACTION_FUNCTION(DShape2DTransform, Scale) +static void Shape2DTransform_Scale(DShape2DTransform* self, double x, double y) { - PARAM_SELF_PROLOGUE(DShape2DTransform); - PARAM_FLOAT(x); - PARAM_FLOAT(y); self->transform = DMatrix3x3::Scale2D(DVector2(x, y)) * self->transform; - return 0; } -DEFINE_ACTION_FUNCTION(DShape2DTransform, Translate) +DEFINE_ACTION_FUNCTION_NATIVE(DShape2DTransform, Scale, Shape2DTransform_Scale) { PARAM_SELF_PROLOGUE(DShape2DTransform); PARAM_FLOAT(x); PARAM_FLOAT(y); + Shape2DTransform_Scale(self, x, y); + return 0; +} + +static void Shape2DTransform_Translate(DShape2DTransform* self, double x, double y) +{ self->transform = DMatrix3x3::Translate2D(DVector2(x, y)) * self->transform; +} + +DEFINE_ACTION_FUNCTION_NATIVE(DShape2DTransform, Translate, Shape2DTransform_Translate) +{ + PARAM_SELF_PROLOGUE(DShape2DTransform); + PARAM_FLOAT(x); + PARAM_FLOAT(y); + Shape2DTransform_Translate(self, x, y); return 0; } IMPLEMENT_CLASS(DShape2D, false, false) -DEFINE_ACTION_FUNCTION(DShape2D, SetTransform) +static void Shape2D_SetTransform(DShape2D* self, DShape2DTransform *transform) +{ + self->transform = transform->transform; + self->dirty = true; +} + +DEFINE_ACTION_FUNCTION_NATIVE(DShape2D, SetTransform, Shape2D_SetTransform) { PARAM_SELF_PROLOGUE(DShape2D); PARAM_OBJECT(transform, DShape2DTransform); - self->transform = transform->transform; - self->dirty = true; + Shape2D_SetTransform(self, transform); return 0; }