diff options
author | Roland Scheidegger <[email protected]> | 2005-09-26 17:11:16 +0000 |
---|---|---|
committer | Roland Scheidegger <[email protected]> | 2005-09-26 17:11:16 +0000 |
commit | 84c9e671edcc1358307879491bddef9f7d96f14b (patch) | |
tree | cfcad5352fa888713088f8dafc5e35355ad4e82e /src/mesa | |
parent | ad271b8c98021dc82c0714d768a6642aee10794f (diff) |
fix projective texturing for (swtcl) texture rectangles. Fix wrong argument order for texgen/texmat matrix multiplication.
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/radeon/radeon_state.c | 8 | ||||
-rw-r--r-- | src/mesa/drivers/dri/radeon/radeon_swtcl.c | 16 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/mesa/drivers/dri/radeon/radeon_state.c b/src/mesa/drivers/dri/radeon/radeon_state.c index c9ad1c84b0a..3c7767768b2 100644 --- a/src/mesa/drivers/dri/radeon/radeon_state.c +++ b/src/mesa/drivers/dri/radeon/radeon_state.c @@ -2073,11 +2073,11 @@ static void update_texturematrix( GLcontext *ctx ) /* Need to preconcatenate any active texgen * obj/eyeplane matrices: */ - _math_matrix_mul_matrix( &rmesa->tmpmat, - &rmesa->TexGenMatrix[unit], - ctx->TextureMatrixStack[unit].Top ); + _math_matrix_mul_matrix( &rmesa->tmpmat, + ctx->TextureMatrixStack[unit].Top, + &rmesa->TexGenMatrix[unit] ); upload_matrix( rmesa, rmesa->tmpmat.m, TEXMAT_0+unit ); - } + } else { rmesa->TexMatEnabled |= (RADEON_TEXGEN_INPUT_TEXCOORD_0+unit) << inputshift; diff --git a/src/mesa/drivers/dri/radeon/radeon_swtcl.c b/src/mesa/drivers/dri/radeon/radeon_swtcl.c index 410ec102f47..90456191878 100644 --- a/src/mesa/drivers/dri/radeon/radeon_swtcl.c +++ b/src/mesa/drivers/dri/radeon/radeon_swtcl.c @@ -499,10 +499,20 @@ static GLboolean run_texrect_stage( GLcontext *ctx, GLint instride = VB->TexCoordPtr[i]->stride; GLfloat (*out)[4] = store->texcoord[i].data; GLint j; - + + store->texcoord[i].size = VB->TexCoordPtr[i]->size; for (j = 0 ; j < VB->Count ; j++) { - out[j][0] = in[0] * iw; - out[j][1] = in[1] * ih; + switch (VB->TexCoordPtr[i]->size) { + case 4: + out[j][3] = in[3]; + /* fallthrough */ + case 3: + out[j][2] = in[2]; + /* fallthrough */ + default: + out[j][0] = in[0] * iw; + out[j][1] = in[1] * ih; + } in = (GLfloat *)((GLubyte *)in + instride); } |