#region attribute
	global.SURFACE_INTERPOLATION = [
		"Pixel", 
		"Bilinear", 
		"Bicubic", 
		"radSin"
	];
	
	global.SURFACE_OVERSAMPLE = [
		"Empty", 
		"Clamp", 
		"Repeat",
		"Black"
	];
	
	function __initSurfaceFormat() {
		var surface_format = [
			surface_rgba4unorm,
			surface_rgba8unorm,
			surface_rgba16float,
			surface_rgba32float,
			surface_r8unorm,
			surface_r16float,
			surface_r32float
		];
	
		var surface_format_name = [
			"4 bit RGBA", 
			"8 bit RGBA", 
			"16 bit RGBA", 
			"32 bit RGBA", 
			"8 bit Greyscale", 
			"16 bit Greyscale", 
			"32 bit Greyscale"
		];
	
		global.SURFACE_FORMAT		= [];
		global.SURFACE_FORMAT_NAME  = []; 
	
		for( var i = 0, n = array_length(surface_format); i < n; i++ ) {
			var sup = surface_format_is_supported(surface_format[i]);
			array_push(global.SURFACE_FORMAT, surface_format[i]);
			array_push(global.SURFACE_FORMAT_NAME, (sup? "" : "-") + surface_format_name[i]);
			
			if(!sup) log_message("WARNING", "Surface format [" + surface_format_name[i] + "] not supported in this device.");
		}
		
		global.SURFACE_FORMAT_NAME_PROCESS = [ "Input" ];
		global.SURFACE_FORMAT_NAME_PROCESS = array_append(global.SURFACE_FORMAT_NAME_PROCESS, global.SURFACE_FORMAT_NAME);
	}
	
	function attribute_surface_depth(label = true) {
		var depth_array = inputs[0].type == VALUE_TYPE.surface? global.SURFACE_FORMAT_NAME_PROCESS : global.SURFACE_FORMAT_NAME;
		attributes.color_depth = array_find(depth_array, "8 bit RGBA");
		
		if(label) array_push(attributeEditors, "Surface");
		array_push(attributeEditors, ["Color depth", function() { return attributes.color_depth; }, 
			new scrollBox(depth_array, function(val) { 
				attributes.color_depth = val;
				triggerRender();
			}, false)]);
	}
	
	function attribute_interpolation(label = false) {
		attributes.interpolate = 0;
		attributes.oversample  = 0;
		
		if(label) array_push(attributeEditors, "Surface");
		array_push(attributeEditors, ["Texture interpolation", function() { return attributes.interpolate; }, 
			new scrollBox(global.SURFACE_INTERPOLATION, function(val) { 
				attributes.interpolate = val;
				triggerRender();
			}, false)]);
	}
	
	function attribute_oversample(label = false) {
		attributes.interpolate = 0;
		attributes.oversample  = 0;
		
		if(label) array_push(attributeEditors, "Surface");
		array_push(attributeEditors, ["Oversample", function() { return attributes.oversample; }, 
			new scrollBox(global.SURFACE_OVERSAMPLE, function(val) { 
				attributes.oversample = val;
				triggerRender();
			}, false)]);
	}
	
	function attribute_auto_execute(label = false) {
		attributes.auto_exe = false;
		if(label) array_push(attributeEditors, "Node");
		array_push(attributeEditors, ["Auto execute", function() { return attributes.auto_exe; }, 
		new checkBox(function() { 
			attributes.auto_exe = !attributes.auto_exe;
		})]);
	}
#endregion