|
@@ -177,14 +177,31 @@ public class BufferObject extends NativeObject {
|
|
return estimate((float[]) field.getValue());
|
|
return estimate((float[]) field.getValue());
|
|
}
|
|
}
|
|
case Vector2Array: {
|
|
case Vector2Array: {
|
|
- return estimateVecArray(field.getValue(), 2);
|
|
|
|
|
|
+ return estimateArray(field.getValue(), 2);
|
|
}
|
|
}
|
|
case Vector3Array: {
|
|
case Vector3Array: {
|
|
final int multiplier = layout == Layout.std140? 4 : 3;
|
|
final int multiplier = layout == Layout.std140? 4 : 3;
|
|
- return estimateVecArray(field.getValue(), multiplier);
|
|
|
|
|
|
+ return estimateArray(field.getValue(), multiplier);
|
|
}
|
|
}
|
|
case Vector4Array: {
|
|
case Vector4Array: {
|
|
- return estimateVecArray(field.getValue(), 4);
|
|
|
|
|
|
+ return estimateArray(field.getValue(), 4);
|
|
|
|
+ }
|
|
|
|
+ case Matrix3: {
|
|
|
|
+ final int multiplier = layout == Layout.std140? 4 : 3;
|
|
|
|
+ return 3 * multiplier;
|
|
|
|
+ }
|
|
|
|
+ case Matrix4: {
|
|
|
|
+ return 4 * 4;
|
|
|
|
+ }
|
|
|
|
+ case Matrix3Array: {
|
|
|
|
+ int multiplier = layout == Layout.std140? 4 : 3;
|
|
|
|
+ multiplier *= 3;
|
|
|
|
+ return estimateArray(field.getValue(), multiplier);
|
|
|
|
+ }
|
|
|
|
+ case Matrix4Array: {
|
|
|
|
+ int multiplier = layout == Layout.std140? 4 : 3;
|
|
|
|
+ multiplier *= 4;
|
|
|
|
+ return estimateArray(field.getValue(), multiplier);
|
|
}
|
|
}
|
|
default: {
|
|
default: {
|
|
throw new IllegalArgumentException("The type of BO field " + field.getType() + " doesn't support.");
|
|
throw new IllegalArgumentException("The type of BO field " + field.getType() + " doesn't support.");
|
|
@@ -199,7 +216,7 @@ public class BufferObject extends NativeObject {
|
|
* @param multiplier the multiplier.
|
|
* @param multiplier the multiplier.
|
|
* @return the estimated bytes cunt.
|
|
* @return the estimated bytes cunt.
|
|
*/
|
|
*/
|
|
- protected int estimateVecArray(final Object value, final int multiplier) {
|
|
|
|
|
|
+ protected int estimateArray(final Object value, final int multiplier) {
|
|
|
|
|
|
if (value instanceof Object[]) {
|
|
if (value instanceof Object[]) {
|
|
return ((Object[]) value).length * multiplier;
|
|
return ((Object[]) value).length * multiplier;
|
|
@@ -279,12 +296,91 @@ public class BufferObject extends NativeObject {
|
|
writeVec4Array(data, value);
|
|
writeVec4Array(data, value);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
+ case Matrix3: {
|
|
|
|
+ write(data, (Matrix3f) value);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case Matrix4: {
|
|
|
|
+ write(data, (Matrix4f) value);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case Matrix3Array: {
|
|
|
|
+ writeMat3Array(data, value);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case Matrix4Array: {
|
|
|
|
+ writeMat4Array(data, value);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
default: {
|
|
default: {
|
|
throw new IllegalArgumentException("The type of BO field " + field.getType() + " doesn't support.");
|
|
throw new IllegalArgumentException("The type of BO field " + field.getType() + " doesn't support.");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Writes the value to the data buffer.
|
|
|
|
+ *
|
|
|
|
+ * @param data the data buffer.
|
|
|
|
+ * @param value the value.
|
|
|
|
+ */
|
|
|
|
+ protected void writeMat3Array(final ByteBuffer data, final Object value) {
|
|
|
|
+
|
|
|
|
+ if (value instanceof Matrix3f[]) {
|
|
|
|
+
|
|
|
|
+ final Matrix3f[] values = (Matrix3f[]) value;
|
|
|
|
+ for (final Matrix3f mat : values) {
|
|
|
|
+ write(data, mat);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else if(value instanceof SafeArrayList) {
|
|
|
|
+
|
|
|
|
+ final SafeArrayList<Matrix3f> values = (SafeArrayList<Matrix3f>) value;
|
|
|
|
+ for (final Matrix3f mat : values.getArray()) {
|
|
|
|
+ write(data, mat);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else if(value instanceof Collection) {
|
|
|
|
+
|
|
|
|
+ final Collection<Matrix3f> values = (Collection<Matrix3f>) value;
|
|
|
|
+ for (final Matrix3f mat : values) {
|
|
|
|
+ write(data, mat);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Writes the value to the data buffer.
|
|
|
|
+ *
|
|
|
|
+ * @param data the data buffer.
|
|
|
|
+ * @param value the value.
|
|
|
|
+ */
|
|
|
|
+ protected void writeMat4Array(final ByteBuffer data, final Object value) {
|
|
|
|
+
|
|
|
|
+ if (value instanceof Matrix4f[]) {
|
|
|
|
+
|
|
|
|
+ final Matrix4f[] values = (Matrix4f[]) value;
|
|
|
|
+ for (final Matrix4f mat : values) {
|
|
|
|
+ write(data, mat);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else if(value instanceof SafeArrayList) {
|
|
|
|
+
|
|
|
|
+ final SafeArrayList<Matrix4f> values = (SafeArrayList<Matrix4f>) value;
|
|
|
|
+ for (final Matrix4f mat : values.getArray()) {
|
|
|
|
+ write(data, mat);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else if(value instanceof Collection) {
|
|
|
|
+
|
|
|
|
+ final Collection<Matrix4f> values = (Collection<Matrix4f>) value;
|
|
|
|
+ for (final Matrix4f mat : values) {
|
|
|
|
+ write(data, mat);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Writes the value to the data buffer.
|
|
* Writes the value to the data buffer.
|
|
*
|
|
*
|
|
@@ -453,6 +549,41 @@ public class BufferObject extends NativeObject {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Writes the value to the data buffer.
|
|
|
|
+ *
|
|
|
|
+ * @param data the data buffer.
|
|
|
|
+ * @param x the x value.
|
|
|
|
+ * @param y the y value.
|
|
|
|
+ * @param z the z value.
|
|
|
|
+ */
|
|
|
|
+ protected void write(final ByteBuffer data, final float x, final float y, final float z) {
|
|
|
|
+
|
|
|
|
+ data.putFloat(x)
|
|
|
|
+ .putFloat(y)
|
|
|
|
+ .putFloat(z);
|
|
|
|
+
|
|
|
|
+ if (layout == Layout.std140) {
|
|
|
|
+ data.putInt(0);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Writes the value to the data buffer.
|
|
|
|
+ *
|
|
|
|
+ * @param data the data buffer.
|
|
|
|
+ * @param x the x value.
|
|
|
|
+ * @param y the y value.
|
|
|
|
+ * @param z the z value.
|
|
|
|
+ * @param w the w value.
|
|
|
|
+ */
|
|
|
|
+ protected void write(final ByteBuffer data, final float x, final float y, final float z, final float w) {
|
|
|
|
+ data.putFloat(x)
|
|
|
|
+ .putFloat(y)
|
|
|
|
+ .putFloat(z)
|
|
|
|
+ .putFloat(w);
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Writes the value to the data buffer.
|
|
* Writes the value to the data buffer.
|
|
*
|
|
*
|
|
@@ -464,6 +595,31 @@ public class BufferObject extends NativeObject {
|
|
.putFloat(value.getY());
|
|
.putFloat(value.getY());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Writes the value to the data buffer.
|
|
|
|
+ *
|
|
|
|
+ * @param data the data buffer.
|
|
|
|
+ * @param value the value.
|
|
|
|
+ */
|
|
|
|
+ protected void write(final ByteBuffer data, final Matrix3f value) {
|
|
|
|
+ write(data, value.get(0, 0), value.get(0, 1), value.get(0, 2));
|
|
|
|
+ write(data, value.get(1, 0), value.get(1, 1), value.get(1, 2));
|
|
|
|
+ write(data, value.get(2, 0), value.get(2, 1), value.get(2, 2));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Writes the value to the data buffer.
|
|
|
|
+ *
|
|
|
|
+ * @param data the data buffer.
|
|
|
|
+ * @param value the value.
|
|
|
|
+ */
|
|
|
|
+ protected void write(final ByteBuffer data, final Matrix4f value) {
|
|
|
|
+ write(data, value.get(0, 0), value.get(0, 1), value.get(0, 2), value.get(0, 3));
|
|
|
|
+ write(data, value.get(1, 0), value.get(1, 1), value.get(1, 2), value.get(1, 3));
|
|
|
|
+ write(data, value.get(2, 0), value.get(2, 1), value.get(2, 2), value.get(2, 3));
|
|
|
|
+ write(data, value.get(3, 0), value.get(3, 1), value.get(3, 2), value.get(3, 3));
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public void deleteObject(final Object rendererObject) {
|
|
public void deleteObject(final Object rendererObject) {
|
|
|
|
|