summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland Scheidegger <rscheidegger@gmx.ch>2005-09-26 17:11:16 +0000
committerRoland Scheidegger <rscheidegger@gmx.ch>2005-09-26 17:11:16 +0000
commit84c9e671edcc1358307879491bddef9f7d96f14b (patch)
treecfcad5352fa888713088f8dafc5e35355ad4e82e
parentad271b8c98021dc82c0714d768a6642aee10794f (diff)
fix projective texturing for (swtcl) texture rectangles. Fix wrong argument order for texgen/texmat matrix multiplication.
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_state.c8
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_swtcl.c16
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 c9ad1c84b0..3c7767768b 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 410ec102f4..9045619187 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);
}