editor view buffer
parent
eee31fa5e9
commit
95c89d3ce1
195
src/Silkworm.c
195
src/Silkworm.c
|
@ -1087,7 +1087,200 @@ double Silkworm_ClothFillTriangleBuffer(double clothId, double leftUV, double wi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (double)triangleCount;
|
return (double)triangleCount * 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* in bytes */
|
||||||
|
double Silkworm_GetEditorBufferRequiredSize()
|
||||||
|
{
|
||||||
|
return 72 * context->nodeCount + 72 * context->linkCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* position, color */
|
||||||
|
double Silkworm_FillEditorBuffer()
|
||||||
|
{
|
||||||
|
uint32_t i, triangleCount;
|
||||||
|
uint8_t* bufferAddress = context->currentBufferAddress;
|
||||||
|
|
||||||
|
Silkworm_Vector2 position;
|
||||||
|
position.x = 0;
|
||||||
|
position.y = 0;
|
||||||
|
|
||||||
|
Silkworm_Color color;
|
||||||
|
color.r = 0;
|
||||||
|
color.g = 0;
|
||||||
|
color.b = 255;
|
||||||
|
color.a = 255;
|
||||||
|
|
||||||
|
triangleCount = 0;
|
||||||
|
|
||||||
|
/* draw links */
|
||||||
|
for (i = 0; i < context->linkCount; i += 1)
|
||||||
|
{
|
||||||
|
Silkworm_Link* link = context->links[i];
|
||||||
|
|
||||||
|
if (link != NULL)
|
||||||
|
{
|
||||||
|
/* top left triangle */
|
||||||
|
float left, right, top, bottom;
|
||||||
|
|
||||||
|
if (link->a->position.y < link->b->position.y)
|
||||||
|
{
|
||||||
|
top = link->a->position.y;
|
||||||
|
bottom = link->b->position.y;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
top = link->b->position.y;
|
||||||
|
bottom = link->a->position.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (link->a->position.x < link->b->position.x)
|
||||||
|
{
|
||||||
|
left = link->a->position.x;
|
||||||
|
right = link->b->position.x;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
left = link->b->position.x;
|
||||||
|
right = link->a->position.x;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* upper left triangle */
|
||||||
|
position.x = left;
|
||||||
|
position.y = top;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
position.x = right;
|
||||||
|
position.y = top;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
position.x = left;
|
||||||
|
position.y = bottom;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
triangleCount += 1;
|
||||||
|
|
||||||
|
/* bottom right triangle */
|
||||||
|
position.x = left;
|
||||||
|
position.y = bottom;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
position.x = right;
|
||||||
|
position.y = top;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
position.x = right;
|
||||||
|
position.y = bottom;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
triangleCount += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
color.r = 255;
|
||||||
|
color.b = 0;
|
||||||
|
|
||||||
|
/* draw nodes */
|
||||||
|
for (i = 0; i < context->nodeCount; i += 1)
|
||||||
|
{
|
||||||
|
Silkworm_Node* node = context->nodes[i];
|
||||||
|
|
||||||
|
if (node != NULL)
|
||||||
|
{
|
||||||
|
/* top left triangle */
|
||||||
|
position.x = node->position.x - node->radius;
|
||||||
|
position.y = node->position.y - node->radius;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
position.x = node->position.x + node->radius;
|
||||||
|
position.y = node->position.y - node->radius;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
position.x = node->position.x - node->radius;
|
||||||
|
position.y = node->position.y + node->radius;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
triangleCount += 1;
|
||||||
|
|
||||||
|
/* bottom right triangle */
|
||||||
|
position.x = node->position.x - node->radius;
|
||||||
|
position.y = node->position.y + node->radius;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
position.x = node->position.x + node->radius;
|
||||||
|
position.y = node->position.y - node->radius;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
position.x = node->position.x + node->radius;
|
||||||
|
position.y = node->position.y + node->radius;
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &position, sizeof(Silkworm_Vector2));
|
||||||
|
bufferAddress += sizeof(Silkworm_Vector2);
|
||||||
|
|
||||||
|
memcpy(bufferAddress, &color, sizeof(Silkworm_Color));
|
||||||
|
bufferAddress += sizeof(Silkworm_Color);
|
||||||
|
|
||||||
|
triangleCount += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (double)triangleCount * 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Silkworm_PushNodesInRadius(double x, double y, double radius, double xDirection, double yDirection)
|
void Silkworm_PushNodesInRadius(double x, double y, double radius, double xDirection, double yDirection)
|
||||||
|
|
|
@ -75,6 +75,9 @@ SILKWORMAPI void Silkworm_DestroyCloth(double clothId);
|
||||||
SILKWORMAPI void Silkworm_SetTriangleBuffer(const char* bufferId);
|
SILKWORMAPI void Silkworm_SetTriangleBuffer(const char* bufferId);
|
||||||
SILKWORMAPI double Silkworm_ClothFillTriangleBuffer(double clothId, double leftUV, double widthUV, double topUV, double heightUV);
|
SILKWORMAPI double Silkworm_ClothFillTriangleBuffer(double clothId, double leftUV, double widthUV, double topUV, double heightUV);
|
||||||
|
|
||||||
|
SILKWORMAPI double Silkworm_GetEditorBufferRequiredSize();
|
||||||
|
SILKWORMAPI double Silkworm_FillEditorBuffer();
|
||||||
|
|
||||||
SILKWORMAPI void Silkworm_DestroyNode(double nodeId);
|
SILKWORMAPI void Silkworm_DestroyNode(double nodeId);
|
||||||
|
|
||||||
SILKWORMAPI void Silkworm_PushNodesInRadius(double x, double y, double radius, double xDirection, double yDirection);
|
SILKWORMAPI void Silkworm_PushNodesInRadius(double x, double y, double radius, double xDirection, double yDirection);
|
||||||
|
|
Loading…
Reference in New Issue