mirror of
https://github.com/nothings/stb
synced 2024-12-15 20:32:33 +03:00
finish STBI_EDGE_ZERO, untested
This commit is contained in:
parent
9a1d34843e
commit
84520de6c4
@ -595,7 +595,7 @@ static int stbir__edge_wrap_slow(stbir_edge edge, int n, int max)
|
|||||||
switch (edge)
|
switch (edge)
|
||||||
{
|
{
|
||||||
case STBIR_EDGE_ZERO:
|
case STBIR_EDGE_ZERO:
|
||||||
return 0;
|
return 0; // we'll decode the wrong pixel here, and then overwrite with 0s later
|
||||||
|
|
||||||
case STBIR_EDGE_CLAMP:
|
case STBIR_EDGE_CLAMP:
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
@ -832,6 +832,16 @@ static void stbir__decode_scanline(stbir__info* stbir_info, int n)
|
|||||||
|
|
||||||
int x = -stbir__get_filter_pixel_margin_horizontal(stbir_info);
|
int x = -stbir__get_filter_pixel_margin_horizontal(stbir_info);
|
||||||
|
|
||||||
|
// special handling for STBIR_EDGE_ZERO because it needs to return an item that doesn't appear in the input,
|
||||||
|
// and we want to avoid paying overhead on every pixel if not STBIR_EDGE_ZERO
|
||||||
|
if (edge_vertical == STBIR_EDGE_ZERO && (n < 0 || n >= stbir_info->input_h))
|
||||||
|
{
|
||||||
|
for (; x < max_x; x++)
|
||||||
|
for (c = 0; c < channels; c++)
|
||||||
|
decode_buffer[x*channels + c] = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (decode)
|
switch (decode)
|
||||||
{
|
{
|
||||||
case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_LINEAR):
|
case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_LINEAR):
|
||||||
@ -947,6 +957,20 @@ static void stbir__decode_scanline(stbir__info* stbir_info, int n)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (edge_horizontal == STBIR_EDGE_ZERO)
|
||||||
|
{
|
||||||
|
for (x = -stbir__get_filter_pixel_margin_horizontal(stbir_info); x < 0; x++)
|
||||||
|
{
|
||||||
|
for (c = 0; c < channels; c++)
|
||||||
|
decode_buffer[x*channels + c] = 0;
|
||||||
|
}
|
||||||
|
for (x = input_w; x < max_x; x++)
|
||||||
|
{
|
||||||
|
for (c = 0; c < channels; c++)
|
||||||
|
decode_buffer[x*channels + c] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static float* stbir__get_ring_buffer_entry(float* ring_buffer, int index, int ring_buffer_length)
|
static float* stbir__get_ring_buffer_entry(float* ring_buffer, int index, int ring_buffer_length)
|
||||||
|
Loading…
Reference in New Issue
Block a user