}
};
+static inline bool shader_is_diffuse( const char *shader ){
+ return !string_equal_suffix( shader, "_bump" )
+ && !string_equal_suffix( shader, "_glow" )
+ && !string_equal_suffix( shader, "_h" )
+ && !string_equal_suffix( shader, "_local" )
+ && !string_equal_suffix( shader, "_luma" )
+ && !string_equal_suffix( shader, "_nm" )
+ && !string_equal_suffix( shader, "_s" );
+}
+
inline bool shader_valid( const char* shader ){
return string_is_ascii( shader )
&& strchr( shader, ' ' ) == 0
&& strchr( shader, '\r' ) == 0
&& strchr( shader, '\t' ) == 0
&& strchr( shader, '\v' ) == 0
- && strchr( shader, '\\' ) == 0;
+ && strchr( shader, '\\' ) == 0
+ && shader_is_diffuse( shader );
}
inline const char* GlobalTexturePrefix_get(){
return string_equal_n( string, prefix, string_length( prefix ) );
}
+/// \brief Returns true if the ending of \p string is equal to \p suffix.
+/// O(n)
+inline bool string_equal_suffix( const char* string, const char* suffix){
+ const char *s = string + string_length( string ) - string_length( suffix );
+ return string_equal_n( s , suffix, string_length( suffix ) );
+}
+
/// \brief Copies \p other into \p string and returns \p string.
/// Assumes that the space allocated for \p string is at least string_length(other) + 1.
/// O(n)