浏览代码

heaps Vector/Vector4 changes

Nicolas Cannasse 1 年之前
父节点
当前提交
5b1b55fa17

+ 48 - 48
hide/comp/ColorPicker.hx

@@ -6,7 +6,7 @@ import js.html.InputElement;
 import js.jquery.Event;
 import nw.Clipboard;
 import js.html.PointerEvent;
-import h3d.Vector;
+import h3d.Vector4;
 import js.Browser;
 
 // Displays a color with its alpha component. Can open a color picker on click
@@ -51,7 +51,7 @@ class ColorBox extends Component {
 		super(parent, e);
 		this.canEditAlpha = canEditAlpha;
 		this.isPickerEnabled = inIsPickerEnabled;
-		
+
 		element.click(function(e) {
 			if (picker == null && isPickerEnabled) {
 				picker = new ColorPicker(canEditAlpha, null, this.element);
@@ -125,8 +125,8 @@ class ColorPicker extends Popup {
 
 	var valueChangeGuard : Int = 0;
 
-	public var valueToARGB : (value : Vector,  outColor : Color) -> Color;
-	public var ARGBToValue : (color : Color, outVector: Vector) -> Vector;
+	public var valueToARGB : (value : Vector4,  outColor : Color) -> Color;
+	public var ARGBToValue : (color : Color, outVector: Vector4) -> Vector4;
 
 	public function repaint() {
 
@@ -194,7 +194,7 @@ class ColorPicker extends Popup {
 		preview = new ColorBox(infoBar, null, false, canEditAlpha);
 		preview.element.width(64);
 		preview.element.height(64);
-		
+
 		var inputRow = new Element("<div>");
 		infoBar.append(inputRow);
 
@@ -251,44 +251,44 @@ class ColorPicker extends Popup {
 	function initSliders() {
 		{
 			primarySliders = new SliderGroup(popup, canEditAlpha, ColorSpace.colorModes[1]);
-			
+
 			primarySliders.onChange = function(isDragging : Bool) {
 				workValue = primarySliders.value;
 				change(isDragging);
 			}
-	
+
 			primarySliders.addSlider(new ColorSlider(
 				primarySliders.element,
 				256,
 				256,
-				function(x : Int, y : Int, outVector : Vector) {
+				function(x : Int, y : Int, outVector : Vector4) {
 					outVector.x = primarySliders.workValue.x;
 					outVector.y = x / 255.0;
 					outVector.z = 1.0-(y / 255.0);
 					outVector.w = 1.0;
 				},
-				function(x : Int, y : Int, outVector : Vector) {
+				function(x : Int, y : Int, outVector : Vector4) {
 					outVector.x = primarySliders.workValue.x;
 					outVector.y = x / 255.0;
 					outVector.z = 1.0-(y / 255.0);
 					outVector.w = primarySliders.workValue.w;
-				}, 
+				},
 				function() : {x:Int, y:Int} {
 					return {x: Std.int(primarySliders.workValue.y * 255.0), y: Std.int((1.0-primarySliders.workValue.z) * 255.0)};
 				}));
-			
-	
+
+
 			primarySliders.addSlider(new ColorSlider(
 				primarySliders.element,
 				1,
 				256,
-				function(x : Int, y : Int, outVector : Vector) {
+				function(x : Int, y : Int, outVector : Vector4) {
 					outVector.x = y/255.0;
 					outVector.y = 1.0;
 					outVector.z = 1.0;
 					outVector.w = 1.0;
 				},
-				function(x : Int, y : Int, outVector : Vector) {
+				function(x : Int, y : Int, outVector : Vector4) {
 					outVector.r = y/255.0;
 					outVector.g = primarySliders.workValue.y;
 					outVector.b = primarySliders.workValue.z;
@@ -297,19 +297,19 @@ class ColorPicker extends Popup {
 				function() : {x:Int, y:Int} {
 					return {x: 1, y: Std.int(primarySliders.workValue.x * 255.0)};
 				}));
-	
+
 			if (canEditAlpha) {
 				primarySliders.addSlider(new ColorSlider(
 					primarySliders.element,
 					1,
 					256,
-					function(x : Int, y : Int, outVector : Vector) {
+					function(x : Int, y : Int, outVector : Vector4) {
 						outVector.x = primarySliders.workValue.x;
 						outVector.y = primarySliders.workValue.y;
 						outVector.z = primarySliders.workValue.z;
 						outVector.w = y/255.0;
 					},
-					function(x : Int, y : Int, outVector : Vector) {
+					function(x : Int, y : Int, outVector : Vector4) {
 						outVector.r = primarySliders.workValue.x;
 						outVector.g = primarySliders.workValue.y;
 						outVector.b = primarySliders.workValue.z;
@@ -320,7 +320,7 @@ class ColorPicker extends Popup {
 					}));
 			}
 		}
-		
+
 		new Element("<hr>").appendTo(popup);
 
 		{
@@ -332,33 +332,33 @@ class ColorPicker extends Popup {
 			}
 
 			var vbox = new Element("<div>").addClass("vbox").appendTo(secondarySliders.element);
-			function addRow(mask : Vector, group : SliderGroup, isAlpha : Bool) : ColorSliderComponent {
+			function addRow(mask : Vector4, group : SliderGroup, isAlpha : Bool) : ColorSliderComponent {
 				var div = new Element("<div>").addClass("slider-value").appendTo(vbox);
 
 				var slider = new ColorSlider(
 					div,
 					256,
 					1,
-					if (!isAlpha) function(x : Int, y : Int, outVector : Vector) {
+					if (!isAlpha) function(x : Int, y : Int, outVector : Vector4) {
 						var v = x / 255.0;
 						outVector.x = mask.x * v + ((1.0 - mask.x) * group.workValue.x);
 						outVector.y = mask.y * v + ((1.0 - mask.y) * group.workValue.y);
 						outVector.z = mask.z * v + ((1.0 - mask.z) * group.workValue.z);
 						outVector.w = 1.0;
-					} else function(x : Int, y : Int, outVector : Vector) {
+					} else function(x : Int, y : Int, outVector : Vector4) {
 						var v = x / 255.0;
 						outVector.x = mask.x * v + ((1.0 - mask.x) * group.workValue.x);
 						outVector.y = mask.y * v + ((1.0 - mask.y) * group.workValue.y);
 						outVector.z = mask.z * v + ((1.0 - mask.z) * group.workValue.z);
 						outVector.w = mask.w * v + ((1.0 - mask.w) * group.workValue.w);
 					},
-					function(x : Int, y : Int, outVector : Vector) {
+					function(x : Int, y : Int, outVector : Vector4) {
 						var v = x / 255.0;
 						outVector.x = mask.x * v + ((1.0 - mask.x) * group.workValue.x);
 						outVector.y = mask.y * v + ((1.0 - mask.y) * group.workValue.y);
 						outVector.z = mask.z * v + ((1.0 - mask.z) * group.workValue.z);
 						outVector.w = mask.w * v + ((1.0 - mask.w) * group.workValue.w);
-					}, 
+					},
 					function() : {x:Int, y:Int} {
 						var v = mask.x * group.workValue.x * 255 +
 								mask.y * group.workValue.y * 255 +
@@ -377,7 +377,7 @@ class ColorPicker extends Popup {
 						if (val != null) {
 							slider.pickColorAtPixel(val, 0);
 						}
-					}	
+					}
 				);
 
 				slider.onRepaint = function() {
@@ -392,11 +392,11 @@ class ColorPicker extends Popup {
 			}
 
 			var components = new Array<ColorSliderComponent>();
-			components.push(addRow(new Vector(1.0,0.0,0.0,0.0), secondarySliders, false));
-			components.push(addRow(new Vector(0.0,1.0,0.0,0.0), secondarySliders, false));
-			components.push(addRow(new Vector(0.0,0.0,1.0,0.0), secondarySliders, false));
+			components.push(addRow(new Vector4(1.0,0.0,0.0,0.0), secondarySliders, false));
+			components.push(addRow(new Vector4(0.0,1.0,0.0,0.0), secondarySliders, false));
+			components.push(addRow(new Vector4(0.0,0.0,1.0,0.0), secondarySliders, false));
 			if (canEditAlpha) {
-				components.push(addRow(new Vector(0.0,0.0,0.0,1.0), secondarySliders, true));
+				components.push(addRow(new Vector4(0.0,0.0,0.0,1.0), secondarySliders, true));
 			}
 
 
@@ -475,8 +475,8 @@ class ColorPicker extends Popup {
 		return workValue;
 		//var color = new Color();
 		//valueToARGB(currentValue, color);
-		//return if (!canEditAlpha) (color.r << 16) + (color.g << 8) + color.b 
-		//else (color.r << 16) + (color.g << 8) + (color.b << 0) + (color.a << 24);	
+		//return if (!canEditAlpha) (color.r << 16) + (color.g << 8) + color.b
+		//else (color.r << 16) + (color.g << 8) + (color.b << 0) + (color.a << 24);
 	};
 
 	function set_value(v) {
@@ -491,19 +491,19 @@ class ColorPicker extends Popup {
 }
 
 class ColorSlider extends Component {
-	public var value(get,set) : Vector;
+	public var value(get,set) : Vector4;
 
-	function set_value(v : Vector) {
+	function set_value(v : Vector4) {
 		workValue = v;
 		repaint();
 		return v;
 	}
 
-	function get_value() : Vector {
+	function get_value() : Vector4 {
 		return workValue;
 	}
 
-	var workValue : Vector;
+	var workValue : Vector4;
 
 	var width : Int;
 	var height : Int;
@@ -519,9 +519,9 @@ class ColorSlider extends Component {
 	var valueChangeLock : Int = 0;
 
 	public var colorMode : ColorMode;
-	
-	var getColorAtPixelDisplay : (x : Int, y : Int, outVector : Vector) -> Void;
-	var getColorAtPixel : (x : Int, y : Int, outVector : Vector) -> Void;
+
+	var getColorAtPixelDisplay : (x : Int, y : Int, outVector : Vector4) -> Void;
+	var getColorAtPixel : (x : Int, y : Int, outVector : Vector4) -> Void;
 	public var getCursorPos : () -> {x : Int, y : Int};
 
 	var canvasDownsample = 8;
@@ -531,19 +531,19 @@ class ColorSlider extends Component {
 	}
 
 	public dynamic function onRepaint() {
-		
+
 	}
 
 	public function new(
-		?parent : Element, 
-		width : Int, 
+		?parent : Element,
+		width : Int,
 		inHeight : Int,
-		getColorAtPixelDisplay : (x : Int, y : Int, outVector : Vector) -> Void,
-		?getColorAtPixel : (x : Int, y : Int, outVector : Vector) -> Void,
+		getColorAtPixelDisplay : (x : Int, y : Int, outVector : Vector4) -> Void,
+		?getColorAtPixel : (x : Int, y : Int, outVector : Vector4) -> Void,
 		getCursorPos : () -> {x : Int, y : Int}
 		) {
 		this.getColorAtPixelDisplay = getColorAtPixelDisplay;
-		this.getColorAtPixel = if (getColorAtPixel != null) getColorAtPixel else getColorAtPixelDisplay; 
+		this.getColorAtPixel = if (getColorAtPixel != null) getColorAtPixel else getColorAtPixelDisplay;
 		this.getCursorPos = getCursorPos;
 		this.width = width;
 		this.height = inHeight;
@@ -594,7 +594,7 @@ class ColorSlider extends Component {
 		var c2d = canvas.getContext("2d");
 
 		var image_data = c2d.getImageData(0,0,canvas.width,canvas.height);
-		var value : Vector = new Vector();
+		var value : Vector4 = new Vector4();
 		var color : Color = new Color();
 
 		for (y in 0...canvas.height) {
@@ -642,8 +642,8 @@ class SliderGroup extends Component {
 
 	public var canEditAlpha : Bool = true;
 	public var value(get,set) : Int;
-	public var workValue : Vector = new Vector();
-	var valueChangeLock : Int = 0; 
+	public var workValue : Vector4 = new Vector4();
+	var valueChangeLock : Int = 0;
 
 	var colorMode : ColorMode;
 
@@ -692,8 +692,8 @@ class SliderGroup extends Component {
 	function get_value() {
 		var color = new Color();
 		colorMode.valueToARGB(workValue, color);
-		return if (!canEditAlpha) (color.r << 16) + (color.g << 8) + color.b 
-		else (color.r << 16) + (color.g << 8) + (color.b << 0) + (color.a << 24);	
+		return if (!canEditAlpha) (color.r << 16) + (color.g << 8) + color.b
+		else (color.r << 16) + (color.g << 8) + (color.b << 0) + (color.a << 24);
 	};
 
 	public function addSlider(slider : ColorSlider) : ColorSlider {

+ 17 - 17
hide/comp/GradientEditor.hx

@@ -22,13 +22,13 @@ class GradientBox extends Component {
     var prevHash : Int32 = 0;
 
     function set_value(value: GradientData) {
-        // Cleanup previous gradient value from the cache 
+        // Cleanup previous gradient value from the cache
         var cache = Gradient.getCache();
         cache.remove(prevHash);
 
         innerValue = value;
         prevHash = Gradient.getDataHash(innerValue);
-        
+
         gradientView.value = innerValue;
         if (gradientEditor != null)
             gradientEditor.value = innerValue;
@@ -140,7 +140,7 @@ class GradientEditor extends Popup {
         super(parent, root);
 
         popup.addClass("gradient-editor");
-        
+
         // Allows the popup to become focusable,
         // allowing the handling of keyboard events
         popup.attr("tabindex","-1");
@@ -184,7 +184,7 @@ class GradientEditor extends Popup {
         linesSvg.element.attr({preserveAspectRatio:"xMidYMid slice"});
 
         linesSvg.line(linesSvg.element, 0.0,0.5,1.0,0.5).attr("vector-effect","non-scaling-stroke");
-        
+
         stopsSvg = new SVG(gradientView.element);
         stopsSvg.element.attr({viewBox: '0.0 0.0 1.0 1.0'});
         stopsSvg.element.attr({preserveAspectRatio:"xMidYMid slice"});
@@ -196,7 +196,7 @@ class GradientEditor extends Popup {
         <rect x="0" y="0" width=".25" height=".25" fill="#aaa"/>
         <rect x="0.25" y="0.25" width=".25" height=".25" fill="#aaa"/>
         </pattern>
-         
+
         <filter id="shadow" color-interpolation-filters="sRGB" y="-40%" x="-40%" height="180%" width="180%">
         <feDropShadow dx="0.005" dy="0.005" stdDeviation="0.007" flood-opacity="0.5"/>
         </filter>
@@ -204,14 +204,14 @@ class GradientEditor extends Popup {
 
         var editor = new Element("<div>").addClass("editor").appendTo(popup);
         stopEditor = new Element("<div>").addClass("stop-editor").appendTo(editor);
-        
+
         stopLabel = new Element("<p>").appendTo(stopEditor);
 
         colorbox = new ColorBox(stopEditor, null, true, true);
         colorbox.element.width(64);
         colorbox.element.height(64);
 
-        colorbox.onChange = 
+        colorbox.onChange =
         function(isDragging : Bool) {
             if (selectedStop != null) {
                 var id = stopMarquers.indexOf(selectedStop);
@@ -251,7 +251,7 @@ class GradientEditor extends Popup {
 
 
         isVerticalCheckbox = new Element("<select id='isVertical'>");
-        
+
         new Element('<option value="0">').text('Horizontal').appendTo(isVerticalCheckbox);
         new Element('<option value="1">').text('Vertical').appendTo(isVerticalCheckbox);
 
@@ -339,7 +339,7 @@ class GradientEditor extends Popup {
             stopsSvg.circle(group, 0, 0, 0.05, {}).addClass("outline");
             stopsSvg.circle(group, 0, 0, 0.05, {}).addClass("checkboard");
             stopsSvg.circle(group, 0, 0, 0.05, {}).addClass("fill");
-            
+
             stopMarquers.push(group);
 
             var elem = group.get(0);
@@ -380,7 +380,7 @@ class GradientEditor extends Popup {
             }
         }
 
-        var vector : Vector = new Vector();
+        var vector = new h3d.Vector4();
         for (i in 0...stopMarquers.length) {
             var marquer = stopMarquers[i];
             var stop = innerValue.stops[i];
@@ -415,7 +415,7 @@ class GradientEditor extends Popup {
     function removeStop(element : Element) {
         if (stopMarquers.length <= 1)
             return;
-        
+
         var idx = stopMarquers.indexOf(element);
         innerValue.stops.splice(idx, 1);
 
@@ -427,7 +427,7 @@ class GradientEditor extends Popup {
     function addStop(pos : Float) {
         var color = Gradient.evalData(innerValue, pos);
         innerValue.stops.push({position: pos, color:color.toColor()});
-        innerValue.stops.sort((a, b) -> return if (a.position < b.position) -1 
+        innerValue.stops.sort((a, b) -> return if (a.position < b.position) -1
                                 else if (a.position > b.position) 1
                                 else 0);
         onChange(false);
@@ -444,14 +444,14 @@ class GradientEditor extends Popup {
         }
 
         arr[stopId].stop.position = pos;
-        arr.sort((a, b) -> return if (a.stop.position < b.stop.position) -1 
+        arr.sort((a, b) -> return if (a.stop.position < b.stop.position) -1
                                 else if (a.stop.position > b.stop.position) 1
                                 else 0);
 
         var prevPos = 0.0;
-        
+
         for (i in 0...stopMarquers.length) {
-            innerValue.stops[i] = arr[i].stop;            
+            innerValue.stops[i] = arr[i].stop;
             stopMarquers[i] = arr[i].marquer;
         }
     }
@@ -479,7 +479,7 @@ class GradientView extends Component {
         var c2d = canvas.getContext("2d");
 
         var image_data = c2d.getImageData(0,0,innerValue.resolution,1);
-		var color : Vector = new Vector();
+		var color = new h3d.Vector4();
 
         for (x in 0...innerValue.resolution) {
             var index = x * 4;
@@ -497,7 +497,7 @@ class GradientView extends Component {
         var e = new Element("<div class='gradient-container checkerboard-bg'>");
         super(parent, e);
 
-        var canvasElement = new Element("<canvas class='gradient-preview'>").css({display:"block"}).appendTo(element);           
+        var canvasElement = new Element("<canvas class='gradient-preview'>").css({display:"block"}).appendTo(element);
         canvas = cast(canvasElement.get(0),CanvasElement);
         canvas.height = 1;
     }

+ 1 - 1
hide/comp/PropsEditor.hx

@@ -539,7 +539,7 @@ class PropsField extends Component {
 				}
 				var newVal : Dynamic =
 					if(arr != null) {
-						var vec = h3d.Vector.fromColor(picker.value);
+						var vec = h3d.Vector4.fromColor(picker.value);
 						if(alpha)
 							[vec.x, vec.y, vec.z, vec.w];
 						else

+ 1 - 1
hide/prefab/terrain/GenerateIndex.hx

@@ -24,6 +24,6 @@ class GenerateIndex extends h3d.shader.ScreenShader {
 
 	public function new(){
 		super();
-		mask = [new h3d.Vector(1,0,0,0), new h3d.Vector(0,1,0,0), new h3d.Vector(0,0,1,0), new h3d.Vector(0,0,0,1)];
+		mask = [new h3d.Vector4(1,0,0,0), new h3d.Vector4(0,1,0,0), new h3d.Vector4(0,0,1,0), new h3d.Vector4(0,0,0,1)];
 	}
 }

+ 9 - 9
hide/prefab/terrain/TerrainEditor.hx

@@ -180,7 +180,7 @@ class TerrainEditor {
 		engine.begin();
 		engine.pushTarget(uvTex);
 		engine.clear(0xffffff,1,0);
-		engine.clearF(new h3d.Vector(-1, -1, -1, -1),1,0);
+		engine.clearF(new h3d.Vector4(-1, -1, -1, -1),1,0);
 		customScene.render(engine);
 		engine.popTarget();
 
@@ -709,7 +709,7 @@ class TerrainEditor {
 			brushWorldPos = getBrushWorldPosFromTex(pos, ctx);
 		}
 
-		currentBrush.bitmap.color = new h3d.Vector(1.0);
+		currentBrush.bitmap.color = new h3d.Vector4(1.0);
 		var shader : hrt.shader.Brush = currentBrush.bitmap.getShader(hrt.shader.Brush);
 		if( shader == null ) shader = currentBrush.bitmap.addShader(new hrt.shader.Brush());
 		currentBrush.bitmap.blendMode = currentBrush.brushMode.accumulate ? Add : Max;
@@ -747,7 +747,7 @@ class TerrainEditor {
 
 		var shader : hrt.shader.Brush = currentBrush.bitmap.getShader(hrt.shader.Brush);
 		if( shader == null ) shader = currentBrush.bitmap.addShader(new hrt.shader.Brush());
-		currentBrush.bitmap.color = new h3d.Vector(1.0);
+		currentBrush.bitmap.color = new h3d.Vector4(1.0);
 		shader.size.set(currentBrush.size / terrainPrefab.tileSizeX, currentBrush.size / terrainPrefab.tileSizeY);
 
 		switch( currentBrush.brushMode.mode ) {
@@ -892,18 +892,18 @@ class TerrainEditor {
 		for( tile in terrainPrefab.terrain.tiles )
 			tileRevertDatas.push(new TileRevertData(tile.tileX, tile.tileY));
 
-		var oldIndexes : Array<h3d.Vector> = [];
-		var newIndexes : Array<h3d.Vector> = [];
+		var oldIndexes : Array<h3d.Vector4> = [];
+		var newIndexes : Array<h3d.Vector4> = [];
 		for( i in 0 ... terrainPrefab.terrain.surfaces.length )
-			oldIndexes.push(new h3d.Vector(i));
+			oldIndexes.push(new h3d.Vector4(i));
 		var offset = 0;
 		for( i in 0 ... terrainPrefab.terrain.surfaces.length ) {
 			if( i == index ) {
 				offset = -1;
-				newIndexes.push(new h3d.Vector(0)); // Replace the surface removec by the surface 0
+				newIndexes.push(new h3d.Vector4(0)); // Replace the surface removec by the surface 0
 			}
 			else
-				newIndexes.push(new h3d.Vector(i + offset));
+				newIndexes.push(new h3d.Vector4(i + offset));
 		}
 
 		swapIndex.shader.USE_ARRAY = true;
@@ -1160,7 +1160,7 @@ class TerrainEditor {
 							currentBrush.bitmap = new h2d.Bitmap(h2d.Tile.fromTexture(currentBrush.tex));
 
 						currentBrush.bitmap.smooth = true;
-						currentBrush.bitmap.color = new h3d.Vector(currentBrush.strength);
+						currentBrush.bitmap.color = new h3d.Vector4(currentBrush.strength);
 					}
 					refreshBrushes();
 				});

+ 16 - 18
hide/view/CameraController.hx

@@ -44,6 +44,13 @@ class CameraControllerBase extends h3d.scene.CameraController {
 		data.zNear = zNear;
 		data.zFar = zFar;
 	}
+
+	function offset(pt:h3d.Vector) {
+		targetOffset.x -= pt.x;
+		targetOffset.y -= pt.y;
+		targetOffset.z -= pt.z;
+	}
+
 }
 
 class OrthoController extends CameraControllerBase {
@@ -136,8 +143,7 @@ class OrthoController extends CameraControllerBase {
 							if(fromPt == null || toPt == null)
 								return;
 							var delta = toPt.sub(fromPt).toVector();
-							delta.w = 0;
-							targetOffset = targetOffset.sub(delta);
+							offset(delta);
 						}
 					}
 					pushX = e.relX;
@@ -175,8 +181,7 @@ class OrthoController extends CameraControllerBase {
 		var moveSpeed = Ide.inst.currentConfig.get("sceneeditor.camera.moveSpeed", 1.5);
 
 		var delta = dir.scaled(0.01 * moveSpeed * (distance + scene.camera.zNear));
-		delta.w = 0;
-		targetOffset = targetOffset.sub(delta);
+		offset(delta);
 	}
 
 	override function sync(ctx : h3d.scene.RenderContext) {
@@ -216,7 +221,7 @@ class FPSController extends CameraControllerBase {
 	override function loadSettings(data : Dynamic) : Void {
 		super.loadSettings(data);
 		var cam = sceneEditor.scene.s3d.camera;
-		cam.up.set(0,0,1,0);
+		cam.up.set(0,0,1);
 	}
 
 	override function onEvent(e : hxd.Event) {
@@ -267,8 +272,7 @@ class FPSController extends CameraControllerBase {
 						if(fromPt == null || toPt == null)
 							return;
 						var delta = toPt.sub(fromPt).toVector();
-						delta.w = 0;
-						targetOffset = targetOffset.sub(delta);
+						offset(delta);
 					}
 					pushX = e.relX;
 					pushY = e.relY;
@@ -317,8 +321,7 @@ class FPSController extends CameraControllerBase {
 		var moveSpeed = Ide.inst.currentConfig.get("sceneeditor.camera.moveSpeed", 1.5) * camSpeed;
 
 		var delta = mov.scaled(moveSpeed);
-		delta.w = 0;
-		targetOffset = targetOffset.sub(delta);
+		offset(delta);
 	}
 
 	override function sync(ctx : h3d.scene.RenderContext) {
@@ -350,7 +353,7 @@ class CamController extends CameraControllerBase {
 	override function loadSettings(data : Dynamic) : Void {
 		super.loadSettings(data);
 		var cam = sceneEditor.scene.s3d.camera;
-		cam.up.set(0,0,1,0);
+		cam.up.set(0,0,1);
 		set(data.distance);
 	}
 
@@ -418,8 +421,7 @@ class CamController extends CameraControllerBase {
 							if(fromPt == null || toPt == null)
 								return;
 							var delta = toPt.sub(fromPt).toVector();
-							delta.w = 0;
-							targetOffset = targetOffset.sub(delta);
+							offset(delta);
 						}
 					}
 					pushX = e.relX;
@@ -457,8 +459,7 @@ class CamController extends CameraControllerBase {
 		var moveSpeed = Ide.inst.currentConfig.get("sceneeditor.camera.moveSpeed", 1.5);
 
 		var delta = dir.scaled(0.01 * moveSpeed * (distance + scene.camera.zNear));
-		delta.w = 0;
-		targetOffset = targetOffset.sub(delta);
+		offset(delta);
 	}
 
 	override function sync(ctx : h3d.scene.RenderContext) {
@@ -562,8 +563,6 @@ class FlightController extends CameraControllerBase {
 		tmpVec.scale(mov.z);
 		targetFlightPos = targetFlightPos.add(tmpVec);
 
-		targetFlightPos.w = 1.0;
-
 		if (roll != 0) {
 			lookAround(0,0,roll * 0.05);
 		}
@@ -667,8 +666,7 @@ class FlightController extends CameraControllerBase {
 						if(fromPt == null || toPt == null)
 							return;
 						var delta = toPt.sub(fromPt).toVector();
-						delta.w = 0;
-						targetOffset = targetOffset.sub(delta);
+						offset(delta);
 					}
 					pushX = e.relX;
 					pushY = e.relY;

+ 26 - 26
hide/view/Image.hx

@@ -90,7 +90,7 @@ class Image extends FileView {
 				</div>
 			</div>
 		');
-	
+
 		scene = new hide.comp.Scene(config, null, element.find(".heaps-scene"));
 
 		function addField(parent: Element, label:String, selectClass:String, options:Array<String>) {
@@ -110,7 +110,7 @@ class Image extends FileView {
 
 		var compressionInfo = element.find(".compression-infos");
 		addField(compressionInfo, "Format :", "select-format", ["none", "BC1", "BC2", "BC3", "RGBA", "R16F", "RG16F", "RGBA16F", "R32F", "RG32F", "RGBA32F", "R16U", "RG16U", "RGBA16U"] );
-		
+
 		var mipsField = new Element('<div class="field">
 			<label>Mip maps :</label>
 			<input type="checkbox" class="mips-checkbox"></input>
@@ -138,7 +138,7 @@ class Image extends FileView {
 		@:privateAccess var textureConvertRule = fs.convert.getConvertRule(state.path);
 
 		var convertRuleEmpty = textureConvertRule == null || textureConvertRule.cmd == null || textureConvertRule.cmd.params == null;
-		
+
 		format.val(convertRuleEmpty ? "none" : textureConvertRule.cmd.params.format);
 		format.on("change", function(_) {
 			createPreviewTexture(format, alpha, mips, size);
@@ -146,7 +146,7 @@ class Image extends FileView {
 			// Alpha treshold make sense for BC1 format
 			if (format.val() != "BC1")
 				alpha.parent().css({"display":"none"});
-			else 
+			else
 				alpha.parent().css({"display":"flex"});
 		});
 
@@ -158,7 +158,7 @@ class Image extends FileView {
 		// Alpha treshold make sense for BC1 format
 		if (format.val() != "BC1")
 			alpha.parent().css({"display":"none"});
-		else 
+		else
 			alpha.parent().css({"display":"flex"});
 
 		size.val(convertRuleEmpty || Reflect.field(textureConvertRule.cmd.params, "size") == null ? "undefined" : textureConvertRule.cmd.params.size);
@@ -197,7 +197,7 @@ class Image extends FileView {
 			// Alpha treshold make sense for BC1 format
 			if (format.val() != "BC1")
 				alpha.parent().css({"display":"none"});
-			else 
+			else
 				alpha.parent().css({"display":"flex"});
 
 			createPreviewTexture(format, alpha, mips, size);
@@ -213,7 +213,7 @@ class Image extends FileView {
 			}
 			else {
 				convertRule = { convert : "dds", format : format.val(), mips : mips.is(':checked') };
-				
+
 				if (size.val() != "undefined")
 					Reflect.setField(convertRule, "size", size.val());
 
@@ -266,7 +266,7 @@ class Image extends FileView {
 			if (bmp != null) {
 				this.saveDisplayState("ViewMode", Compressed);
 				this.viewMode = Compressed;
-				
+
 				applyShaderConfiguration();
 			}
 		}, this.viewMode.match(Compressed));
@@ -289,19 +289,19 @@ class Image extends FileView {
 		var tgComparison = tools.addToggle("arrows-h", "Show comparison between compressed and uncompressed texture", "", function (e) {
 			tools.element.find(".show-uncompressed").removeAttr("checked");
 			tools.element.find(".show-compressed").removeAttr("checked");
-			
+
 			if (bmp != null) {
 				this.saveDisplayState("ViewMode", Comparison);
 				this.viewMode = Comparison;
 
 				applyShaderConfiguration();
 			}
-			
+
 		}, this.viewMode.match(Comparison));
 		tgComparison.element.addClass("show-comparison");
 
 		tools.addSeparator();
-		
+
 		// We don't want to load old texture from cache because convert rule might
 		// have been changed
 		@:privateAccess fs.fileCache.remove(state.path);
@@ -360,7 +360,7 @@ class Image extends FileView {
 		} else {
 			var r = new h3d.scene.fwd.Renderer();
 			var ls = new h3d.scene.fwd.LightSystem();
-			ls.ambientLight.set(1,1,1,1);
+			ls.ambientLight.set(1,1,1);
 			scene.s3d.lightSystem = ls;
 			scene.s3d.renderer = r;
 			var sp = new h3d.prim.Sphere(1,64,64);
@@ -416,15 +416,15 @@ class Image extends FileView {
 				{
 					if (sliderBmp == null)
 						sliderBmp = new h2d.Bitmap(h2d.Tile.fromTexture(sliderTexture), bmp);
-					else 
+					else
 						sliderBmp.alpha = 1;
 
 					bmp.addChild(sliderBmp);
 					sliderBmp.height = bmp.tile.height;
-			
+
 					var bounds = new h2d.col.Bounds();
 					sliderBmp.getSize(bounds);
-			
+
 					if (interactive != null)
 						interactive.remove();
 
@@ -432,33 +432,33 @@ class Image extends FileView {
 					interactive.propagateEvents = true;
 					interactive.x = bmp.tile.dx;
 					interactive.y = bmp.tile.dy;
-			
+
 					sliderBmp.x = bmp.tile.width / 2.0 - bounds.width / 2.0;
 					shader.comparisonFactor = 0.5;
 					var clicked = false;
-			
+
 					function updateSlider(e: hxd.Event) {
 						if (!clicked)
 							return;
-			
+
 						sliderBmp.x = e.relX - bounds.width / 2.0;
 						shader.comparisonFactor = e.relX / interactive.width;
 					}
-			
+
 					interactive.onPush = function (e) {
 						clicked = true;
 						updateSlider(e);
 					}
-			
+
 					interactive.onRelease = function (e) {
 						clicked = false;
 					}
-			
+
 					interactive.onMove = function (e) {
 						updateSlider(e);
 					};
 				}
-			
+
 				default:
 					trace("Not implemented yet");
 		}
@@ -472,13 +472,13 @@ class Image extends FileView {
 
 		if (bmp != null && !bmp.tile.isDisposed())
 			bmp.tile.dispose();
-		
+
 		bmp = null;
 		interactive = null;
 		sliderTexture = null;
 		shader = null;
 	}
-	
+
 	public function replaceImage(path : String) {
 		var bytes = sys.io.File.getBytes(path);
 		var res = hxd.res.Any.fromBytes(path, bytes);
@@ -504,7 +504,7 @@ class Image extends FileView {
 		} else {
 			var r = new h3d.scene.fwd.Renderer();
 			var ls = new h3d.scene.fwd.LightSystem();
-			ls.ambientLight.set(1,1,1,1);
+			ls.ambientLight.set(1,1,1);
 			scene.s3d.lightSystem = ls;
 			scene.s3d.renderer = r;
 			var sp = new h3d.prim.Sphere(1,64,64);
@@ -550,7 +550,7 @@ class Image extends FileView {
 		else {
 			tmpPath = state.path;
 		}
-			
+
 		replaceImage(Ide.inst.getPath(tmpPath));
 	}
 

+ 3 - 3
hide/view/l3d/LightProbeBaker.hx

@@ -188,7 +188,7 @@ class LightProbeBaker {
 				for( coef in 0 ... coefCount ) {
 					var u = coords.x + volumetricLightMap.probeCount.x * coef;
 					var v = coords.y + coords.z * volumetricLightMap.probeCount.y;
-					pixels.setPixelF(u, v, new h3d.Vector(sh.coefR[coef], sh.coefG[coef], sh.coefB[coef], 0));
+					pixels.setPixelF(u, v, new h3d.Vector4(sh.coefR[coef], sh.coefG[coef], sh.coefB[coef], 0));
 				}
 			}
 
@@ -309,11 +309,11 @@ class LightProbeBaker {
 		for(coef in 0 ... maxCoef){
 			var pixels = textureArray[coef].capturePixels();
 			for( index in 0 ... pixels.width){
-				var coefs : h3d.Vector = pixels.getPixelF(index, 0);
+				var coefs = pixels.getPixelF(index, 0);
 				var coords = volumetricLightMap.getProbeCoords(index);
 				var u = coords.x + volumetricLightMap.probeCount.x * coef;
 				var v = coords.y + coords.z * volumetricLightMap.probeCount.y;
-				pixelsOut.setPixelF(u, v, new h3d.Vector(coefs.r, coefs.g, coefs.b, 0));
+				pixelsOut.setPixelF(u, v, new h3d.Vector4(coefs.r, coefs.g, coefs.b, 0));
 
 				// Last coefs is inside the alpha channel
 				if( order == 3 ){

+ 1 - 1
hide/view/shadereditor/ShaderEditor.hx

@@ -689,7 +689,7 @@ class ShaderEditor extends hide.view.Graph {
 				shaderGraph.setParameterDefaultValue(parameter.id, value);
 				picker.value = start.toColor();
 				picker.onChange = function(move) {
-					var vecColor = h3d.Vector.fromColor(picker.value);
+					var vecColor = h3d.Vector4.fromColor(picker.value);
 					if (!shaderGraph.setParameterDefaultValue(parameter.id, [vecColor.x, vecColor.y, vecColor.z, vecColor.w]))
 						return;
 					setBoxesParam(parameter.id);

+ 39 - 38
hrt/impl/ColorSpace.hx

@@ -1,11 +1,12 @@
 package hrt.impl;
 
-import h3d.Vector;
+import h3d.Vector4;
+import h3d.Vector4;
 
 typedef ColorMode = {
-	name: String, 
-	valueToARGB : (value : Vector,  outColor : Color) -> Color, 
-	ARGBToValue : (color : Color, outVector: Vector) -> Vector
+	name: String,
+	valueToARGB : (value : Vector4,  outColor : Color) -> Color,
+	ARGBToValue : (color : Color, outVector: Vector4) -> Vector4
 };
 
 class Color {
@@ -32,24 +33,24 @@ class Color {
 }
 
 class ColorSpace {
-    public static function iRGBtofRGB(color : Color, outVector: Vector) : Vector {
+    public static function iRGBtofRGB(color : Color, outVector: Vector4) : Vector4 {
 		if (outVector == null)
-			outVector = new Vector();
+			outVector = new Vector4();
 		outVector.set(color.r/255.0, color.g/255.0, color.b/255.0, color.a/255.0);
 		return outVector;
 	}
 
-	public static function fRGBtoiRGB(color : Vector, outColor : Color) {
+	public static function fRGBtoiRGB(color : Vector4, outColor : Color) {
 		if (outColor == null)
 			outColor = new Color();
 		outColor.r = Std.int(color.r*255.0);
-		outColor.g = Std.int(color.g*255.0); 
+		outColor.g = Std.int(color.g*255.0);
 		outColor.b = Std.int(color.b*255.0);
 		outColor.a = Std.int(color.a*255.0);
 		return outColor;
 	}
 
-	public static function iRGBtoHSV(color: Color, outVector: Vector = null) : Vector {
+	public static function iRGBtoHSV(color: Color, outVector: Vector4 = null) : Vector4 {
 		var r = color.r / 255.0;
 		var g = color.g / 255.0;
 		var b = color.b / 255.0;
@@ -63,10 +64,10 @@ class ColorSpace {
 				else if(Cmax == r) hxd.Math.ufmod((g - b)/D, 6) * 60.0
 				else if (Cmax == g) ((b - r)/D + 2) * 60.0
 				else ((r - g)/D + 4) * 60.0;
-		
+
 		H = H / 360.0;
 		H = Math.min(Math.max(H, 0.0), 1.0);
-		
+
 		var S = if (Cmax == 0) 0 else D/Cmax;
 
 		var V = Cmax;
@@ -74,12 +75,12 @@ class ColorSpace {
 		var A = a;
 
 		if (outVector == null)
-			outVector = new Vector();
+			outVector = new Vector4();
 		outVector.set(H, S, V, A);
 		return outVector;
 	}
 
-	public static function HSVtoiRGB(hsv:Vector, outColor : Color) {
+	public static function HSVtoiRGB(hsv:Vector4, outColor : Color) {
 		if (outColor == null)
 			outColor = new Color();
 		var h = hsv.x * 360.0;
@@ -94,11 +95,11 @@ class ColorSpace {
 		var g = 0.0;
 		var b = 0.0;
 
-		if (h < 60) {r = C; g = X;} 
-		else if (h < 120) {r = X; g = C;} 
-		else if (h < 180) {g = C; b = X;} 
-		else if (h < 240) {g = X; b = C;} 
-		else if (h < 300) {r = X; b = C;} 
+		if (h < 60) {r = C; g = X;}
+		else if (h < 120) {r = X; g = C;}
+		else if (h < 180) {g = C; b = X;}
+		else if (h < 240) {g = X; b = C;}
+		else if (h < 300) {r = X; b = C;}
 		else {r = C; b = X;};
 
 		outColor.r = Std.int(Math.round((r+m)*255));
@@ -109,7 +110,7 @@ class ColorSpace {
 		return outColor;
 	}
 
-	public static function iRGBtoHSL(color : Color, outVector: Vector = null) : Vector {
+	public static function iRGBtoHSL(color : Color, outVector: Vector4 = null) : Vector4 {
 		var r = color.r / 255.0;
 		var g = color.g / 255.0;
 		var b = color.b / 255.0;
@@ -123,7 +124,7 @@ class ColorSpace {
 				else if(Cmax == r) hxd.Math.ufmod((g - b)/D, 6) * 60.0
 				else if (Cmax == g) ((b - r)/D + 2) * 60.0
 				else ((r - g)/D + 4) * 60.0;
-		
+
 		H = H / 360.0;
 		H = Math.min(Math.max(H, 0.0), 1.0);
 
@@ -131,12 +132,12 @@ class ColorSpace {
 		var S = if (D == 0) 0 else D / (1 - Math.abs(2 * L - 1));
 
 		if (outVector == null)
-			outVector = new Vector();
+			outVector = new Vector4();
 		outVector.set(H, S, L, a);
 		return outVector;
 	}
 
-	public static function HSLtoiRGB(hsl : Vector, outColor : Color) {
+	public static function HSLtoiRGB(hsl : Vector4, outColor : Color) {
 		if (outColor == null)
 			outColor = new Color();
 		var h = hsl.x * 360.0;
@@ -151,11 +152,11 @@ class ColorSpace {
 		var g = 0.0;
 		var b = 0.0;
 
-		if (h < 60) {r = C; g = X;} 
-		else if (h < 120) {r = X; g = C;} 
-		else if (h < 180) {g = C; b = X;} 
-		else if (h < 240) {g = X; b = C;} 
-		else if (h < 300) {r = X; b = C;} 
+		if (h < 60) {r = C; g = X;}
+		else if (h < 120) {r = X; g = C;}
+		else if (h < 180) {g = C; b = X;}
+		else if (h < 240) {g = X; b = C;}
+		else if (h < 300) {r = X; b = C;}
 		else {r = C; b = X;};
 
 		outColor.r = Std.int(Math.round((r+m)*255));
@@ -167,7 +168,7 @@ class ColorSpace {
 
 
 
-	public static function iRGBtoXYZ(color : Color, outVector: Vector = null) : Vector {
+	public static function iRGBtoXYZ(color : Color, outVector: Vector4 = null) : Vector4 {
 		outVector = iRGBtofRGB(color, outVector);
 
 		inline function linearize(v:Float) : Float {
@@ -188,8 +189,8 @@ class ColorSpace {
 		return outVector;
 	}
 
-	static var tmpVector : Vector = new Vector();
-	public static function XYZtoiRGB(value: Vector, outColor : Color) : Color {
+	static var tmpVector : Vector4 = new Vector4();
+	public static function XYZtoiRGB(value: Vector4, outColor : Color) : Color {
 		if (outColor == null)
 			outColor = new Color();
 
@@ -217,7 +218,7 @@ class ColorSpace {
 	static final Yn = 100;
 	static final Zn = 108.8840;
 
-	public static function LABtoiRGB(value: Vector, outColor : Color) : Color {
+	public static function LABtoiRGB(value: Vector4, outColor : Color) : Color {
 		// lab -> XYZ
 		inline function fn(t:Float) : Float {
 			var d = 6.0/29.0;
@@ -239,7 +240,7 @@ class ColorSpace {
 		return XYZtoiRGB(tmpVector, outColor);
 	}
 
-	public static function iRGBtoLAB(color : Color, outVector: Vector = null) : Vector {
+	public static function iRGBtoLAB(color : Color, outVector: Vector4 = null) : Vector4 {
 		tmpVector = iRGBtoXYZ(color, tmpVector);
 
 		inline function fn(t:Float) : Float {
@@ -252,17 +253,17 @@ class ColorSpace {
 		var b = 200.0 * (fn(tmpVector.y*100.0 / Yn) - fn(tmpVector.z*100.0/Zn));
 
 		if (outVector == null)
-			outVector = new Vector();
+			outVector = new Vector4();
 		outVector.set(
-			hxd.Math.clamp(L/100.0), 
-			hxd.Math.clamp((a+128.0)/255.0), 
+			hxd.Math.clamp(L/100.0),
+			hxd.Math.clamp((a+128.0)/255.0),
 			hxd.Math.clamp((b+128.0)/255.0),
 			outVector.a
 		);
 		return outVector;
 	}
 
-	public static function iRGBtoHCL(color: Color, outVector: Vector = null) : Vector {
+	public static function iRGBtoHCL(color: Color, outVector: Vector4 = null) : Vector4 {
 		outVector = iRGBtoLAB(color, outVector);
 
 
@@ -280,8 +281,8 @@ class ColorSpace {
 		return outVector;
 	}
 
-	public static function HCLtoiRGB(value: Vector, outColor : Color) : Color {
-		
+	public static function HCLtoiRGB(value: Vector4, outColor : Color) : Color {
+
 		tmpVector.x = value.z;
 
 		var a = value.x * hxd.Math.PI * 2.0;

+ 5 - 5
hrt/impl/Gradient.hx

@@ -2,7 +2,7 @@ package hrt.impl;
 
 import haxe.Int32;
 import h3d.mat.Texture;
-import h3d.Vector;
+import h3d.Vector4;
 
 typedef ColorStop = {position : Float, color : Int};
 
@@ -38,8 +38,8 @@ class Gradient {
         return data;
     }
 
-    public static function evalData(data : GradientData, position : Float, ?outVector : Vector) : Vector {
-        if (outVector == null) outVector = new Vector();
+    public static function evalData(data : GradientData, position : Float, ?outVector : Vector4) : Vector4 {
+        if (outVector == null) outVector = new Vector4();
         var i : Int = 0;
         while(i < data.stops.length && data.stops[i].position < position) {
             i += 1;
@@ -116,7 +116,7 @@ class Gradient {
         return outVector;
     }
 
-    public function eval(position : Float, ?outVector : Vector) : Vector {
+    public function eval(position : Float, ?outVector : Vector4) : Vector4 {
         return evalData(data, position, outVector);
     }
 
@@ -176,7 +176,7 @@ class Gradient {
             var yScale = 1 - xScale;
             var pixels = hxd.Pixels.alloc(data.resolution * xScale + 1 * yScale,1 * xScale + data.resolution * yScale, ARGB);
 
-            var vec = new Vector();
+            var vec = new Vector4();
             for (x in 0...data.resolution) {
                 evalData(data, x / data.resolution, vec);
                 pixels.setPixelF(x * xScale,x*yScale, vec);

+ 1 - 1
hrt/prefab/Light.hx

@@ -419,7 +419,7 @@ class Light extends Object3D {
 
 		var icon = Std.downcast(ctx.custom, hrt.impl.EditorTools.EditorIcon);
 		if (icon != null) {
-			icon.color = h3d.Vector.fromColor(color);
+			icon.color = h3d.Vector4.fromColor(color);
 
 			var ide = hide.Ide.inst;
 			switch(kind) {

+ 10 - 0
hrt/prefab/Shader.hx

@@ -35,6 +35,16 @@ class Shader extends Prefab {
 				continue;
 			var val : Dynamic = Reflect.field(props, v.name);
 			switch(v.type) {
+			case TVec(4, VFloat):
+				if(val != null) {
+					if( Std.isOfType(val,Int) ) {
+						var v = new h3d.Vector4();
+						v.setColor(val);
+						val = v;
+					} else
+						val = h3d.Vector4.fromArray(val);
+				} else
+					val = new h3d.Vector4();
 			case TVec(_, VFloat):
 				if(val != null) {
 					if( Std.isOfType(val,Int) ) {

+ 17 - 6
hrt/prefab/fx/BaseFX.hx

@@ -20,6 +20,7 @@ typedef ShaderParams = Array<ShaderParam>;
 class ShaderAnimation extends Evaluator {
 	public var params : ShaderParams;
 	public var shader : hxsl.Shader;
+	var vector4 = new h3d.Vector4();
 	var vector = new h3d.Vector();
 
 	public function setTime(time: Float) {
@@ -33,8 +34,12 @@ class ShaderAnimation extends Evaluator {
 				continue;
 			case TInt: val = hxd.Math.round(getFloat(param.value, time));
 			case TBool: val = getFloat(param.value, time) >= 0.5;
+			case TVec(4, VFloat):
+				getVector(param.value, time, vector4);
+				val = vector4;
 			case TVec(_, VFloat):
-				getVector(param.value, time, vector);
+				getVector(param.value, time, vector4);
+				vector.set(vector4.x, vector4.y, vector4.z);
 				val = vector;
 			default:
 				continue;
@@ -46,7 +51,8 @@ class ShaderAnimation extends Evaluator {
 
 class ShaderDynAnimation extends ShaderAnimation {
 
-	var vectors : Array<h3d.Vector>;
+	static var tmpVec = new h3d.Vector();
+	var vectors : Array<h3d.Vector4>;
 	override function setTime(time: Float) {
 		var shader : hxsl.DynamicShader = cast shader;
 		for(param in params) {
@@ -61,16 +67,21 @@ class ShaderDynAnimation extends ShaderAnimation {
 				case TBool:
 					var val = getFloat(param.value, time) >= 0.5;
 					shader.setParamValue(v, val);
-				case TVec(_, VFloat):
+				case TVec(size, VFloat):
 					if(vectors == null)
 						vectors = [];
 					var vec = vectors[param.idx];
 					if(vec == null) {
-						vec = new h3d.Vector();
+						vec = new h3d.Vector4();
 						vectors[param.idx] = vec;
 					}
 					getVector(param.value, time, vec);
-					shader.setParamValue(v, vec);
+					if( size < 4 ) {
+						var tmpVec = tmpVec;
+						tmpVec.set(vec.x, vec.y, vec.z);
+						shader.setParamValue(v, tmpVec);
+					} else
+						shader.setParamValue(v, vec);
 				default:
 			}
 		}
@@ -196,7 +207,7 @@ class BaseFX extends hrt.prefab.Library {
 				var perInstance = batch.instancedParams;
 				if ( perInstance == null ) {
 					perInstance = new hxsl.Cache.BatchInstanceParams([]);
-					batch.instancedParams = perInstance; 
+					batch.instancedParams = perInstance;
 				}
 				perInstance.forcedPerInstance.push({
 					shader: shader.shader.data.name,

+ 26 - 25
hrt/prefab/fx/Emitter.hx

@@ -167,12 +167,12 @@ private class ParticleInstance {
 		}
 	}
 
-	static var tmpRot = new h3d.Vector();
-	static var tmpOffset = new h3d.Vector();
-	static var tmpScale = new h3d.Vector();
-	static var tmpLocalSpeed = new h3d.Vector();
-	static var tmpWorldSpeed = new h3d.Vector();
-	static var tmpSpeedAccumulation = new h3d.Vector();
+	static var tmpRot = new h3d.Vector4();
+	static var tmpOffset = new h3d.Vector4();
+	static var tmpScale = new h3d.Vector4();
+	static var tmpLocalSpeed = new h3d.Vector4();
+	static var tmpWorldSpeed = new h3d.Vector4();
+	static var tmpSpeedAccumulation = new h3d.Vector4();
 	static var tmpGroundNormal = new h3d.Vector(0,0,1);
 	static var tmpSpeed = new h3d.Vector();
 	static var tmpMat = new h3d.Matrix();
@@ -184,13 +184,13 @@ private class ParticleInstance {
 	static var tmpQuat = new h3d.Quat();
 
 
-	inline function add( v1 : h3d.Vector, v2 : h3d.Vector ) {
+	inline function add( v1 : h3d.Vector, v2 : h3d.Vector4 ) {
 		v1.x += v2.x;
 		v1.y += v2.y;
 		v1.z += v2.z;
 	}
 
-	inline function sub( v1 : h3d.Vector, v2 : h3d.Vector ) {
+	inline function sub( v1 : h3d.Vector, v2 : h3d.Vector4 ) {
 		v1.x -= v2.x;
 		v1.y -= v2.y;
 		v1.z -= v2.z;
@@ -200,7 +200,6 @@ private class ParticleInstance {
 		v1.x -= v1.y * v2.z - v1.z * v2.y;
 		v1.y -= v1.z * v2.x - v1.x * v2.z;
 		v1.z -= v1.x * v2.y - v1.y * v2.x;
-		v1.w = 1.0;
 	}
 
 	inline function getPosition() { return new h3d.Vector(x,y,z); }
@@ -250,13 +249,13 @@ private class ParticleInstance {
 		//SCALE
 		var def = emitter.instDef;
 		var scaleVec = evaluator.getVector(idx, def.stretch, t, tmpScale);
-		scaleVec.scale(evaluator.getFloat(idx, def.scale, t));
+		scaleVec.scale3(evaluator.getFloat(idx, def.scale, t));
 		localMat.initScale(scaleVec.x, scaleVec.y, scaleVec.z);
 
 		// ROTATION
 		if(def.rotation != VZero) {
 			var rot = evaluator.getVector(idx, def.rotation, t, tmpRot);
-			rot.scale(Math.PI / 180.0);
+			rot.scale3(Math.PI / 180.0);
 			localMat.rotate(rot.x, rot.y, rot.z);
 		}
 
@@ -298,7 +297,7 @@ private class ParticleInstance {
 		// ACCELERATION
 		if(def.acceleration != VZero) {
 			evaluator.getVector(idx, def.acceleration, t, tmpSpeedAccumulation);
-			tmpSpeedAccumulation.scale(dt);
+			tmpSpeedAccumulation.scale3(dt);
 			tmpSpeedAccumulation.transform3x3(emitOrientation);
 			add(speedAccumulation, tmpSpeedAccumulation);
 		}
@@ -306,13 +305,15 @@ private class ParticleInstance {
 		// WORLD ACCELERATION
 		if(def.worldAcceleration != VZero) {
 			evaluator.getVector(idx, def.worldAcceleration, t, tmpSpeedAccumulation);
-			tmpSpeedAccumulation.scale(dt);
+			tmpSpeedAccumulation.scale3(dt);
 			if(emitter.simulationSpace == Local)
 				tmpSpeedAccumulation.transform3x3(emitter.invTransform);
 			add(speedAccumulation, tmpSpeedAccumulation);
 		}
 
-		add(tmpSpeed, speedAccumulation);
+		tmpSpeed.x += speedAccumulation.x;
+		tmpSpeed.y += speedAccumulation.y;
+		tmpSpeed.z += speedAccumulation.z;
 
 		// SPEED
 		if(def.localSpeed != VZero) {
@@ -383,10 +384,9 @@ private class ParticleInstance {
 			var parentAbsPos = emitter.parentTransform;
 			var prevPos = getPosition();
 			var pos = prevPos.add(parentAbsPos.getPosition());
-			pos.w = 1;
-			pos.transform3x4(emitter.getInvPos());
+			pos.transform(emitter.getInvPos());
 			pos.transform3x3(tmpMat);
-			pos.transform3x4(emitter.getAbsPos());
+			pos.transform(emitter.getAbsPos());
 			x = pos.x - parentAbsPos.tx;
 			y = pos.y - parentAbsPos.ty;
 			z = pos.z - parentAbsPos.tz;
@@ -394,7 +394,9 @@ private class ParticleInstance {
 			// Take transform into account into local speed
 			var delta = getPosition().sub(prevPos);
 			delta.scale(1 / dt);
-			add(tmpSpeed, delta);
+			tmpSpeed.x += delta.x;
+			tmpSpeed.y += delta.y;
+			tmpSpeed.z += delta.z;
 		}
 
 		this.speedAccumulation.load(speedAccumulation);
@@ -1006,21 +1008,21 @@ class EmitterObject extends h3d.scene.Object {
 
 					var min = evaluator.getFloat(emitRateMin, curTime);
 					var max = evaluator.getFloat(emitRateMax, curTime);
-					
+
 					var unInitiliazed = emitRateCurrent == Math.NaN || emitRateCurrent == null;
 					var needNewValue = curTime - emitRateChangeDelayStart >= emitRateChangeDelay || curTime - emitRateChangeDelayStart < 0;
 					if (unInitiliazed || needNewValue) {
 						emitRateChangeDelayStart = curTime;
 						emitRatePrevious = emitRateTarget;
 						emitRateTarget = random.rand() * (max-min) + min;
-						
+
 						if (emitRatePrevious == Math.NaN || emitRatePrevious == null)
 							emitRatePrevious = random.rand() * (max-min) + min;
 					}
 
 					var t = (curTime - emitRateChangeDelayStart) / emitRateChangeDelay;
 					emitRateCurrent = (emitRatePrevious - emitRateTarget) * t + emitRatePrevious;
-					
+
 					emitTarget += emitRateCurrent * dt;
 
 					var delta = hxd.Math.ceil(hxd.Math.min(maxCount - numInstances, emitTarget - emitCount));
@@ -1106,7 +1108,6 @@ class EmitterObject extends h3d.scene.Object {
 			}
 			var lookAtPos = tmpVec;
 			lookAtPos.load(getScene().camera.pos);
-            lookAtPos.w = 1.0;
 
 			var invParent = parent.getInvPos();
 			lookAtPos.transform(invParent);
@@ -2108,7 +2109,7 @@ class SVector4 {
 		return new h3d.Quat(x, y, z, w);
 	}
 
-	inline function load(v: h3d.Vector) {
+	inline function load(v: h3d.Vector4) {
 		this.x = v.x;
 		this.y = v.y;
 		this.z = v.z;
@@ -2123,7 +2124,7 @@ class SVector4 {
 	}
 
 	inline function toVector() {
-		return new h3d.Vector(x, y, z, w);
+		return new h3d.Vector4(x, y, z, w);
 	}
 }
 
@@ -2163,7 +2164,7 @@ class SMatrix4 {
 
 	public inline function getPosition() {
 		var v = new h3d.Vector();
-		v.set(_41,_42,_43,_44);
+		v.set(_41,_42,_43);
 		return v;
 	}
 

+ 1 - 1
hrt/prefab/fx/Evaluator.hx

@@ -68,7 +68,7 @@ class Evaluator {
 		return 0.0;
 	}
 
-	public function getVector(pidx: Int=0, v: Value, time: Float, vec: h3d.Vector) {
+	public function getVector(pidx: Int=0, v: Value, time: Float, vec: h3d.Vector4) {
 		switch(v) {
 			case VMult(a, b):
 				throw "need optimization";

+ 14 - 5
hrt/prefab/fx/FX.hx

@@ -157,7 +157,7 @@ class FXAnimation extends h3d.scene.Object {
 
 	static var tempMat = new h3d.Matrix();
 	static var tempTransform = new h3d.Matrix();
-	static var tempVec = new h3d.Vector();
+	static var tempVec = new h3d.Vector4();
 	public function setTime( time : Float, fullSync=true ) {
 		var dt = time - this.prevTime;
 		this.localTime = time;
@@ -175,7 +175,7 @@ class FXAnimation extends h3d.scene.Object {
 
 						if(anim.rotation != null) {
 							var rotation = evaluator.getVector(anim.rotation, time, tempVec);
-							rotation.scale(Math.PI / 180.0);
+							rotation.scale3(Math.PI / 180.0);
 							m.rotate(rotation.x, rotation.y, rotation.z);
 						}
 
@@ -214,7 +214,10 @@ class FXAnimation extends h3d.scene.Object {
 							case PointLight( color, power, size, range ) :
 								var l = Std.downcast(anim.obj, h3d.scene.pbr.PointLight);
 								if( l != null ) {
-									if( color != null ) l.color = evaluator.getVector(color, time, tempVec);
+									if( color != null ) {
+										var v = evaluator.getVector(color, time, tempVec);
+										l.color.set(v.x, v.y, v.z);
+									}
 									if( power != null ) l.power = evaluator.getFloat(power, time);
 									if( size != null ) l.size = evaluator.getFloat(size, time);
 									if( range != null ) l.range = evaluator.getFloat(range, time);
@@ -222,13 +225,19 @@ class FXAnimation extends h3d.scene.Object {
 							case DirLight(color, power):
 								var l = Std.downcast(anim.obj, h3d.scene.pbr.DirLight);
 								if( l != null ) {
-									if( color != null ) l.color = evaluator.getVector(color, time, tempVec);
+									if( color != null ) {
+										var v = evaluator.getVector(color, time, tempVec);
+										l.color.set(v.x, v.y, v.z);
+									}
 									if( power != null ) l.power = evaluator.getFloat(power, time);
 								}
 							case SpotLight(color, power, range, angle, fallOff):
 								var l = Std.downcast(anim.obj, h3d.scene.pbr.SpotLight);
 								if( l != null ) {
-									if( color != null ) l.color = evaluator.getVector(color, time, tempVec);
+									if( color != null ) {
+										var v = evaluator.getVector(color, time, tempVec);
+										l.color.set(v.x, v.y, v.z);
+									}
 									if( power != null ) l.power = evaluator.getFloat(power, time);
 									if( range != null ) l.range = evaluator.getFloat(range, time);
 									if( angle != null ) l.angle = evaluator.getFloat(angle, time);

+ 1 - 1
hrt/prefab/fx/FX2D.hx

@@ -75,7 +75,7 @@ class FX2DAnimation extends h2d.Object {
 	}
 
 
-	static var tmpPt = new h3d.Vector();
+	static var tmpPt = new h3d.Vector4();
 	public function setTime( time : Float ) {
 
 		this.localTime = time;

+ 0 - 1
hrt/prefab/fx/LookAt.hx

@@ -28,7 +28,6 @@ class LookAtObject extends h3d.scene.Object {
 		else {
 			if(getScene() == null || getScene().camera == null) return;
 			lookAtPos.load(getScene().camera.pos);
-			lookAtPos.w = 1;
 		}
 
 		super.calcAbsPos();

+ 1 - 1
hrt/prefab/l2d/Bitmap.hx

@@ -25,7 +25,7 @@ class Bitmap extends Object2D {
 				bmp.tile = h2d.Tile.fromColor(0xFF00FF,32,32,0.5);
 			}
 		}
-		bmp.color = h3d.Vector.fromColor(color);
+		bmp.color = h3d.Vector4.fromColor(color);
 		bmp.color.w = 1;
 		var cRatio = getCenterRatio(dx, dy);
 		bmp.tile.setCenterRatio(cRatio[0], cRatio[1]);

+ 3 - 3
hrt/prefab/l3d/Billboard.hx

@@ -55,13 +55,13 @@ class BillboardObj extends h3d.scene.Mesh {
         return material.texture;
     }
 
-    public var color(get, set) : h3d.Vector;
+    public var color(get, set) : h3d.Vector4;
 
-    function set_color(col : h3d.Vector) : h3d.Vector {
+    function set_color(col : h3d.Vector4) : h3d.Vector4 {
         return material.color = col;
     }
 
-    function get_color() : h3d.Vector {
+    function get_color() : h3d.Vector4 {
         return material.color;
     }
 

+ 3 - 3
hrt/prefab/l3d/GameController.hx

@@ -63,8 +63,8 @@ class GameController extends Object3D {
 		var camSave = null;
 		var dummy : h3d.scene.Object = null;
 		var cam = ctx.scene.s3d.camera;
-		var camRot : h3d.Vector = null;
-		var startCamRot : h3d.Vector = null;
+		var camRot : h3d.Vector4 = null;
+		var startCamRot : h3d.Vector4 = null;
 		var zSpeed = 0.;
 		var startJumpTime = 1e9;
 
@@ -133,7 +133,7 @@ class GameController extends Object3D {
 					var delta = cam.pos.sub(cam.target);
 					var q = new h3d.Quat();
 					q.initDirection(delta);
-					startCamRot = q.toEuler();
+					startCamRot = q.toEuler().toVector4();
 					startCamRot.w = delta.length();
 					camRot = startCamRot.clone();
 

+ 5 - 5
hrt/prefab/l3d/HeightMap.hx

@@ -351,7 +351,7 @@ class HeightMapTile {
 		if( shader.albedoIsArray ) {
 			var arr = hmap.getTextureArray(Albedo);
 			shader.albedoArray = arr.texture;
-			shader.albedoIndexes = [for( i in arr.indexes ) new h3d.Vector(i)];
+			shader.albedoIndexes = [for( i in arr.indexes ) new h3d.Vector4(i)];
 			shader.AlbedoCount = arr.indexes.length;
 			if( hmap.albedoNormals > 0 ) {
 				shader.hasAlbedoNormals = true;
@@ -622,7 +622,7 @@ class HeightMap extends Object3D {
 
 	// todo : instead of storing the context, we should find a way to have a texture loader
 	var storedCtx : hrt.prefab.Context;
-	var albedoProps : Array<h3d.Vector>;
+	var albedoProps : Array<h3d.Vector4>;
 	var texArrayCache : Map<HeightMaPTexturePathKind, { texture : h3d.mat.TextureArray, indexes : Array<Int> }>;
 
 	override function save():{} {
@@ -643,7 +643,7 @@ class HeightMap extends Object3D {
 		textures = [for( o in (obj.textures:Array<Dynamic>) ) { path : o.path, kind : o.kind, enable : o.enable == null ? true : o.enable, props : o.props }];
 	}
 
-	function getAlbedoProps() {
+	function getAlbedoProps() : Array<h3d.Vector4> {
 		if( albedoProps != null )
 			return albedoProps;
 		var hasProps = false;
@@ -654,8 +654,8 @@ class HeightMap extends Object3D {
 			albedoProps = [];
 			return albedoProps;
 		}
-		albedoProps = [for( t in textures ) if( t.kind == Albedo ) t.props == null ? new h3d.Vector(1,1,1,albedoTiling) : {
-			var v = h3d.Vector.fromColor(t.props.color);
+		albedoProps = [for( t in textures ) if( t.kind == Albedo ) t.props == null ? new h3d.Vector4(1,1,1,albedoTiling) : {
+			var v = h3d.Vector4.fromColor(t.props.color);
 			v.r = Math.pow(v.r,albedoColorGamma);
 			v.g = Math.pow(v.g,albedoColorGamma);
 			v.b = Math.pow(v.b,albedoColorGamma);

+ 3 - 3
hrt/prefab/l3d/Layers2D.hx

@@ -307,7 +307,7 @@ class Layers2D extends hrt.prefab.Object3D {
 			sh.collideMap = collideMap;
 
 			sh.collideEnable = collideEnable && collideMap != null;
-			sh.collideMask = h3d.Vector.fromColor(collideMask);
+			sh.collideMask = h3d.Vector4.fromColor(collideMask);
 
 			sh.layerEnable = currentTexture != null;
 			sh.layerMap = currentTexture;
@@ -319,7 +319,7 @@ class Layers2D extends hrt.prefab.Object3D {
 			}
 
 			sh.highlightNoPixels = highlightNotPaintedPixels;
-			sh.highlightColor = h3d.Vector.fromColor(highlightColor);
+			sh.highlightColor = h3d.Vector4.fromColor(highlightColor);
 		}
 	}
 
@@ -570,7 +570,7 @@ class Layers2D extends hrt.prefab.Object3D {
 	}
 
 	public function drawCircle(ctx : hrt.prefab.Context, originX : Float, originY : Float, originZ : Float, radius: Float, thickness: Float, color) {
-		var newColor = h3d.Vector.fromColor(color);
+		var newColor = h3d.Vector4.fromColor(color);
 		if (gBrushes == null || gBrushes.length == 0 || gBrushes[0].scaleX != radius || gBrushes[0].material.color != newColor) {
 			clearBrushes();
 			gBrushes = [];

+ 1 - 1
hrt/prefab/l3d/MeshGenerator.hx

@@ -76,7 +76,7 @@ class MeshPart {
 			socket.name = o.socket.name;
 		}
 		if( o.offset != null )
-			offset.set(o.offset.x, o.offset.y, o.offset.z, 0.0);
+			offset.set(o.offset.x, o.offset.y, o.offset.z);
 		meshPath = o.meshPath == "none" ? null : o.meshPath;
 		var ps : Array<Dynamic> = o.childParts;
 		if( ps != null ) {

+ 1 - 1
hrt/prefab/l3d/MeshSpray.hx

@@ -872,7 +872,7 @@ class MeshSpray extends Spray {
 
 	override function removeItemsAround(ctx : Context, point : h3d.col.Point) {
 		var vecRelat = point.toVector();
-		vecRelat.transform3x4(invParent);
+		vecRelat.transform(invParent);
 		var point2d = new h2d.col.Point(vecRelat.x, vecRelat.y);
 
 		var childToRemove = [];

+ 1 - 1
hrt/prefab/l3d/ModelLibrary.hx

@@ -624,7 +624,7 @@ class ModelLibrary extends Prefab {
 		for( inf in dataToStore ) {
 			var g = inf.g;
 			g.vertexPosition = dataOut.length;
-			var buf = inf.lib.getBuffers(inf.origin, geomAll.vertexFormat, [for( v in geomAll.vertexFormat.getInputs() ) new h3d.Vector(0,0,0,0)]);
+			var buf = inf.lib.getBuffers(inf.origin, geomAll.vertexFormat, [for( v in geomAll.vertexFormat.getInputs() ) new h3d.Vector4(0,0,0,0)]);
 			for( i in 0...geomAll.vertexFormat.stride * inf.origin.vertexCount )
 				dataOut.addFloat(buf.vertexes[i]);
 		}

+ 4 - 4
hrt/prefab/l3d/Spray.hx

@@ -377,7 +377,7 @@ class Spray extends Object3D {
 		}
 		var nbItemsInZone = 0;
 		var vecRelat = point.toVector();
-		vecRelat.transform3x4(invParent);
+		vecRelat.transform(invParent);
 		var point2d = new h2d.col.Point(vecRelat.x, vecRelat.y);
 
 		final CONFIG = currentConfig;
@@ -412,7 +412,7 @@ class Spray extends Object3D {
 
 					position = new h3d.col.Point(point.x + randomRadius*Math.cos(angle), point.y + randomRadius*Math.sin(angle), 0);
 					var vecRelat = position.toVector();
-					vecRelat.transform3x4(invParent);
+					vecRelat.transform(invParent);
 
 					var isNextTo = false;
 					for (cPivot in currentPivots) {
@@ -514,7 +514,7 @@ class Spray extends Object3D {
 
 	function removeItemsAround(ctx : Context, point : h3d.col.Point) {
 		var vecRelat = point.toVector();
-		vecRelat.transform3x4(invParent);
+		vecRelat.transform(invParent);
 		var point2d = new h2d.col.Point(vecRelat.x, vecRelat.y);
 
 		var childToRemove = [];
@@ -543,7 +543,7 @@ class Spray extends Object3D {
 	}
 
 	public function drawCircle(ctx : Context, originX : Float, originY : Float, originZ : Float, radius: Float, thickness: Float, color) {
-		var newColor = h3d.Vector.fromColor(color);
+		var newColor = h3d.Vector4.fromColor(color);
 		if (gBrushes == null || gBrushes.length == 0 || gBrushes[0].scaleX != radius || gBrushes[0].material.color != newColor) {
 			clearBrushes();
 			gBrushes = [];

+ 1 - 1
hrt/prefab/l3d/Text3D.hx

@@ -213,7 +213,7 @@ class Text3D extends Object3D {
 			shader = new SignedDistanceField3D();
 			shader.alphaCutoff = cutoff;
 			shader.smoothing = smoothing;
-			shader.color = h3d.Vector.fromColor(color);
+			shader.color = h3d.Vector4.fromColor(color);
 			mesh.material.mainPass.addShader(shader);
 		}
 	}

+ 1 - 1
hrt/prefab/terrain/PackWeight.hx

@@ -30,6 +30,6 @@ class PackWeight extends h3d.shader.ScreenShader {
 
 	public function new(){
 		super();
-		mask = [new h3d.Vector(1,0,0,0), new h3d.Vector(0,1,0,0), new h3d.Vector(0,0,1,0), new h3d.Vector(0,0,0,1)];
+		mask = [new h3d.Vector4(1,0,0,0), new h3d.Vector4(0,1,0,0), new h3d.Vector4(0,0,1,0), new h3d.Vector4(0,0,0,1)];
 	}
 }

+ 2 - 2
hrt/prefab/terrain/Surface.hx

@@ -36,8 +36,8 @@ class SurfaceArray {
 	public var normal : h3d.mat.TextureArray;
 	public var pbr : h3d.mat.TextureArray;
 	public var surfaceCount : Int;
-	public var params : Array<h3d.Vector> = [];
-	public var secondParams : Array<h3d.Vector> = [];
+	public var params : Array<h3d.Vector4> = [];
+	public var secondParams : Array<h3d.Vector4> = [];
 
 	public function new( count, res ) {
 		surfaceCount = count;

+ 2 - 2
hrt/prefab/terrain/TerrainMesh.hx

@@ -125,8 +125,8 @@ class TerrainMesh extends h3d.scene.Object {
 
 	public function updateSurfaceParams() {
 		for( i in 0 ... surfaces.length ) {
-			surfaceArray.params[i] = new h3d.Vector(surfaces[i].tilling, surfaces[i].offset.x, surfaces[i].offset.y, hxd.Math.degToRad(surfaces[i].angle));
-			surfaceArray.secondParams[i] = new h3d.Vector(surfaces[i].minHeight, surfaces[i].maxHeight, 0, 0);
+			surfaceArray.params[i] = new h3d.Vector4(surfaces[i].tilling, surfaces[i].offset.x, surfaces[i].offset.y, hxd.Math.degToRad(surfaces[i].angle));
+			surfaceArray.secondParams[i] = new h3d.Vector4(surfaces[i].minHeight, surfaces[i].maxHeight, 0, 0);
 		}
 	}
 

+ 5 - 5
hrt/prefab/terrain/TerrainResize.hx

@@ -30,7 +30,7 @@ class TerrainResize {
 
 	static inline function getTileBounds( xi, yi, s : h2d.col.Point ) : h2d.col.Bounds {
 		var b = new h2d.col.Bounds();
-		b.xMin = xi * s.x; 
+		b.xMin = xi * s.x;
 		b.yMin = yi * s.y;
 		b.xMax = (xi + 1) * s.x;
 		b.yMax = (yi + 1) * s.y;
@@ -50,7 +50,7 @@ class TerrainResize {
 		var curSize = tileSize;
 
 		// Recreate tiles to fit with the new size
-		var terrainMinMax = new h3d.Vector();
+		var terrainMinMax = new h3d.Vector4();
 		terrainMinMax.set(hxd.Math.POSITIVE_INFINITY, hxd.Math.POSITIVE_INFINITY, hxd.Math.NEGATIVE_INFINITY);
 		for( t in prefab.terrain.tiles ) {
 			terrainMinMax.x = hxd.Math.min(terrainMinMax.x, t.tileX * prevSize.x);
@@ -94,7 +94,7 @@ class TerrainResize {
 			}
 			y = terrainMinMax.y;
 			x += curSize.x;
-		}	
+		}
 
 		// Copy Textures
 		for( curTile in prefab.terrain.tiles ) {
@@ -102,9 +102,9 @@ class TerrainResize {
 			for( prevTile in prevTiles ) {
 
 				var prevTileBounds = getTileBounds(prevTile.tileX, prevTile.tileY, prevSize);
-				if( !prevTileBounds.intersects(curTileBounds) ) 
+				if( !prevTileBounds.intersects(curTileBounds) )
 					continue;
-				
+
 				terrainCopy.shader.from.set((prevTileBounds.x - curTileBounds.x) / curTileBounds.width, (prevTileBounds.y - curTileBounds.y) / curTileBounds.height);
 				terrainCopy.shader.to.set(terrainCopy.shader.from.x + prevTileBounds.width / curTileBounds.width, terrainCopy.shader.from.y + prevTileBounds.height / curTileBounds.height );
 

+ 2 - 2
hrt/prefab/vlm/ProbeBaker.hx

@@ -195,11 +195,11 @@ class ProbeBaker {
 		for(coef in 0 ... maxCoef){
 			var pixels = textureArray[coef].capturePixels();
 			for( index in 0 ... pixels.width){
-				var coefs : h3d.Vector = pixels.getPixelF(index, 0);
+				var coefs = pixels.getPixelF(index, 0);
 				var coords = volumetricLightMap.getProbeCoords(index);
 				var u = coords.x + volumetricLightMap.probeCount.x * coef;
 				var v = coords.y + coords.z * volumetricLightMap.probeCount.y;
-				pixelsOut.setPixelF(u, v, new h3d.Vector(coefs.r, coefs.g, coefs.b, 0));
+				pixelsOut.setPixelF(u, v, new h3d.Vector4(coefs.r, coefs.g, coefs.b, 0));
 
 				// Last coefs is inside the alpha channel
 				if( order == 3 ){

+ 1 - 1
hrt/shgraph/nodes/Color.hx

@@ -135,7 +135,7 @@ class Color extends ShaderConst {
 		picker.value = start.toColor();
 
 		picker.onChange = function(move) {
-			var vec = h3d.Vector.fromColor(picker.value);
+			var vec = h3d.Vector4.fromColor(picker.value);
 			r = vec.x;
 			g = vec.y;
 			b = vec.z;