Pixel-Composer/scripts/d3d_material/d3d_material.gml
2024-10-05 07:49:33 +07:00

87 lines
No EOL
1.8 KiB
Text

function __d3dMaterial(surface = noone) constructor {
self.surface = surface;
diffuse = 1;
specular = 0;
metalic = false;
shine = 1;
texScale = [ 1, 1 ];
texShift = [ 0, 0 ];
normal = noone;
normalStr = 1;
reflective = 0;
texFilter = false;
static getTexture = function() {
if(!is_surface(surface)) return -1;
return surface_get_texture(surface);
}
static submitGeometry = function() {
shader_set_i("use_normal", is_surface(normal));
shader_set_surface("normal_map", normal);
shader_set_f("normal_strength", normalStr);
}
static submitShader = function() {
shader_set_f("mat_diffuse", diffuse );
shader_set_f("mat_specular", specular );
shader_set_f("mat_shine", shine );
shader_set_i("mat_metalic", metalic );
shader_set_f("mat_texScale", texScale );
shader_set_f("mat_texShift", texShift );
shader_set_f("mat_reflective", reflective);
gpu_set_tex_filter(texFilter);
}
static clone = function(replaceSurface = surface) {
var _mat = new __d3dMaterial(replaceSurface);
_mat.diffuse = diffuse;
_mat.specular = specular;
_mat.metalic = metalic;
_mat.shine = shine;
_mat.normal = normal;
_mat.normalStr = normalStr;
_mat.reflective = reflective;
_mat.texFilter = texFilter;
return _mat;
}
static serialize = function() {
var s = {
diffuse,
specular,
metalic,
shine,
normalStr,
reflective,
texFilter,
};
return json_stringify(s, false);
}
static deserialize = function(str) {
var s = json_try_parse(str, noone);
if(s == noone) return;
diffuse = s.diffuse;
specular = s.specular;
metalic = s.metalic;
shine = s.shine;
normalStr = s.normalStr;
reflective = s.reflective;
texFilter = s.texFilter;
}
}