mirror of
https://github.com/mpv-player/mpv
synced 2024-12-14 19:05:33 +00:00
Remove overly complex and unused per-subtexture "dirty" handling
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23669 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
92542f710b
commit
d3bc927fc4
@ -68,6 +68,7 @@ static int int_pause;
|
||||
static uint32_t texture_width;
|
||||
static uint32_t texture_height;
|
||||
static int texnumx, texnumy, raw_line_len;
|
||||
static int texdirty;
|
||||
static struct TexSquare * texgrid = NULL;
|
||||
static GLuint fragprog;
|
||||
static GLuint lookupTex;
|
||||
@ -94,8 +95,6 @@ struct TexSquare
|
||||
GLuint texobj;
|
||||
GLuint uvtexobjs[2];
|
||||
GLfloat fx, fy, fw, fh;
|
||||
int isDirty;
|
||||
int dirtyXoff, dirtyYoff, dirtyWidth, dirtyHeight;
|
||||
};
|
||||
|
||||
static GLint getInternalFormat(void)
|
||||
@ -246,10 +245,8 @@ static int initTextures(void)
|
||||
tsq->fw = texpercx;
|
||||
tsq->fh = texpercy;
|
||||
|
||||
tsq->isDirty=GL_FALSE;
|
||||
tsq->texobj=0;
|
||||
tsq->uvtexobjs[0] = tsq->uvtexobjs[1] = 0;
|
||||
tsq->dirtyXoff=0; tsq->dirtyYoff=0; tsq->dirtyWidth=-1; tsq->dirtyHeight=-1;
|
||||
|
||||
glGenTextures (1, &(tsq->texobj));
|
||||
|
||||
@ -305,68 +302,6 @@ static void resetTexturePointers(unsigned char *imageSource)
|
||||
} /* for all texnumy */
|
||||
}
|
||||
|
||||
static void setupTextureDirtyArea(int x, int y, int w,int h)
|
||||
{
|
||||
struct TexSquare *square;
|
||||
int xi, yi, wd, ht, wh, hh;
|
||||
int wdecr, hdecr, xh, yh;
|
||||
|
||||
wdecr=w; hdecr=h; xh=x; yh=y;
|
||||
|
||||
for (yi = 0; hdecr>0 && yi < texnumy; yi++)
|
||||
{
|
||||
if (yi < texnumy - 1)
|
||||
ht = texture_height;
|
||||
else
|
||||
ht = image_height - texture_height * yi;
|
||||
|
||||
xh =x;
|
||||
wdecr =w;
|
||||
|
||||
for (xi = 0; wdecr>0 && xi < texnumx; xi++)
|
||||
{
|
||||
square = texgrid + yi * texnumx + xi;
|
||||
|
||||
if (xi < texnumx - 1)
|
||||
wd = texture_width;
|
||||
else
|
||||
wd = image_width - texture_width * xi;
|
||||
|
||||
if( 0 <= xh && xh < wd &&
|
||||
0 <= yh && yh < ht
|
||||
)
|
||||
{
|
||||
square->isDirty=GL_TRUE;
|
||||
|
||||
wh=(wdecr<wd)?wdecr:wd-xh;
|
||||
if(wh<0) wh=0;
|
||||
|
||||
hh=(hdecr<ht)?hdecr:ht-yh;
|
||||
if(hh<0) hh=0;
|
||||
|
||||
if(xh<square->dirtyXoff)
|
||||
square->dirtyXoff=xh;
|
||||
|
||||
if(yh<square->dirtyYoff)
|
||||
square->dirtyYoff=yh;
|
||||
|
||||
square->dirtyWidth = wd-square->dirtyXoff;
|
||||
square->dirtyHeight = ht-square->dirtyYoff;
|
||||
|
||||
wdecr-=wh;
|
||||
|
||||
if ( xi == texnumx - 1 )
|
||||
hdecr-=hh;
|
||||
}
|
||||
|
||||
xh-=wd;
|
||||
if(xh<0) xh=0;
|
||||
}
|
||||
yh-=ht;
|
||||
if(yh<0) yh=0;
|
||||
}
|
||||
}
|
||||
|
||||
static void gl_set_bilinear (int val)
|
||||
{
|
||||
int x, y;
|
||||
@ -455,8 +390,14 @@ static void drawTextureDisplay (void)
|
||||
glEnableYUVConversion(GL_TEXTURE_2D, use_yuv);
|
||||
for (y = 0; y < texnumy; y++)
|
||||
{
|
||||
int thish = texture_height;
|
||||
if (y == texnumy - 1 && image_height % texture_height)
|
||||
thish = image_height % texture_height;
|
||||
for (x = 0; x < texnumx; x++)
|
||||
{
|
||||
int thisw = texture_width;
|
||||
if (x == texnumx - 1 && image_width % texture_width)
|
||||
thisw = image_width % texture_width;
|
||||
glBindTexture (GL_TEXTURE_2D, square->texobj);
|
||||
if (image_format == IMGFMT_YV12) {
|
||||
ActiveTexture(GL_TEXTURE1);
|
||||
@ -466,21 +407,14 @@ static void drawTextureDisplay (void)
|
||||
ActiveTexture(GL_TEXTURE0);
|
||||
}
|
||||
|
||||
if(square->isDirty)
|
||||
{
|
||||
if (texdirty) {
|
||||
glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type,
|
||||
square->texture, image_width * image_bytes,
|
||||
square->dirtyXoff, square->dirtyYoff,
|
||||
square->dirtyWidth, square->dirtyHeight,
|
||||
0, 0,
|
||||
thisw, thish,
|
||||
0);
|
||||
|
||||
square->isDirty=GL_FALSE;
|
||||
square->dirtyXoff=0; square->dirtyYoff=0; square->dirtyWidth=-1; square->dirtyHeight=-1;
|
||||
}
|
||||
|
||||
mp_msg (MSGT_VO, MSGL_DBG2, "[gl2] glTexSubImage2D texnum x=%d, y=%d, %d/%d - %d/%d\n",
|
||||
x, y, square->dirtyXoff, square->dirtyYoff, square->dirtyWidth, square->dirtyHeight);
|
||||
|
||||
glDrawTex(square->fx, square->fy, square->fw, square->fh,
|
||||
0, 0, texture_width, texture_height,
|
||||
texture_width, texture_height,
|
||||
@ -490,6 +424,7 @@ static void drawTextureDisplay (void)
|
||||
} /* for all texnumy */
|
||||
if (image_format == IMGFMT_YV12)
|
||||
glDisableYUVConversion(GL_TEXTURE_2D, use_yuv);
|
||||
texdirty = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -947,7 +882,7 @@ draw_frame(uint8_t *src[])
|
||||
}
|
||||
ImageData=(unsigned char *)src[0];
|
||||
resetTexturePointers(ImageData);
|
||||
setupTextureDirtyArea(0, 0, image_width, image_height);
|
||||
texdirty = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user