wined3d: Cleanup GetSrcAndOpFromValue().
- Cleanup GetSrcAndOpFromValue(). - Use naming more consistent with the rest of the file.
This commit is contained in:
parent
a28ebdf7d4
commit
405e11ea62
|
@ -399,6 +399,44 @@ GLenum StencilOp(DWORD op) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void get_src_and_opr(DWORD arg, BOOL is_alpha, GLenum* source, GLenum* operand) {
|
||||||
|
/* The D3DTA_ALPHAREPLICATE flag specifies the alpha component of the
|
||||||
|
* input should be used for all input components. The D3DTA_COMPLEMENT
|
||||||
|
* flag specifies the complement of the input should be used. */
|
||||||
|
BOOL from_alpha = is_alpha || arg & D3DTA_ALPHAREPLICATE;
|
||||||
|
BOOL complement = arg & D3DTA_COMPLEMENT;
|
||||||
|
|
||||||
|
/* Calculate the operand */
|
||||||
|
if (complement) {
|
||||||
|
if (from_alpha) *operand = GL_ONE_MINUS_SRC_ALPHA;
|
||||||
|
else *operand = GL_ONE_MINUS_SRC_COLOR;
|
||||||
|
} else {
|
||||||
|
if (from_alpha) *operand = GL_SRC_ALPHA;
|
||||||
|
else *operand = GL_SRC_COLOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate the source */
|
||||||
|
switch (arg & D3DTA_SELECTMASK) {
|
||||||
|
case D3DTA_CURRENT: *source = GL_PREVIOUS_EXT; break;
|
||||||
|
case D3DTA_DIFFUSE: *source = GL_PRIMARY_COLOR_EXT; break;
|
||||||
|
case D3DTA_TEXTURE: *source = GL_TEXTURE; break;
|
||||||
|
case D3DTA_TFACTOR: *source = GL_CONSTANT_EXT; break;
|
||||||
|
case D3DTA_SPECULAR:
|
||||||
|
/*
|
||||||
|
* According to the GL_ARB_texture_env_combine specs, SPECULAR is
|
||||||
|
* 'Secondary color' and isn't supported until base GL supports it
|
||||||
|
* There is no concept of temp registers as far as I can tell
|
||||||
|
*/
|
||||||
|
FIXME("Unhandled texture arg D3DTA_SPECULAR\n");
|
||||||
|
*source = GL_TEXTURE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
FIXME("Unrecognized texture arg %#lx\n", arg);
|
||||||
|
*source = GL_TEXTURE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Set texture operations up - The following avoids lots of ifdefs in this routine!*/
|
/* Set texture operations up - The following avoids lots of ifdefs in this routine!*/
|
||||||
#if defined (GL_VERSION_1_3)
|
#if defined (GL_VERSION_1_3)
|
||||||
# define useext(A) A
|
# define useext(A) A
|
||||||
|
@ -475,12 +513,12 @@ void set_tex_op(IWineD3DDevice *iface, BOOL isAlpha, int Stage, D3DTEXTUREOP op,
|
||||||
then the default argument is D3DTA_DIFFUSE.
|
then the default argument is D3DTA_DIFFUSE.
|
||||||
FIXME? If texture added/removed, may need to reset back as well? */
|
FIXME? If texture added/removed, may need to reset back as well? */
|
||||||
if (isAlpha && This->stateBlock->textures[Stage] == NULL && arg1 == D3DTA_TEXTURE) {
|
if (isAlpha && This->stateBlock->textures[Stage] == NULL && arg1 == D3DTA_TEXTURE) {
|
||||||
GetSrcAndOpFromValue(D3DTA_DIFFUSE, isAlpha, &src1, &opr1);
|
get_src_and_opr(D3DTA_DIFFUSE, isAlpha, &src1, &opr1);
|
||||||
} else {
|
} else {
|
||||||
GetSrcAndOpFromValue(arg1, isAlpha, &src1, &opr1);
|
get_src_and_opr(arg1, isAlpha, &src1, &opr1);
|
||||||
}
|
}
|
||||||
GetSrcAndOpFromValue(arg2, isAlpha, &src2, &opr2);
|
get_src_and_opr(arg2, isAlpha, &src2, &opr2);
|
||||||
GetSrcAndOpFromValue(arg3, isAlpha, &src3, &opr3);
|
get_src_and_opr(arg3, isAlpha, &src3, &opr3);
|
||||||
|
|
||||||
TRACE("ct(%x), 1:(%x,%x), 2:(%x,%x), 3:(%x,%x)\n", comb_target, src1, opr1, src2, opr2, src3, opr3);
|
TRACE("ct(%x), 1:(%x,%x), 2:(%x,%x), 3:(%x,%x)\n", comb_target, src1, opr1, src2, opr2, src3, opr3);
|
||||||
|
|
||||||
|
@ -1569,72 +1607,6 @@ void set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords)
|
||||||
checkGLcall("glLoadMatrixf(mat)");
|
checkGLcall("glLoadMatrixf(mat)");
|
||||||
}
|
}
|
||||||
|
|
||||||
void GetSrcAndOpFromValue(DWORD iValue, BOOL isAlphaArg, GLenum* source, GLenum* operand)
|
|
||||||
{
|
|
||||||
BOOL isAlphaReplicate = FALSE;
|
|
||||||
BOOL isComplement = FALSE;
|
|
||||||
|
|
||||||
*operand = GL_SRC_COLOR;
|
|
||||||
*source = GL_TEXTURE;
|
|
||||||
|
|
||||||
/* Catch alpha replicate */
|
|
||||||
if (iValue & D3DTA_ALPHAREPLICATE) {
|
|
||||||
iValue = iValue & ~D3DTA_ALPHAREPLICATE;
|
|
||||||
isAlphaReplicate = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Catch Complement */
|
|
||||||
if (iValue & D3DTA_COMPLEMENT) {
|
|
||||||
iValue = iValue & ~D3DTA_COMPLEMENT;
|
|
||||||
isComplement = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Calculate the operand */
|
|
||||||
if (isAlphaReplicate && !isComplement) {
|
|
||||||
*operand = GL_SRC_ALPHA;
|
|
||||||
} else if (isAlphaReplicate && isComplement) {
|
|
||||||
*operand = GL_ONE_MINUS_SRC_ALPHA;
|
|
||||||
} else if (isComplement) {
|
|
||||||
if (isAlphaArg) {
|
|
||||||
*operand = GL_ONE_MINUS_SRC_ALPHA;
|
|
||||||
} else {
|
|
||||||
*operand = GL_ONE_MINUS_SRC_COLOR;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (isAlphaArg) {
|
|
||||||
*operand = GL_SRC_ALPHA;
|
|
||||||
} else {
|
|
||||||
*operand = GL_SRC_COLOR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Calculate the source */
|
|
||||||
switch (iValue & D3DTA_SELECTMASK) {
|
|
||||||
case D3DTA_CURRENT: *source = GL_PREVIOUS_EXT;
|
|
||||||
break;
|
|
||||||
case D3DTA_DIFFUSE: *source = GL_PRIMARY_COLOR_EXT;
|
|
||||||
break;
|
|
||||||
case D3DTA_TEXTURE: *source = GL_TEXTURE;
|
|
||||||
break;
|
|
||||||
case D3DTA_TFACTOR: *source = GL_CONSTANT_EXT;
|
|
||||||
break;
|
|
||||||
case D3DTA_SPECULAR:
|
|
||||||
/*
|
|
||||||
* According to the GL_ARB_texture_env_combine specs, SPECULAR is
|
|
||||||
* 'Secondary color' and isn't supported until base GL supports it
|
|
||||||
* There is no concept of temp registers as far as I can tell
|
|
||||||
*/
|
|
||||||
FIXME("Unhandled texture arg D3DTA_SPECULAR\n");
|
|
||||||
*source = GL_TEXTURE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
FIXME("Unrecognized texture arg %ld\n", iValue);
|
|
||||||
*source = GL_TEXTURE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#define GLINFO_LOCATION ((IWineD3DImpl *)(This->wineD3D))->gl_info
|
#define GLINFO_LOCATION ((IWineD3DImpl *)(This->wineD3D))->gl_info
|
||||||
GLint D3DFmt2GLIntFmt(IWineD3DDeviceImpl* This, D3DFORMAT fmt) {
|
GLint D3DFmt2GLIntFmt(IWineD3DDeviceImpl* This, D3DFORMAT fmt) {
|
||||||
GLint retVal = 0;
|
GLint retVal = 0;
|
||||||
|
|
|
@ -1168,7 +1168,6 @@ const char* debug_d3dpool(WINED3DPOOL pool);
|
||||||
GLenum StencilOp(DWORD op);
|
GLenum StencilOp(DWORD op);
|
||||||
void set_tex_op(IWineD3DDevice *iface, BOOL isAlpha, int Stage, D3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3);
|
void set_tex_op(IWineD3DDevice *iface, BOOL isAlpha, int Stage, D3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3);
|
||||||
void set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords);
|
void set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords);
|
||||||
void GetSrcAndOpFromValue(DWORD iValue, BOOL isAlphaArg, GLenum* source, GLenum* operand);
|
|
||||||
|
|
||||||
SHORT D3DFmtGetBpp(IWineD3DDeviceImpl* This, D3DFORMAT fmt);
|
SHORT D3DFmtGetBpp(IWineD3DDeviceImpl* This, D3DFORMAT fmt);
|
||||||
GLenum D3DFmt2GLFmt(IWineD3DDeviceImpl* This, D3DFORMAT fmt);
|
GLenum D3DFmt2GLFmt(IWineD3DDeviceImpl* This, D3DFORMAT fmt);
|
||||||
|
|
Loading…
Reference in New Issue