mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-24 17:49:52 +01:00
some more changes to scaling code
This commit is contained in:
parent
1ac3402cfa
commit
ab5542fd9d
118
src/surface.c
118
src/surface.c
@ -319,71 +319,85 @@ HRESULT __stdcall ddraw_surface_Blt(IDirectDrawSurfaceImpl *This, LPRECT lpDestR
|
|||||||
|
|
||||||
pattern_idx = 0;
|
pattern_idx = 0;
|
||||||
scale_pattern *current = &pattern[pattern_idx];
|
scale_pattern *current = &pattern[pattern_idx];
|
||||||
do {
|
|
||||||
switch (current->type)
|
if (This->bpp == 8)
|
||||||
{
|
{
|
||||||
case ONCE:
|
unsigned char *d, *s, v;
|
||||||
{
|
unsigned char *src = (unsigned char *)Source->surface;
|
||||||
if (This->bpp == 8)
|
unsigned char *dst = (unsigned char *)This->surface;
|
||||||
|
|
||||||
|
do {
|
||||||
|
switch (current->type)
|
||||||
{
|
{
|
||||||
((unsigned char *)This->surface)[dest_base + current->dst_index] =
|
case ONCE:
|
||||||
((unsigned char *)Source->surface)[source_base + current->src_index];
|
dst[dest_base + current->dst_index] =
|
||||||
}
|
src[source_base + current->src_index];
|
||||||
else if (This->bpp == 16)
|
break;
|
||||||
{
|
|
||||||
((unsigned short *)This->surface)[dest_base + current->dst_index] =
|
case REPEAT:
|
||||||
((unsigned short *)Source->surface)[source_base + current->src_index];
|
d = (dst + dest_base + current->dst_index);
|
||||||
}
|
v = src[source_base + current->src_index];
|
||||||
break;
|
|
||||||
}
|
|
||||||
case REPEAT:
|
|
||||||
{
|
|
||||||
if (This->bpp == 8)
|
|
||||||
{
|
|
||||||
unsigned char *d = ((unsigned char *)This->surface + dest_base + current->dst_index);
|
|
||||||
unsigned char v = ((unsigned char *)Source->surface)[source_base + current->src_index];
|
|
||||||
|
|
||||||
count = current->count;
|
count = current->count;
|
||||||
while (count-- > 0)
|
while (count-- > 0)
|
||||||
*d++ = v;
|
*d++ = v;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SEQUENCE:
|
||||||
|
d = dst + dest_base + current->dst_index;
|
||||||
|
s = src + source_base + current->src_index;
|
||||||
|
|
||||||
|
memcpy((void *)d, (void *)s, current->count * This->lXPitch);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case END:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else if (This->bpp == 16)
|
|
||||||
|
current = &pattern[++pattern_idx];
|
||||||
|
} while (current->type != END);
|
||||||
|
}
|
||||||
|
else if (This->bpp == 16)
|
||||||
|
{
|
||||||
|
unsigned short *d, *s, v;
|
||||||
|
unsigned short *src = (unsigned short *)Source->surface;
|
||||||
|
unsigned short *dst = (unsigned short *)This->surface;
|
||||||
|
|
||||||
|
do {
|
||||||
|
switch (current->type)
|
||||||
{
|
{
|
||||||
unsigned short *d = ((unsigned short *)This->surface + dest_base + current->dst_index);
|
case ONCE:
|
||||||
unsigned short v = ((unsigned short *)Source->surface)[source_base + current->src_index];
|
dst[dest_base + current->dst_index] =
|
||||||
|
src[source_base + current->src_index];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case REPEAT:
|
||||||
|
d = (dst + dest_base + current->dst_index);
|
||||||
|
v = src[source_base + current->src_index];
|
||||||
|
|
||||||
count = current->count;
|
count = current->count;
|
||||||
while (count-- > 0)
|
while (count-- > 0)
|
||||||
*d++ = v;
|
*d++ = v;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SEQUENCE:
|
||||||
|
d = dst + dest_base + current->dst_index;
|
||||||
|
s = src + source_base + current->src_index;
|
||||||
|
|
||||||
|
memcpy((void *)d, (void *)s, current->count * This->lXPitch);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case END:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
current = &pattern[++pattern_idx];
|
||||||
}
|
} while (current->type != END);
|
||||||
case SEQUENCE:
|
}
|
||||||
{
|
|
||||||
void *d, *s;
|
|
||||||
|
|
||||||
if (This->bpp == 8)
|
|
||||||
{
|
|
||||||
d = ((unsigned char *)This->surface) + dest_base + current->dst_index;
|
|
||||||
s = ((unsigned char *)Source->surface) + source_base + current->src_index;
|
|
||||||
}
|
|
||||||
else if (This->bpp == 16)
|
|
||||||
{
|
|
||||||
d = ((unsigned short *)This->surface) + dest_base + current->dst_index;
|
|
||||||
s = ((unsigned short *)Source->surface) + source_base + current->src_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(d, s, current->count * This->lXPitch);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case END:
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
current = &pattern[++pattern_idx];
|
|
||||||
} while (current->type != END);
|
|
||||||
}
|
}
|
||||||
free(pattern);
|
free(pattern);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user