wined3d: Use draw_textured_quad in BltOverride.
This commit is contained in:
parent
4bd627cc7f
commit
fd99ab78c2
|
@ -3964,7 +3964,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const
|
||||||
return WINED3D_OK;
|
return WINED3D_OK;
|
||||||
} else if(Src) {
|
} else if(Src) {
|
||||||
/* Blit from offscreen surface to render target */
|
/* Blit from offscreen surface to render target */
|
||||||
float glTexCoord[4];
|
|
||||||
DWORD oldCKeyFlags = Src->CKeyFlags;
|
DWORD oldCKeyFlags = Src->CKeyFlags;
|
||||||
WINEDDCOLORKEY oldBltCKey = Src->SrcBltCKey;
|
WINEDDCOLORKEY oldBltCKey = Src->SrcBltCKey;
|
||||||
struct wined3d_context *context;
|
struct wined3d_context *context;
|
||||||
|
@ -4014,14 +4013,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const
|
||||||
return WINED3D_OK;
|
return WINED3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!CalculateTexRect(Src, &SourceRectangle, glTexCoord)) {
|
|
||||||
/* Fall back to software */
|
|
||||||
WARN("(%p) Source texture area (%d,%d)-(%d,%d) is too big\n", Src,
|
|
||||||
SourceRectangle.left, SourceRectangle.top,
|
|
||||||
SourceRectangle.right, SourceRectangle.bottom);
|
|
||||||
return WINED3DERR_INVALIDCALL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Color keying: Check if we have to do a color keyed blt,
|
/* Color keying: Check if we have to do a color keyed blt,
|
||||||
* and if not check if a color key is activated.
|
* and if not check if a color key is activated.
|
||||||
*
|
*
|
||||||
|
@ -4083,22 +4074,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const
|
||||||
|
|
||||||
ENTER_GL();
|
ENTER_GL();
|
||||||
|
|
||||||
/* Bind the texture */
|
|
||||||
glBindTexture(Src->texture_target, Src->texture_name);
|
|
||||||
checkGLcall("glBindTexture");
|
|
||||||
|
|
||||||
/* Filtering for StretchRect */
|
|
||||||
glTexParameteri(Src->texture_target, GL_TEXTURE_MAG_FILTER,
|
|
||||||
wined3d_gl_mag_filter(magLookup, Filter));
|
|
||||||
checkGLcall("glTexParameteri");
|
|
||||||
glTexParameteri(Src->texture_target, GL_TEXTURE_MIN_FILTER,
|
|
||||||
wined3d_gl_min_mip_filter(minMipLookup, Filter, WINED3DTEXF_NONE));
|
|
||||||
checkGLcall("glTexParameteri");
|
|
||||||
glTexParameteri(Src->texture_target, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
|
||||||
glTexParameteri(Src->texture_target, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
|
||||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
|
|
||||||
checkGLcall("glTexEnvi");
|
|
||||||
|
|
||||||
/* This is for color keying */
|
/* This is for color keying */
|
||||||
if(Flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) {
|
if(Flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) {
|
||||||
glEnable(GL_ALPHA_TEST);
|
glEnable(GL_ALPHA_TEST);
|
||||||
|
@ -4119,32 +4094,13 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const
|
||||||
|
|
||||||
/* Draw a textured quad
|
/* Draw a textured quad
|
||||||
*/
|
*/
|
||||||
glBegin(GL_QUADS);
|
draw_textured_quad(Src, &SourceRectangle, (RECT*)&rect, Filter);
|
||||||
|
|
||||||
glColor3f(1.0f, 1.0f, 1.0f);
|
|
||||||
glTexCoord2f(glTexCoord[0], glTexCoord[2]);
|
|
||||||
glVertex3f(rect.x1, rect.y1, 0.0f);
|
|
||||||
|
|
||||||
glTexCoord2f(glTexCoord[0], glTexCoord[3]);
|
|
||||||
glVertex3f(rect.x1, rect.y2, 0.0f);
|
|
||||||
|
|
||||||
glTexCoord2f(glTexCoord[1], glTexCoord[3]);
|
|
||||||
glVertex3f(rect.x2, rect.y2, 0.0f);
|
|
||||||
|
|
||||||
glTexCoord2f(glTexCoord[1], glTexCoord[2]);
|
|
||||||
glVertex3f(rect.x2, rect.y1, 0.0f);
|
|
||||||
|
|
||||||
glEnd();
|
|
||||||
checkGLcall("glEnd");
|
|
||||||
|
|
||||||
if(Flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) {
|
if(Flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) {
|
||||||
glDisable(GL_ALPHA_TEST);
|
glDisable(GL_ALPHA_TEST);
|
||||||
checkGLcall("glDisable(GL_ALPHA_TEST)");
|
checkGLcall("glDisable(GL_ALPHA_TEST)");
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindTexture(Src->texture_target, 0);
|
|
||||||
checkGLcall("glBindTexture(Src->texture_target, 0)");
|
|
||||||
|
|
||||||
/* Restore the color key parameters */
|
/* Restore the color key parameters */
|
||||||
Src->CKeyFlags = oldCKeyFlags;
|
Src->CKeyFlags = oldCKeyFlags;
|
||||||
Src->SrcBltCKey = oldBltCKey;
|
Src->SrcBltCKey = oldBltCKey;
|
||||||
|
|
|
@ -2258,56 +2258,6 @@ DWORD get_flexible_vertex_size(DWORD d3dvtVertexType) {
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* CalculateTexRect
|
|
||||||
*
|
|
||||||
* Calculates the dimensions of the opengl texture used for blits.
|
|
||||||
* Handled oversized opengl textures and updates the source rectangle
|
|
||||||
* accordingly
|
|
||||||
*
|
|
||||||
* Params:
|
|
||||||
* This: Surface to operate on
|
|
||||||
* Rect: Requested rectangle
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* TRUE if the texture part can be loaded,
|
|
||||||
* FALSE otherwise
|
|
||||||
*
|
|
||||||
*********************************************************************/
|
|
||||||
BOOL CalculateTexRect(IWineD3DSurfaceImpl *This, RECT *Rect, float glTexCoord[4])
|
|
||||||
{
|
|
||||||
int x1 = Rect->left, x2 = Rect->right;
|
|
||||||
int y1 = Rect->top, y2 = Rect->bottom;
|
|
||||||
|
|
||||||
TRACE("(%p)->(%d,%d)-(%d,%d)\n", This,
|
|
||||||
Rect->left, Rect->top, Rect->right, Rect->bottom);
|
|
||||||
|
|
||||||
/* The sizes might be reversed */
|
|
||||||
if(Rect->left > Rect->right) {
|
|
||||||
x1 = Rect->right;
|
|
||||||
x2 = Rect->left;
|
|
||||||
}
|
|
||||||
if(Rect->top > Rect->bottom) {
|
|
||||||
y1 = Rect->bottom;
|
|
||||||
y2 = Rect->top;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Which rect from the texture do I need? */
|
|
||||||
if (This->texture_target == GL_TEXTURE_RECTANGLE_ARB)
|
|
||||||
{
|
|
||||||
glTexCoord[0] = (float) Rect->left;
|
|
||||||
glTexCoord[2] = (float) Rect->top;
|
|
||||||
glTexCoord[1] = (float) Rect->right;
|
|
||||||
glTexCoord[3] = (float) Rect->bottom;
|
|
||||||
} else {
|
|
||||||
glTexCoord[0] = (float) Rect->left / (float) This->pow2Width;
|
|
||||||
glTexCoord[2] = (float) Rect->top / (float) This->pow2Height;
|
|
||||||
glTexCoord[1] = (float) Rect->right / (float) This->pow2Width;
|
|
||||||
glTexCoord[3] = (float) Rect->bottom / (float) This->pow2Height;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_ffp_frag_op(IWineD3DStateBlockImpl *stateblock, struct ffp_frag_settings *settings, BOOL ignore_textype) {
|
void gen_ffp_frag_op(IWineD3DStateBlockImpl *stateblock, struct ffp_frag_settings *settings, BOOL ignore_textype) {
|
||||||
#define ARG1 0x01
|
#define ARG1 0x01
|
||||||
#define ARG2 0x02
|
#define ARG2 0x02
|
||||||
|
|
|
@ -2202,8 +2202,6 @@ void flip_surface(IWineD3DSurfaceImpl *front, IWineD3DSurfaceImpl *back) DECLSPE
|
||||||
SFLAG_DS_OFFSCREEN)
|
SFLAG_DS_OFFSCREEN)
|
||||||
#define SFLAG_DS_DISCARDED SFLAG_DS_LOCATIONS
|
#define SFLAG_DS_DISCARDED SFLAG_DS_LOCATIONS
|
||||||
|
|
||||||
BOOL CalculateTexRect(IWineD3DSurfaceImpl *This, RECT *Rect, float glTexCoord[4]) DECLSPEC_HIDDEN;
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NO_CONVERSION,
|
NO_CONVERSION,
|
||||||
CONVERT_PALETTED,
|
CONVERT_PALETTED,
|
||||||
|
|
Loading…
Reference in New Issue