|
@@ -811,6 +811,7 @@ void tnspost_World(tnsWorld *w){
|
|
|
tnsRefreshMaterialLibraries();
|
|
|
}
|
|
|
void tnspost_Material(tnsMaterial *m){
|
|
|
+ tns_RefreshMaterial2D(m);
|
|
|
//if(m->AsLibrary){ tnsRefreshMaterialLibraries(); return; }
|
|
|
//tnsEnsureMaterialShader(m,1);
|
|
|
}
|
|
@@ -896,8 +897,27 @@ void tns_InvalidateMeshWithMaterial(tnsMaterial* m){
|
|
|
}
|
|
|
}
|
|
|
void tnsset_MaterialColor(tnsMaterial* m, real* c){
|
|
|
- tnsVectorCopy4d(c,m->Color); tns_InvalidateMeshWithMaterial(m); laNotifyUsers("tns.world");
|
|
|
+ tnsVectorCopy4d(c,m->Color); tns_InvalidateMeshWithMaterial(m); tns_RefreshMaterial2D(m); laNotifyUsers("tns.world");
|
|
|
+}
|
|
|
+void tns_RefreshMaterial2D(tnsMaterial* m){
|
|
|
+ NVGcontext* vg=MAIN.CurrentWindow->nvg;
|
|
|
+ if(m->GradientMode==TNS_GRADIENT_MODE_LINEAR){
|
|
|
+ m->Paint=nvgLinearGradient(vg,m->GradientCenter[0],m->GradientCenter[1],m->GradientSize[0],m->GradientSize[1],
|
|
|
+ nvgRGBAf(LA_COLOR4(m->Color)),nvgRGBAf(LA_COLOR4(m->Color2)));
|
|
|
+ }elif(m->GradientMode==TNS_GRADIENT_MODE_BOX){
|
|
|
+ m->Paint=nvgBoxGradient(vg,m->GradientCenter[0],m->GradientCenter[1],m->GradientSize[0],m->GradientSize[1],
|
|
|
+ m->GradientBoxR,m->GradientBoxF,nvgRGBAf(LA_COLOR4(m->Color)),nvgRGBAf(LA_COLOR4(m->Color2)));
|
|
|
+ }elif(m->GradientMode==TNS_GRADIENT_MODE_RADIAL){
|
|
|
+ m->Paint=nvgRadialGradient(vg,m->GradientCenter[0],m->GradientCenter[1],m->GradientSize[0],m->GradientSize[1],
|
|
|
+ nvgRGBAf(LA_COLOR4(m->Color)),nvgRGBAf(LA_COLOR4(m->Color2)));
|
|
|
+ }
|
|
|
}
|
|
|
+void tnsset_MaterialColor2(tnsMaterial* m, real* c){ tnsVectorCopy4d(c,m->Color2); tns_RefreshMaterial2D(m); laNotifyUsers("tns.world"); }
|
|
|
+void tnsset_MaterialGradientMode(tnsMaterial* m, int Mode){ m->GradientMode=Mode; tns_RefreshMaterial2D(m); laNotifyUsers("tns.world"); }
|
|
|
+void tnsset_MaterialGradientCenter(tnsMaterial* m, real* c){ tnsVectorCopy2d(c,m->GradientCenter); tns_RefreshMaterial2D(m); laNotifyUsers("tns.world"); }
|
|
|
+void tnsset_MaterialGradientSize(tnsMaterial* m, real* c){ tnsVectorCopy2d(c,m->GradientSize); tns_RefreshMaterial2D(m); laNotifyUsers("tns.world"); }
|
|
|
+void tnsset_MaterialGradientF(tnsMaterial* m, real c){ m->GradientBoxF=c; tns_RefreshMaterial2D(m); laNotifyUsers("tns.world"); }
|
|
|
+void tnsset_MaterialGradientR(tnsMaterial* m, real c){ m->GradientBoxR=c; tns_RefreshMaterial2D(m); laNotifyUsers("tns.world"); }
|
|
|
void tnsget_MaterialSlotname(tnsMaterialSlot* ms, char *result, char** here){
|
|
|
if(!ms){ strcpy(result,"?"); return; }
|
|
|
if(ms->Material&&ms->Material->Name&&ms->Material->Name->Ptr){
|
|
@@ -1131,7 +1151,8 @@ void la_RegisterTNSProps(){
|
|
|
p = laAddPropertyContainer("tns_material", "Material" "Object material", 0,0,0,sizeof(tnsMaterial),tnspost_Material,0,2);{
|
|
|
TNS_PC_MATERIAL=p;
|
|
|
laAddStringProperty(p, "name", "Material Name", "The name ff the material", 0,0,0,0,1, offsetof(tnsMaterial, Name), 0,0,0,0,LA_AS_IDENTIFIER);
|
|
|
- laAddFloatProperty(p, "color", "Color", "Base color of the material", LA_WIDGET_FLOAT_COLOR, "R,G,B,A", 0,1,0,0.025, 1, 0,offsetof(tnsMaterial, Color), 0,0,4, 0,0,0,0,tnsset_MaterialColor, 0,0,0);
|
|
|
+ laAddFloatProperty(p, "color", "Color", "Base color of the material", LA_WIDGET_FLOAT_COLOR, "R,G,B,A", 0,1,0,0.025, 1, 0,offsetof(tnsMaterial, Color), 0,0,4, 0,0,0,0,tnsset_MaterialColor,0,0,0);
|
|
|
+ laAddFloatProperty(p, "color2", "Color 2", "Gradient end color of the material", LA_WIDGET_FLOAT_COLOR, "R,G,B,A", 0,1,0,0.025, 1, 0,offsetof(tnsMaterial, Color2), 0,0,4, 0,0,0,0,tnsset_MaterialColor2,0,0,0);
|
|
|
ep = laAddEnumProperty(p, "colorful", "Colorful", "Use colorful display", 0,0,0,0,0,offsetof(tnsMaterial, Colorful), 0,0,0,0,0,0,0,0,0,0);{
|
|
|
laAddEnumItemAs(ep, "NONE", "None", "Display materials normally",0,0);
|
|
|
laAddEnumItemAs(ep, "COLORFUL", "Colorful", "Display material with colorful halftone",1,0);
|
|
@@ -1140,6 +1161,15 @@ void la_RegisterTNSProps(){
|
|
|
laAddEnumItemAs(ep, "NONE", "None", "Use as normal material",0,0);
|
|
|
laAddEnumItemAs(ep, "LIBRARY", "LIBRARY", "As commom library",1,0);
|
|
|
}
|
|
|
+ ep=laAddEnumProperty(p,"gradient_mode","Gradient Mode","2D Gradient mode of shapes",0,0,0,0,0,offsetof(tnsMaterial,GradientMode),0,tnsset_MaterialGradientMode,0,0,0,0,0,0,0,0);
|
|
|
+ laAddEnumItemAs(ep,"NONE","None","Don't do any gradient",0,0);
|
|
|
+ laAddEnumItemAs(ep,"LINEAR","Linear","Do linear gradient",TNS_GRADIENT_MODE_LINEAR,0);
|
|
|
+ laAddEnumItemAs(ep,"BOX","Box","Do box gradient",TNS_GRADIENT_MODE_BOX,0);
|
|
|
+ laAddEnumItemAs(ep,"RADIAL","Radial","Do radial gradient",TNS_GRADIENT_MODE_RADIAL,0);
|
|
|
+ laAddFloatProperty(p,"gradient_center","Gradient Center","Starting point of the gradient",0,0,0,0,0,0,0,0,offsetof(tnsMaterial,GradientCenter),0,0,2,0,0,0,0,tnsset_MaterialGradientCenter,0,0,0);
|
|
|
+ laAddFloatProperty(p,"gradient_size","Gradient Size","Size of the gradient",0,0,0,0,0,0,0,0,offsetof(tnsMaterial,GradientSize),0,0,2,0,0,0,0,tnsset_MaterialGradientSize,0,0,0);
|
|
|
+ laAddFloatProperty(p,"gradient_box_r","Corner","Corner radius of the box gradient",0,0,0,0,0,0,0,0,offsetof(tnsMaterial,GradientBoxR),0,tnsset_MaterialGradientR,0,0,0,0,0,0,0,0,0);
|
|
|
+ laAddFloatProperty(p,"gradient_box_f","Feather","Feather distance of the box gradient",0,0,0,0,0,0,0,0,offsetof(tnsMaterial,GradientBoxF),0,tnsset_MaterialGradientF,0,0,0,0,0,0,0,0,0);
|
|
|
laAddSubGroup(p, "shader_page", "Shader Page", "Shader page of this material","la_rack_page",0,0,0,offsetof(tnsMaterial,Page),0,0,0,0,0,0,0,LA_UDF_SINGLE|LA_HIDE_IN_SAVE);
|
|
|
laAddOperatorProperty(p,"refresh","Refresh","Refresh material shader","M_refresh_material_shader",L'🗘',0);
|
|
|
laAddOperatorProperty(p,"remove","Remove","Remove this material","M_remove_material",L'🗴',0);
|