Mixing Two Textures in Metal Shader
up vote
0
down vote
favorite
I have two transparent textures. First one is Source texture, Second one is Mask Texture. I want to mix two textures.
Scenario 1
- source texture having color and Alpha Mask Texture Having color and Alpha
- Resultant Color and alpha should be multiplied
Scenario 2
- source texture having color and Alpha Mask Texture alpha is Zero
- Resultant Color and alpha should be Source Texture Color and Alpha
Scenario 3
- source texture having Alpha zero Mask Texture alpha is having color and alpha
- Resultant Color and alpha should be Zero
How can I achieve this in metal Fragment shader.
fragment float4 fragmentShaderone(VertexOut params[[stage_in]],
texture2d<float, access::sample>srcTexture [[texture(0)]],
texture2d<float, access::sample> maskTexture [[texture(1)]])
{
constexpr sampler defaultSampler;
float srcColor = float4(texture.sample(defaultSampler, float2(params.textureCoordinates))) * float4(1,0,0,40.0/255.0);
float4 maskColor = float4(texture4.sample(defaultSampler, float2(params.textureCoordinates))) ;
return srcColor * maskColor
}
If I do like this Scenario 2 is missing. Anyway to solve in metal fragment shader. I need three scenarios to be satisfied.
ios opengl-es metal fragment-shader metalkit
add a comment |
up vote
0
down vote
favorite
I have two transparent textures. First one is Source texture, Second one is Mask Texture. I want to mix two textures.
Scenario 1
- source texture having color and Alpha Mask Texture Having color and Alpha
- Resultant Color and alpha should be multiplied
Scenario 2
- source texture having color and Alpha Mask Texture alpha is Zero
- Resultant Color and alpha should be Source Texture Color and Alpha
Scenario 3
- source texture having Alpha zero Mask Texture alpha is having color and alpha
- Resultant Color and alpha should be Zero
How can I achieve this in metal Fragment shader.
fragment float4 fragmentShaderone(VertexOut params[[stage_in]],
texture2d<float, access::sample>srcTexture [[texture(0)]],
texture2d<float, access::sample> maskTexture [[texture(1)]])
{
constexpr sampler defaultSampler;
float srcColor = float4(texture.sample(defaultSampler, float2(params.textureCoordinates))) * float4(1,0,0,40.0/255.0);
float4 maskColor = float4(texture4.sample(defaultSampler, float2(params.textureCoordinates))) ;
return srcColor * maskColor
}
If I do like this Scenario 2 is missing. Anyway to solve in metal fragment shader. I need three scenarios to be satisfied.
ios opengl-es metal fragment-shader metalkit
why you multiplefloat4(texture.sample(defaultSampler, float2(params.textureCoordinates))) * float4(1,0,0,40.0/255.0)
?
– Jatin Kathrotiya
Nov 21 at 6:25
That is a single color image so to make it red with alpha I am multiplying
– Ruban4Axis
Nov 21 at 6:26
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have two transparent textures. First one is Source texture, Second one is Mask Texture. I want to mix two textures.
Scenario 1
- source texture having color and Alpha Mask Texture Having color and Alpha
- Resultant Color and alpha should be multiplied
Scenario 2
- source texture having color and Alpha Mask Texture alpha is Zero
- Resultant Color and alpha should be Source Texture Color and Alpha
Scenario 3
- source texture having Alpha zero Mask Texture alpha is having color and alpha
- Resultant Color and alpha should be Zero
How can I achieve this in metal Fragment shader.
fragment float4 fragmentShaderone(VertexOut params[[stage_in]],
texture2d<float, access::sample>srcTexture [[texture(0)]],
texture2d<float, access::sample> maskTexture [[texture(1)]])
{
constexpr sampler defaultSampler;
float srcColor = float4(texture.sample(defaultSampler, float2(params.textureCoordinates))) * float4(1,0,0,40.0/255.0);
float4 maskColor = float4(texture4.sample(defaultSampler, float2(params.textureCoordinates))) ;
return srcColor * maskColor
}
If I do like this Scenario 2 is missing. Anyway to solve in metal fragment shader. I need three scenarios to be satisfied.
ios opengl-es metal fragment-shader metalkit
I have two transparent textures. First one is Source texture, Second one is Mask Texture. I want to mix two textures.
Scenario 1
- source texture having color and Alpha Mask Texture Having color and Alpha
- Resultant Color and alpha should be multiplied
Scenario 2
- source texture having color and Alpha Mask Texture alpha is Zero
- Resultant Color and alpha should be Source Texture Color and Alpha
Scenario 3
- source texture having Alpha zero Mask Texture alpha is having color and alpha
- Resultant Color and alpha should be Zero
How can I achieve this in metal Fragment shader.
fragment float4 fragmentShaderone(VertexOut params[[stage_in]],
texture2d<float, access::sample>srcTexture [[texture(0)]],
texture2d<float, access::sample> maskTexture [[texture(1)]])
{
constexpr sampler defaultSampler;
float srcColor = float4(texture.sample(defaultSampler, float2(params.textureCoordinates))) * float4(1,0,0,40.0/255.0);
float4 maskColor = float4(texture4.sample(defaultSampler, float2(params.textureCoordinates))) ;
return srcColor * maskColor
}
If I do like this Scenario 2 is missing. Anyway to solve in metal fragment shader. I need three scenarios to be satisfied.
ios opengl-es metal fragment-shader metalkit
ios opengl-es metal fragment-shader metalkit
edited Nov 21 at 19:19
Ken Thomases
68.6k668104
68.6k668104
asked Nov 21 at 5:52
Ruban4Axis
13313
13313
why you multiplefloat4(texture.sample(defaultSampler, float2(params.textureCoordinates))) * float4(1,0,0,40.0/255.0)
?
– Jatin Kathrotiya
Nov 21 at 6:25
That is a single color image so to make it red with alpha I am multiplying
– Ruban4Axis
Nov 21 at 6:26
add a comment |
why you multiplefloat4(texture.sample(defaultSampler, float2(params.textureCoordinates))) * float4(1,0,0,40.0/255.0)
?
– Jatin Kathrotiya
Nov 21 at 6:25
That is a single color image so to make it red with alpha I am multiplying
– Ruban4Axis
Nov 21 at 6:26
why you multiple
float4(texture.sample(defaultSampler, float2(params.textureCoordinates))) * float4(1,0,0,40.0/255.0)
?– Jatin Kathrotiya
Nov 21 at 6:25
why you multiple
float4(texture.sample(defaultSampler, float2(params.textureCoordinates))) * float4(1,0,0,40.0/255.0)
?– Jatin Kathrotiya
Nov 21 at 6:25
That is a single color image so to make it red with alpha I am multiplying
– Ruban4Axis
Nov 21 at 6:26
That is a single color image so to make it red with alpha I am multiplying
– Ruban4Axis
Nov 21 at 6:26
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53406000%2fmixing-two-textures-in-metal-shader%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
why you multiple
float4(texture.sample(defaultSampler, float2(params.textureCoordinates))) * float4(1,0,0,40.0/255.0)
?– Jatin Kathrotiya
Nov 21 at 6:25
That is a single color image so to make it red with alpha I am multiplying
– Ruban4Axis
Nov 21 at 6:26