performance optimization

This commit is contained in:
Michele 2021-01-15 12:30:41 +00:00
parent 92ccdbbc2d
commit c3f4e7cd70
2 changed files with 49 additions and 143 deletions

View file

@ -6,7 +6,6 @@
#define VS_SHADERMODEL vs_4_0_level_9_1
#define PS_SHADERMODEL ps_4_0_level_9_1
#endif
float2 TexelSize; // should be (1f/textureSize.X, 1f/textureSize.Y)
int BorderSize;
float R;
float G;
@ -26,152 +25,55 @@ struct VertexShaderOutput
float4 MainPS(VertexShaderOutput input) : COLOR
{
// float4 color = tex2Dlod(SpriteTextureSampler, float4 (input.TextureCoordinates.x, input.TextureCoordinates.y, 0,0));
// if (color.a > 0)
// {
// return color;
// }
float4 color = tex2Dlod(SpriteTextureSampler, float4(input.TextureCoordinates.x, input.TextureCoordinates.y, 0, 0));
// float2 pixelSize.x = float2(pixelSize.x, 0);
// float2 pixelSize.y = float2( 0, pixelSize.y );
// for (int i = 1; i < 10; i++)
// {
// if (i<=BorderSize)
// {
// float4 c1 = tex2Dlod(SpriteTextureSampler, float4((input.TextureCoordinates + pixelSize.x*i).x, (input.TextureCoordinates + pixelSize.x*i).y,0,0));
// float4 c2 = tex2Dlod(SpriteTextureSampler, float4((input.TextureCoordinates - pixelSize.x*i).x,(input.TextureCoordinates - pixelSize.x*i ).y ,0,0));
// float4 c3 = tex2Dlod(SpriteTextureSampler, float4((input.TextureCoordinates + pixelSize.y*i ).x,(input.TextureCoordinates + pixelSize.y*i ).y ,0,0));
// float4 c4 = tex2Dlod(SpriteTextureSampler, float4((input.TextureCoordinates - pixelSize.y*i ).x,(input.TextureCoordinates - pixelSize.y*i ).y ,0,0));
// float4 d1 = tex2Dlod(SpriteTextureSampler, float4((input.TextureCoordinates - (pixelSize.x+pixelSize.y)*i ).x,(input.TextureCoordinates - (pixelSize.x+pixelSize.y)*i ).y ,0,0));
// float4 d2 = tex2Dlod(SpriteTextureSampler, float4((input.TextureCoordinates + (pixelSize.x+pixelSize.y)*i).x,(input.TextureCoordinates + (pixelSize.x+pixelSize.y)*i).y ,0,0));
// float4 d3 = tex2Dlod(SpriteTextureSampler, float4((input.TextureCoordinates - (pixelSize.x-pixelSize.y)*i ).x,(input.TextureCoordinates - (pixelSize.x-pixelSize.y)*i ).y ,0,0));
// float4 d4 = tex2Dlod(SpriteTextureSampler, float4((input.TextureCoordinates - (-pixelSize.x+pixelSize.y)*i).x,(input.TextureCoordinates - (-pixelSize.x+pixelSize.y)*i).y ,0,0));
// if (color.a != c1.a || color.a != c2.a|| color.a != c3.a|| color.a != c4.a
// || color.a != d1.a
// || color.a != d2.a
// || color.a != d3.a
// || color.a != d4.a
// )
// {
// color.r=R;
// color.g=G;
// color.b=B;
// color.a=1;
// }
// }
// }
// return color;
//float pixelSize.x = float(1/ImageSize.x);
//float pixelSize.y = float(1/ImageSize.y );
// ###########################################################################
// float2 pixelSize = 1/ float2((float) ImageSize.x, (float) ImageSize.y);
// float4 color = tex2D(SpriteTextureSampler, input.TextureCoordinates);
// if(color.a==1) {return color;}
// // float2 offsets[8] = {float2(-1,0), float2(1,0), float2(0,1), float2(0,-1), float2(-1,1), float2(1,1), float2(1,-1), float2(-1,-1)};
// float2 offsets[8] = {float2(-pixelSize.x,0),
// float2(pixelSize.x,0),
// float2(0,pixelSize.y),
// float2(0,-pixelSize.y),
// float2(-pixelSize.x,pixelSize.y),
// float2(pixelSize.x,pixelSize.y),
// float2(pixelSize.x,-pixelSize.y),
// float2(-pixelSize.x,-pixelSize.y)};
// int i, j = 0;
// while(i < 10)
// {
// i++;
// j=0;
// while (j < 8)
// {
// // float2 curUV = input.TextureCoordinates + ((offsets[j] * pixelSize.x + offsets[j] *pixelSize.y)* i);
// float curUVx = input.TextureCoordinates.x + offsets[j].x * (float)i;
// float curUVy = input.TextureCoordinates.y + offsets[j].y * (float)i;
// float4 offsetsample = tex2Dlod(SpriteTextureSampler, float4(curUVx, curUVy,0,0));
// if(
// offsetsample.a==1
// )
// {
// return float4(
// R,
// G,
// B,
// 1);
// }
// j++;
// }
// }
// return color;
//##############################################################
int px = (int) input.TextureCoordinates.x*ImageSize.x;
int py = (int) input.TextureCoordinates.y*ImageSize.y;
float2 pixel = input.TextureCoordinates*ImageSize;
float4 color = tex2D(SpriteTextureSampler, input.TextureCoordinates);
if(color.a==1) {return color;}
// float2 offsets[8] = {float2(-1,0), float2(1,0), float2(0,1), float2(0,-1), float2(-1,1), float2(1,1), float2(1,-1), float2(-1,-1)};
float2 offsets[8] = {float2(-1,0),
float2(1,0),
float2(0,1),
float2(0,-1),
float2(-1,1),
float2(1,1),
float2(1,-1),
float2(-1,-1)};
int i, j = 0;
// while(i < 10)
// {
// i++;
// j=0;
while (j < 8)
if(color.a == 1)
{
// float2 curUV = input.TextureCoordinates + ((offsets[j] * pixelSize.x + offsets[j] *pixelSize.y)* i);
float checkpx=(float)px+(float)BorderSize*offsets[j].x;
float checkpy=(float)py+(float)BorderSize*offsets[j].y;
float curUVx = input.TextureCoordinates.x + (float)checkpx/(float)ImageSize.x;
float curUVy = input.TextureCoordinates.y + (float)checkpy/(float)ImageSize.y;
float4 offsetsample = tex2Dlod(SpriteTextureSampler, float4(curUVx, curUVy,0,0));
if(
offsetsample.a==1
)
{
return float4(
R,
G,
B,
1);
}
j++;
return color;
}
float2 pixel = (int2)input.TextureCoordinates * ImageSize;
// }
float2 offsets[8] = {float2(-1,0), float2(1,0), float2(0,1), float2(0,-1), float2(-1,1), float2(1,1), float2(1,-1), float2(-1,-1)} * BorderSize;
float2 checkp1 = pixel + (float)BorderSize * offsets[0];
float2 curUV1 = input.TextureCoordinates + checkp1/(float2)ImageSize;
float alpha1 = tex2Dlod(SpriteTextureSampler, float4(curUV1.x, curUV1.y,0,0)).a;
float2 checkp2 = pixel + (float)BorderSize * offsets[1];
float2 curUV2 = input.TextureCoordinates + checkp2/(float2)ImageSize;
float alpha2 = tex2Dlod(SpriteTextureSampler, float4(curUV2.x, curUV2.y,0,0)).a;
float2 checkp3 = pixel + (float)BorderSize * offsets[2];
float2 curUV3 = input.TextureCoordinates + checkp3/(float2)ImageSize;
float alpha3 = tex2Dlod(SpriteTextureSampler, float4(curUV3.x, curUV3.y,0,0)).a;
float2 checkp4 = pixel + (float)BorderSize * offsets[3];
float2 curUV4 = input.TextureCoordinates + checkp4/(float2)ImageSize;
float alpha4 = tex2Dlod(SpriteTextureSampler, float4(curUV4.x, curUV4.y,0,0)).a;
float2 checkp5 = pixel + (float)BorderSize * offsets[4];
float2 curUV5 = input.TextureCoordinates + checkp5/(float2)ImageSize;
float alpha5 = tex2Dlod(SpriteTextureSampler, float4(curUV5.x, curUV5.y,0,0)).a;
float2 checkp6 = pixel + (float)BorderSize * offsets[5];
float2 curUV6 = input.TextureCoordinates + checkp6/(float2)ImageSize;
float alpha6 = tex2Dlod(SpriteTextureSampler, float4(curUV6.x, curUV6.y,0,0)).a;
float2 checkp7 = pixel + (float)BorderSize * offsets[6];
float2 curUV7 = input.TextureCoordinates + checkp7/(float2)ImageSize;
float alpha7 = tex2Dlod(SpriteTextureSampler, float4(curUV7.x, curUV7.y,0,0)).a;
float2 checkp8 = pixel + (float)BorderSize * offsets[7];
float2 curUV8 = input.TextureCoordinates + checkp8/(float2)ImageSize;
float alpha8 = tex2Dlod(SpriteTextureSampler, float4(curUV8.x, curUV8.y,0,0)).a;
float alpha = alpha1 + alpha2 + alpha3 + alpha4 + alpha5 + alpha6 + alpha7 + alpha8;
if (alpha>0)
{
return float4(R,G,B,1);
}
return color;

View file

@ -169,7 +169,11 @@ ResetRenderTarget();
_mainWidget.BtnToolbarWall.Click += OnBtnToolbarWallClicked;
_mainWidget.BtnToolbarDelete.Click += OnBtnToolbarDeleteClicked;
AddItemToToolGrid(_mainWidget.GridWalls, OnWallButtonClicked, "walls");
_mainWidget.BtnToolbarTile.Visible=false;
_mainWidget.BtnToolbarWall.Visible=false;
AddItemToToolGrid(_mainWidget.GridWalls, OnWallButtonClicked, "walls");
AddItemToToolGrid(_mainWidget.GridOverlays, OnOverlayButtonClicked, "overlays");
_fonts = Content.LoadContentFolder<SpriteFont>("fonts");