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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,6 +75,9 @@ SILKWORMAPI void Silkworm_DestroyCloth(double clothId);
 | 
			
		|||
SILKWORMAPI void Silkworm_SetTriangleBuffer(const char* bufferId);
 | 
			
		||||
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_PushNodesInRadius(double x, double y, double radius, double xDirection, double yDirection);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue