Simplified indexing in the loops.

This commit is contained in:
vinivendra 2016-02-12 13:51:10 -05:00
parent 8de54d9d65
commit e7d1cf4e8c

View File

@ -5,18 +5,18 @@ using namespace metal;
kernel void drawMetaballs(texture2d<float, access::write> outTexture[[texture(0)]], constant float *edgesBuffer[[buffer(1)]], constant float *metaballBuffer[[buffer(0)]], uint2 gid[[thread_position_in_grid]]) {
uint numberOfMetaballs = metaballBuffer[0];
uint metaballArraySize = numberOfMetaballs * 2 + 1;
char numberOfMetaballs = metaballBuffer[0];
char metaballArraySize = numberOfMetaballs * 2 + 1;
float sum = 0;
uint i, j, x, y;
char x, y;
float metaballDistances[10];
float2 metaballDirections[10];
for (i = 1, x = 0; i < metaballArraySize; i += 2, x += 1) {
float2 metaball = float2(metaballBuffer[i], metaballBuffer[i + 1]);
for (y = 1, x = 0; y < metaballArraySize; y += 2, x += 1) {
float2 metaball = float2(metaballBuffer[y], metaballBuffer[y + 1]);
float2 vector = float2(metaball.x - gid.x, metaball.y - gid.y);
float squaredDistance = dot(vector, vector);
float realDistance = sqrt(squaredDistance);
@ -24,11 +24,11 @@ kernel void drawMetaballs(texture2d<float, access::write> outTexture[[texture(0)
metaballDirections[x] = vector/realDistance;
}
for (i = 1, x = 0; i < metaballArraySize; i += 2, x += 1) {
for (x = 0; x < numberOfMetaballs; x += 1) {
float value1 = 2048 / (metaballDistances[x] + 1);
float2 direction1 = metaballDirections[x];
for (j = i + 2, y = x + 1; j < metaballArraySize; j += 2, y += 1) {
for (y = x + 1; y < numberOfMetaballs; y += 1) {
float value2 = 2048 / (metaballDistances[y] + 1);
float2 direction2 = metaballDirections[y];