my own uncrustify run
This commit is contained in:
@@ -1,33 +1,33 @@
|
||||
/*
|
||||
Copyright (c) 2002 Forest "LordHavoc" Hale
|
||||
Copyright (c) 2002 Forest "LordHavoc" Hale
|
||||
|
||||
All rights reserved.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
Redistributions of source code must retain the above copyright notice, this list
|
||||
of conditions and the following disclaimer.
|
||||
Redistributions of source code must retain the above copyright notice, this list
|
||||
of conditions and the following disclaimer.
|
||||
|
||||
Redistributions in binary form must reproduce the above copyright notice, this
|
||||
list of conditions and the following disclaimer in the documentation and/or
|
||||
other materials provided with the distribution.
|
||||
Redistributions in binary form must reproduce the above copyright notice, this
|
||||
list of conditions and the following disclaimer in the documentation and/or
|
||||
other materials provided with the distribution.
|
||||
|
||||
Neither the name of Forest Hale nor the names of other contributors may be used
|
||||
to endorse or promote products derived from this software without specific prior
|
||||
written permission.
|
||||
Neither the name of Forest Hale nor the names of other contributors may be used
|
||||
to endorse or promote products derived from this software without specific prior
|
||||
written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||
DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||
DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "texmanip.h"
|
||||
|
||||
@@ -37,352 +37,337 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
static byte *row1 = NULL, *row2 = NULL;
|
||||
static int rowsize = 0;
|
||||
|
||||
void R_ResampleTextureLerpLine (const byte *in, byte *out, int inwidth, int outwidth, int bytesperpixel)
|
||||
{
|
||||
int j, xi, oldx = 0, f, fstep, endx, lerp;
|
||||
#define LERPBYTE(i) out[i] = (byte) ((((row2[i] - row1[i]) * lerp) >> 16) + row1[i])
|
||||
void R_ResampleTextureLerpLine( const byte *in, byte *out, int inwidth, int outwidth, int bytesperpixel ){
|
||||
int j, xi, oldx = 0, f, fstep, endx, lerp;
|
||||
#define LERPBYTE( i ) out[i] = (byte) ( ( ( ( row2[i] - row1[i] ) * lerp ) >> 16 ) + row1[i] )
|
||||
|
||||
fstep = (int) (inwidth * 65536.0f / outwidth);
|
||||
endx = (inwidth - 1);
|
||||
if (bytesperpixel == 4)
|
||||
{
|
||||
for (j = 0,f = 0;j < outwidth;j++, f += fstep)
|
||||
{
|
||||
xi = f >> 16;
|
||||
if (xi != oldx)
|
||||
{
|
||||
in += (xi - oldx) * 4;
|
||||
oldx = xi;
|
||||
}
|
||||
fstep = (int) ( inwidth * 65536.0f / outwidth );
|
||||
endx = ( inwidth - 1 );
|
||||
if ( bytesperpixel == 4 ) {
|
||||
for ( j = 0,f = 0; j < outwidth; j++, f += fstep )
|
||||
{
|
||||
xi = f >> 16;
|
||||
if ( xi != oldx ) {
|
||||
in += ( xi - oldx ) * 4;
|
||||
oldx = xi;
|
||||
}
|
||||
|
||||
if (xi < endx)
|
||||
{
|
||||
lerp = f & 0xFFFF;
|
||||
*out++ = (byte) ((((in[4] - in[0]) * lerp) >> 16) + in[0]);
|
||||
*out++ = (byte) ((((in[5] - in[1]) * lerp) >> 16) + in[1]);
|
||||
*out++ = (byte) ((((in[6] - in[2]) * lerp) >> 16) + in[2]);
|
||||
*out++ = (byte) ((((in[7] - in[3]) * lerp) >> 16) + in[3]);
|
||||
}
|
||||
else // last pixel of the line has no pixel to lerp to
|
||||
{
|
||||
*out++ = in[0];
|
||||
*out++ = in[1];
|
||||
*out++ = in[2];
|
||||
*out++ = in[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (bytesperpixel == 3)
|
||||
{
|
||||
for (j = 0, f = 0; j < outwidth; j++, f += fstep)
|
||||
{
|
||||
xi = f >> 16;
|
||||
if (xi != oldx)
|
||||
{
|
||||
in += (xi - oldx) * 3;
|
||||
oldx = xi;
|
||||
}
|
||||
if ( xi < endx ) {
|
||||
lerp = f & 0xFFFF;
|
||||
*out++ = (byte) ( ( ( ( in[4] - in[0] ) * lerp ) >> 16 ) + in[0] );
|
||||
*out++ = (byte) ( ( ( ( in[5] - in[1] ) * lerp ) >> 16 ) + in[1] );
|
||||
*out++ = (byte) ( ( ( ( in[6] - in[2] ) * lerp ) >> 16 ) + in[2] );
|
||||
*out++ = (byte) ( ( ( ( in[7] - in[3] ) * lerp ) >> 16 ) + in[3] );
|
||||
}
|
||||
else // last pixel of the line has no pixel to lerp to
|
||||
{
|
||||
*out++ = in[0];
|
||||
*out++ = in[1];
|
||||
*out++ = in[2];
|
||||
*out++ = in[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( bytesperpixel == 3 ) {
|
||||
for ( j = 0, f = 0; j < outwidth; j++, f += fstep )
|
||||
{
|
||||
xi = f >> 16;
|
||||
if ( xi != oldx ) {
|
||||
in += ( xi - oldx ) * 3;
|
||||
oldx = xi;
|
||||
}
|
||||
|
||||
if (xi < endx)
|
||||
{
|
||||
lerp = f & 0xFFFF;
|
||||
*out++ = (byte) ((((in[3] - in[0]) * lerp) >> 16) + in[0]);
|
||||
*out++ = (byte) ((((in[4] - in[1]) * lerp) >> 16) + in[1]);
|
||||
*out++ = (byte) ((((in[5] - in[2]) * lerp) >> 16) + in[2]);
|
||||
}
|
||||
else // last pixel of the line has no pixel to lerp to
|
||||
{
|
||||
*out++ = in[0];
|
||||
*out++ = in[1];
|
||||
*out++ = in[2];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
globalOutputStream() << "R_ResampleTextureLerpLine: unsupported bytesperpixel " << bytesperpixel << "\n";
|
||||
}
|
||||
if ( xi < endx ) {
|
||||
lerp = f & 0xFFFF;
|
||||
*out++ = (byte) ( ( ( ( in[3] - in[0] ) * lerp ) >> 16 ) + in[0] );
|
||||
*out++ = (byte) ( ( ( ( in[4] - in[1] ) * lerp ) >> 16 ) + in[1] );
|
||||
*out++ = (byte) ( ( ( ( in[5] - in[2] ) * lerp ) >> 16 ) + in[2] );
|
||||
}
|
||||
else // last pixel of the line has no pixel to lerp to
|
||||
{
|
||||
*out++ = in[0];
|
||||
*out++ = in[1];
|
||||
*out++ = in[2];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
globalOutputStream() << "R_ResampleTextureLerpLine: unsupported bytesperpixel " << bytesperpixel << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
R_ResampleTexture
|
||||
================
|
||||
*/
|
||||
void R_ResampleTexture (const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight, int bytesperpixel)
|
||||
{
|
||||
if (rowsize < outwidth * bytesperpixel)
|
||||
{
|
||||
if (row1)
|
||||
free(row1);
|
||||
if (row2)
|
||||
free(row2);
|
||||
================
|
||||
R_ResampleTexture
|
||||
================
|
||||
*/
|
||||
void R_ResampleTexture( const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight, int bytesperpixel ){
|
||||
if ( rowsize < outwidth * bytesperpixel ) {
|
||||
if ( row1 ) {
|
||||
free( row1 );
|
||||
}
|
||||
if ( row2 ) {
|
||||
free( row2 );
|
||||
}
|
||||
|
||||
rowsize = outwidth * bytesperpixel;
|
||||
row1 = (byte *)malloc(rowsize);
|
||||
row2 = (byte *)malloc(rowsize);
|
||||
}
|
||||
rowsize = outwidth * bytesperpixel;
|
||||
row1 = (byte *)malloc( rowsize );
|
||||
row2 = (byte *)malloc( rowsize );
|
||||
}
|
||||
|
||||
if (bytesperpixel == 4)
|
||||
{
|
||||
int i, j, yi, oldy, f, fstep, lerp, endy = (inheight-1), inwidth4 = inwidth*4, outwidth4 = outwidth*4;
|
||||
byte *inrow, *out;
|
||||
out = (byte *)outdata;
|
||||
fstep = (int) (inheight * 65536.0f / outheight);
|
||||
#define LERPBYTE(i) out[i] = (byte) ((((row2[i] - row1[i]) * lerp) >> 16) + row1[i])
|
||||
if ( bytesperpixel == 4 ) {
|
||||
int i, j, yi, oldy, f, fstep, lerp, endy = ( inheight - 1 ), inwidth4 = inwidth * 4, outwidth4 = outwidth * 4;
|
||||
byte *inrow, *out;
|
||||
out = (byte *)outdata;
|
||||
fstep = (int) ( inheight * 65536.0f / outheight );
|
||||
#define LERPBYTE( i ) out[i] = (byte) ( ( ( ( row2[i] - row1[i] ) * lerp ) >> 16 ) + row1[i] )
|
||||
|
||||
inrow = (byte *)indata;
|
||||
oldy = 0;
|
||||
R_ResampleTextureLerpLine (inrow, row1, inwidth, outwidth, bytesperpixel);
|
||||
R_ResampleTextureLerpLine (inrow + inwidth4, row2, inwidth, outwidth, bytesperpixel);
|
||||
inrow = (byte *)indata;
|
||||
oldy = 0;
|
||||
R_ResampleTextureLerpLine( inrow, row1, inwidth, outwidth, bytesperpixel );
|
||||
R_ResampleTextureLerpLine( inrow + inwidth4, row2, inwidth, outwidth, bytesperpixel );
|
||||
|
||||
for (i = 0, f = 0;i < outheight;i++,f += fstep)
|
||||
{
|
||||
yi = f >> 16;
|
||||
if (yi < endy)
|
||||
{
|
||||
lerp = f & 0xFFFF;
|
||||
if (yi != oldy)
|
||||
{
|
||||
inrow = (byte *)indata + inwidth4 * yi;
|
||||
if (yi == oldy+1)
|
||||
memcpy(row1, row2, outwidth4);
|
||||
else
|
||||
R_ResampleTextureLerpLine (inrow, row1, inwidth, outwidth, bytesperpixel);
|
||||
for ( i = 0, f = 0; i < outheight; i++,f += fstep )
|
||||
{
|
||||
yi = f >> 16;
|
||||
if ( yi < endy ) {
|
||||
lerp = f & 0xFFFF;
|
||||
if ( yi != oldy ) {
|
||||
inrow = (byte *)indata + inwidth4 * yi;
|
||||
if ( yi == oldy + 1 ) {
|
||||
memcpy( row1, row2, outwidth4 );
|
||||
}
|
||||
else{
|
||||
R_ResampleTextureLerpLine( inrow, row1, inwidth, outwidth, bytesperpixel );
|
||||
}
|
||||
|
||||
R_ResampleTextureLerpLine (inrow + inwidth4, row2, inwidth, outwidth, bytesperpixel);
|
||||
oldy = yi;
|
||||
}
|
||||
j = outwidth - 4;
|
||||
while(j >= 0)
|
||||
{
|
||||
LERPBYTE( 0);
|
||||
LERPBYTE( 1);
|
||||
LERPBYTE( 2);
|
||||
LERPBYTE( 3);
|
||||
LERPBYTE( 4);
|
||||
LERPBYTE( 5);
|
||||
LERPBYTE( 6);
|
||||
LERPBYTE( 7);
|
||||
LERPBYTE( 8);
|
||||
LERPBYTE( 9);
|
||||
LERPBYTE(10);
|
||||
LERPBYTE(11);
|
||||
LERPBYTE(12);
|
||||
LERPBYTE(13);
|
||||
LERPBYTE(14);
|
||||
LERPBYTE(15);
|
||||
out += 16;
|
||||
row1 += 16;
|
||||
row2 += 16;
|
||||
j -= 4;
|
||||
}
|
||||
if (j & 2)
|
||||
{
|
||||
LERPBYTE( 0);
|
||||
LERPBYTE( 1);
|
||||
LERPBYTE( 2);
|
||||
LERPBYTE( 3);
|
||||
LERPBYTE( 4);
|
||||
LERPBYTE( 5);
|
||||
LERPBYTE( 6);
|
||||
LERPBYTE( 7);
|
||||
out += 8;
|
||||
row1 += 8;
|
||||
row2 += 8;
|
||||
}
|
||||
if (j & 1)
|
||||
{
|
||||
LERPBYTE( 0);
|
||||
LERPBYTE( 1);
|
||||
LERPBYTE( 2);
|
||||
LERPBYTE( 3);
|
||||
out += 4;
|
||||
row1 += 4;
|
||||
row2 += 4;
|
||||
}
|
||||
row1 -= outwidth4;
|
||||
row2 -= outwidth4;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (yi != oldy)
|
||||
{
|
||||
inrow = (byte *)indata + inwidth4*yi;
|
||||
if (yi == oldy+1)
|
||||
memcpy(row1, row2, outwidth4);
|
||||
else
|
||||
R_ResampleTextureLerpLine (inrow, row1, inwidth, outwidth, bytesperpixel);
|
||||
R_ResampleTextureLerpLine( inrow + inwidth4, row2, inwidth, outwidth, bytesperpixel );
|
||||
oldy = yi;
|
||||
}
|
||||
j = outwidth - 4;
|
||||
while ( j >= 0 )
|
||||
{
|
||||
LERPBYTE( 0 );
|
||||
LERPBYTE( 1 );
|
||||
LERPBYTE( 2 );
|
||||
LERPBYTE( 3 );
|
||||
LERPBYTE( 4 );
|
||||
LERPBYTE( 5 );
|
||||
LERPBYTE( 6 );
|
||||
LERPBYTE( 7 );
|
||||
LERPBYTE( 8 );
|
||||
LERPBYTE( 9 );
|
||||
LERPBYTE( 10 );
|
||||
LERPBYTE( 11 );
|
||||
LERPBYTE( 12 );
|
||||
LERPBYTE( 13 );
|
||||
LERPBYTE( 14 );
|
||||
LERPBYTE( 15 );
|
||||
out += 16;
|
||||
row1 += 16;
|
||||
row2 += 16;
|
||||
j -= 4;
|
||||
}
|
||||
if ( j & 2 ) {
|
||||
LERPBYTE( 0 );
|
||||
LERPBYTE( 1 );
|
||||
LERPBYTE( 2 );
|
||||
LERPBYTE( 3 );
|
||||
LERPBYTE( 4 );
|
||||
LERPBYTE( 5 );
|
||||
LERPBYTE( 6 );
|
||||
LERPBYTE( 7 );
|
||||
out += 8;
|
||||
row1 += 8;
|
||||
row2 += 8;
|
||||
}
|
||||
if ( j & 1 ) {
|
||||
LERPBYTE( 0 );
|
||||
LERPBYTE( 1 );
|
||||
LERPBYTE( 2 );
|
||||
LERPBYTE( 3 );
|
||||
out += 4;
|
||||
row1 += 4;
|
||||
row2 += 4;
|
||||
}
|
||||
row1 -= outwidth4;
|
||||
row2 -= outwidth4;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( yi != oldy ) {
|
||||
inrow = (byte *)indata + inwidth4 * yi;
|
||||
if ( yi == oldy + 1 ) {
|
||||
memcpy( row1, row2, outwidth4 );
|
||||
}
|
||||
else{
|
||||
R_ResampleTextureLerpLine( inrow, row1, inwidth, outwidth, bytesperpixel );
|
||||
}
|
||||
|
||||
oldy = yi;
|
||||
}
|
||||
memcpy(out, row1, outwidth4);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (bytesperpixel == 3)
|
||||
{
|
||||
int i, j, yi, oldy, f, fstep, lerp, endy = (inheight-1), inwidth3 = inwidth * 3, outwidth3 = outwidth * 3;
|
||||
byte *inrow, *out;
|
||||
out = (byte *)outdata;
|
||||
fstep = (int) (inheight*65536.0f/outheight);
|
||||
#define LERPBYTE(i) out[i] = (byte) ((((row2[i] - row1[i]) * lerp) >> 16) + row1[i])
|
||||
oldy = yi;
|
||||
}
|
||||
memcpy( out, row1, outwidth4 );
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( bytesperpixel == 3 ) {
|
||||
int i, j, yi, oldy, f, fstep, lerp, endy = ( inheight - 1 ), inwidth3 = inwidth * 3, outwidth3 = outwidth * 3;
|
||||
byte *inrow, *out;
|
||||
out = (byte *)outdata;
|
||||
fstep = (int) ( inheight * 65536.0f / outheight );
|
||||
#define LERPBYTE( i ) out[i] = (byte) ( ( ( ( row2[i] - row1[i] ) * lerp ) >> 16 ) + row1[i] )
|
||||
|
||||
inrow = (byte *)indata;
|
||||
oldy = 0;
|
||||
R_ResampleTextureLerpLine (inrow, row1, inwidth, outwidth, bytesperpixel);
|
||||
R_ResampleTextureLerpLine (inrow + inwidth3, row2, inwidth, outwidth, bytesperpixel);
|
||||
for (i = 0, f = 0;i < outheight;i++,f += fstep)
|
||||
{
|
||||
yi = f >> 16;
|
||||
if (yi < endy)
|
||||
{
|
||||
lerp = f & 0xFFFF;
|
||||
if (yi != oldy)
|
||||
{
|
||||
inrow = (byte *)indata + inwidth3*yi;
|
||||
if (yi == oldy+1)
|
||||
memcpy(row1, row2, outwidth3);
|
||||
else
|
||||
R_ResampleTextureLerpLine (inrow, row1, inwidth, outwidth, bytesperpixel);
|
||||
inrow = (byte *)indata;
|
||||
oldy = 0;
|
||||
R_ResampleTextureLerpLine( inrow, row1, inwidth, outwidth, bytesperpixel );
|
||||
R_ResampleTextureLerpLine( inrow + inwidth3, row2, inwidth, outwidth, bytesperpixel );
|
||||
for ( i = 0, f = 0; i < outheight; i++,f += fstep )
|
||||
{
|
||||
yi = f >> 16;
|
||||
if ( yi < endy ) {
|
||||
lerp = f & 0xFFFF;
|
||||
if ( yi != oldy ) {
|
||||
inrow = (byte *)indata + inwidth3 * yi;
|
||||
if ( yi == oldy + 1 ) {
|
||||
memcpy( row1, row2, outwidth3 );
|
||||
}
|
||||
else{
|
||||
R_ResampleTextureLerpLine( inrow, row1, inwidth, outwidth, bytesperpixel );
|
||||
}
|
||||
|
||||
R_ResampleTextureLerpLine (inrow + inwidth3, row2, inwidth, outwidth, bytesperpixel);
|
||||
oldy = yi;
|
||||
}
|
||||
j = outwidth - 4;
|
||||
while(j >= 0)
|
||||
{
|
||||
LERPBYTE( 0);
|
||||
LERPBYTE( 1);
|
||||
LERPBYTE( 2);
|
||||
LERPBYTE( 3);
|
||||
LERPBYTE( 4);
|
||||
LERPBYTE( 5);
|
||||
LERPBYTE( 6);
|
||||
LERPBYTE( 7);
|
||||
LERPBYTE( 8);
|
||||
LERPBYTE( 9);
|
||||
LERPBYTE(10);
|
||||
LERPBYTE(11);
|
||||
out += 12;
|
||||
row1 += 12;
|
||||
row2 += 12;
|
||||
j -= 4;
|
||||
}
|
||||
if (j & 2)
|
||||
{
|
||||
LERPBYTE( 0);
|
||||
LERPBYTE( 1);
|
||||
LERPBYTE( 2);
|
||||
LERPBYTE( 3);
|
||||
LERPBYTE( 4);
|
||||
LERPBYTE( 5);
|
||||
out += 6;
|
||||
row1 += 6;
|
||||
row2 += 6;
|
||||
}
|
||||
if (j & 1)
|
||||
{
|
||||
LERPBYTE( 0);
|
||||
LERPBYTE( 1);
|
||||
LERPBYTE( 2);
|
||||
out += 3;
|
||||
row1 += 3;
|
||||
row2 += 3;
|
||||
}
|
||||
row1 -= outwidth3;
|
||||
row2 -= outwidth3;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (yi != oldy)
|
||||
{
|
||||
inrow = (byte *)indata + inwidth3*yi;
|
||||
if (yi == oldy+1)
|
||||
memcpy(row1, row2, outwidth3);
|
||||
else
|
||||
R_ResampleTextureLerpLine (inrow, row1, inwidth, outwidth, bytesperpixel);
|
||||
R_ResampleTextureLerpLine( inrow + inwidth3, row2, inwidth, outwidth, bytesperpixel );
|
||||
oldy = yi;
|
||||
}
|
||||
j = outwidth - 4;
|
||||
while ( j >= 0 )
|
||||
{
|
||||
LERPBYTE( 0 );
|
||||
LERPBYTE( 1 );
|
||||
LERPBYTE( 2 );
|
||||
LERPBYTE( 3 );
|
||||
LERPBYTE( 4 );
|
||||
LERPBYTE( 5 );
|
||||
LERPBYTE( 6 );
|
||||
LERPBYTE( 7 );
|
||||
LERPBYTE( 8 );
|
||||
LERPBYTE( 9 );
|
||||
LERPBYTE( 10 );
|
||||
LERPBYTE( 11 );
|
||||
out += 12;
|
||||
row1 += 12;
|
||||
row2 += 12;
|
||||
j -= 4;
|
||||
}
|
||||
if ( j & 2 ) {
|
||||
LERPBYTE( 0 );
|
||||
LERPBYTE( 1 );
|
||||
LERPBYTE( 2 );
|
||||
LERPBYTE( 3 );
|
||||
LERPBYTE( 4 );
|
||||
LERPBYTE( 5 );
|
||||
out += 6;
|
||||
row1 += 6;
|
||||
row2 += 6;
|
||||
}
|
||||
if ( j & 1 ) {
|
||||
LERPBYTE( 0 );
|
||||
LERPBYTE( 1 );
|
||||
LERPBYTE( 2 );
|
||||
out += 3;
|
||||
row1 += 3;
|
||||
row2 += 3;
|
||||
}
|
||||
row1 -= outwidth3;
|
||||
row2 -= outwidth3;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( yi != oldy ) {
|
||||
inrow = (byte *)indata + inwidth3 * yi;
|
||||
if ( yi == oldy + 1 ) {
|
||||
memcpy( row1, row2, outwidth3 );
|
||||
}
|
||||
else{
|
||||
R_ResampleTextureLerpLine( inrow, row1, inwidth, outwidth, bytesperpixel );
|
||||
}
|
||||
|
||||
oldy = yi;
|
||||
}
|
||||
memcpy(out, row1, outwidth3);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
globalOutputStream() << "R_ResampleTexture: unsupported bytesperpixel " << bytesperpixel << "\n";
|
||||
}
|
||||
oldy = yi;
|
||||
}
|
||||
memcpy( out, row1, outwidth3 );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
globalOutputStream() << "R_ResampleTexture: unsupported bytesperpixel " << bytesperpixel << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
// in can be the same as out
|
||||
void GL_MipReduce(byte *in, byte *out, int width, int height, int destwidth, int destheight)
|
||||
{
|
||||
int x, y, width2, height2, nextrow;
|
||||
if (width > destwidth)
|
||||
{
|
||||
if (height > destheight)
|
||||
{
|
||||
// reduce both
|
||||
width2 = width >> 1;
|
||||
height2 = height >> 1;
|
||||
nextrow = width << 2;
|
||||
for (y = 0;y < height2;y++)
|
||||
{
|
||||
for (x = 0;x < width2;x++)
|
||||
{
|
||||
out[0] = (byte) ((in[0] + in[4] + in[nextrow ] + in[nextrow+4]) >> 2);
|
||||
out[1] = (byte) ((in[1] + in[5] + in[nextrow+1] + in[nextrow+5]) >> 2);
|
||||
out[2] = (byte) ((in[2] + in[6] + in[nextrow+2] + in[nextrow+6]) >> 2);
|
||||
out[3] = (byte) ((in[3] + in[7] + in[nextrow+3] + in[nextrow+7]) >> 2);
|
||||
out += 4;
|
||||
in += 8;
|
||||
}
|
||||
in += nextrow; // skip a line
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// reduce width
|
||||
width2 = width >> 1;
|
||||
for (y = 0;y < height;y++)
|
||||
{
|
||||
for (x = 0;x < width2;x++)
|
||||
{
|
||||
out[0] = (byte) ((in[0] + in[4]) >> 1);
|
||||
out[1] = (byte) ((in[1] + in[5]) >> 1);
|
||||
out[2] = (byte) ((in[2] + in[6]) >> 1);
|
||||
out[3] = (byte) ((in[3] + in[7]) >> 1);
|
||||
out += 4;
|
||||
in += 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (height > destheight)
|
||||
{
|
||||
// reduce height
|
||||
height2 = height >> 1;
|
||||
nextrow = width << 2;
|
||||
for (y = 0;y < height2;y++)
|
||||
{
|
||||
for (x = 0;x < width;x++)
|
||||
{
|
||||
out[0] = (byte) ((in[0] + in[nextrow ]) >> 1);
|
||||
out[1] = (byte) ((in[1] + in[nextrow+1]) >> 1);
|
||||
out[2] = (byte) ((in[2] + in[nextrow+2]) >> 1);
|
||||
out[3] = (byte) ((in[3] + in[nextrow+3]) >> 1);
|
||||
out += 4;
|
||||
in += 4;
|
||||
}
|
||||
in += nextrow; // skip a line
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
globalOutputStream() << "GL_MipReduce: desired size already achieved\n";
|
||||
}
|
||||
}
|
||||
void GL_MipReduce( byte *in, byte *out, int width, int height, int destwidth, int destheight ){
|
||||
int x, y, width2, height2, nextrow;
|
||||
if ( width > destwidth ) {
|
||||
if ( height > destheight ) {
|
||||
// reduce both
|
||||
width2 = width >> 1;
|
||||
height2 = height >> 1;
|
||||
nextrow = width << 2;
|
||||
for ( y = 0; y < height2; y++ )
|
||||
{
|
||||
for ( x = 0; x < width2; x++ )
|
||||
{
|
||||
out[0] = (byte) ( ( in[0] + in[4] + in[nextrow ] + in[nextrow + 4] ) >> 2 );
|
||||
out[1] = (byte) ( ( in[1] + in[5] + in[nextrow + 1] + in[nextrow + 5] ) >> 2 );
|
||||
out[2] = (byte) ( ( in[2] + in[6] + in[nextrow + 2] + in[nextrow + 6] ) >> 2 );
|
||||
out[3] = (byte) ( ( in[3] + in[7] + in[nextrow + 3] + in[nextrow + 7] ) >> 2 );
|
||||
out += 4;
|
||||
in += 8;
|
||||
}
|
||||
in += nextrow; // skip a line
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// reduce width
|
||||
width2 = width >> 1;
|
||||
for ( y = 0; y < height; y++ )
|
||||
{
|
||||
for ( x = 0; x < width2; x++ )
|
||||
{
|
||||
out[0] = (byte) ( ( in[0] + in[4] ) >> 1 );
|
||||
out[1] = (byte) ( ( in[1] + in[5] ) >> 1 );
|
||||
out[2] = (byte) ( ( in[2] + in[6] ) >> 1 );
|
||||
out[3] = (byte) ( ( in[3] + in[7] ) >> 1 );
|
||||
out += 4;
|
||||
in += 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( height > destheight ) {
|
||||
// reduce height
|
||||
height2 = height >> 1;
|
||||
nextrow = width << 2;
|
||||
for ( y = 0; y < height2; y++ )
|
||||
{
|
||||
for ( x = 0; x < width; x++ )
|
||||
{
|
||||
out[0] = (byte) ( ( in[0] + in[nextrow ] ) >> 1 );
|
||||
out[1] = (byte) ( ( in[1] + in[nextrow + 1] ) >> 1 );
|
||||
out[2] = (byte) ( ( in[2] + in[nextrow + 2] ) >> 1 );
|
||||
out[3] = (byte) ( ( in[3] + in[nextrow + 3] ) >> 1 );
|
||||
out += 4;
|
||||
in += 4;
|
||||
}
|
||||
in += nextrow; // skip a line
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
globalOutputStream() << "GL_MipReduce: desired size already achieved\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user