Я хотел бы удалить содержимое файла, указав c что-нибудь между "{{" и "}}". Пример приведен в конце моего письма в "shadows.ffx".
Я попытался использовать следующее:
string RemoveBetween(string s, char begin, char end)
{
Regex regex = new Regex(string.Format("\\{0}.*?\\{1}", begin, end));
return regex.Replace(s, string.Empty);
}
Но это не работает со сложными вещами. Это работает только тогда, когда строка представляет собой однострочный текст.
И, конечно, строка выглядит так, когда читается программой: "\ r" + "\ n".
"DECLARATIONS shadow_map_sampling \ r \ n {{\ r \ n \ t # define ................"
Следующее также не очень хорошо работает, или Я просто недостаточно опытен, чтобы это произошло.
int start = text.IndexOf("{{");
int end = text.IndexOf("}}", start);
text = text.Remove(start , end-start-3);
Есть идеи на этот счет?
shadows.ffx
FRAGMENT shadow_map_projection
include shadow_map_generation
in float4 iWorldPosition : world_position
out float4 oProjectedPosition : POSITION
out float4 oWorldPosition : TEXCOORD0
{{
oWorldPosition = iWorldPosition;
oProjectedPosition = mul( iWorldPosition, view_projection_transform );
}}
FRAGMENT shadow_map_output
include shadow_map_generation
inout SurfaceData surfaceData : surface_data
out float4 colour : PIXEL_RETURN_SEMANTIC
{{
#ifndef VARIANCE_SHADOW_MAPPING
colour = 0.0f; // we don't need color for hardware shadow maps, as we read it back from the depth buffer
#else
//const float distance = length( shadow_map_view.xyz - surfaceData.world_pos.xyz );
const float distance = surfaceData.world_pos.z;
colour = float4( ComputeMoments( distance ), 0.0f, 0.0f );// / 1000.0f;
#endif
}}
FRAGMENT kill_on_alpha_test
include basic_materials
inout SurfaceData surfaceData : surface_data
#ifdef COLOR_OUTPUT_ENABLED
in float4 mod : COLOR0
#endif
{{
PerformAlphaTestClip(surfaceData.material.albedo_color.a);
}}