theoretically added texture matrices. untested.
authorJohn Tsiombikas <nuclear@member.fsf.org>
Sat, 1 Dec 2018 05:54:15 +0000 (07:54 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Sat, 1 Dec 2018 05:54:15 +0000 (07:54 +0200)
src/3dgfx.c
src/3dgfx.h

index c852736..083f507 100644 (file)
@@ -442,6 +442,14 @@ void g3d_draw_indexed(int prim, const struct g3d_vertex *varr, int varr_size,
                                v[i].u = v[i].nx * 0.5 + 0.5;
                                v[i].v = v[i].ny * 0.5 + 0.5;
                        }
+                       if(st->opt & G3D_TEXTURE_MAT) {
+                               float *mat = st->mat[G3D_TEXTURE][st->mtop[G3D_TEXTURE]];
+                               float x = mat[0] * v[i].u + mat[4] * v[i].v + mat[12];
+                               float y = mat[1] * v[i].u + mat[5] * v[i].v + mat[13];
+                               float w = mat[3] * v[i].u + mat[7] * v[i].v + mat[15];
+                               v[i].u = x / w;
+                               v[i].v = y / w;
+                       }
                        xform4_vec3(st->mat[G3D_PROJECTION][ptop], &v[i].x);
                }
 
index 366912f..363a1b2 100644 (file)
@@ -26,7 +26,7 @@ enum {
        G3D_LIGHT1              = 0x000010,
        G3D_LIGHT2              = 0x000020,
        G3D_LIGHT3              = 0x000040,
-       G3D_TEXTURE             = 0x000080,
+       G3D_TEXTURE_2D  = 0x000080,     /* XXX doesn't affect anything, use g3d_polygon_mode */
        G3D_BLEND               = 0x000100,
        G3D_TEXTURE_GEN = 0x000200,
        G3D_CLIP_FRUSTUM = 0x000800,/* when disabled, don't clip against the frustum */
@@ -35,6 +35,8 @@ enum {
        G3D_CLIP_PLANE2 = 0x004000,
        G3D_CLIP_PLANE3 = 0x008000,
 
+       G3D_TEXTURE_MAT = 0x010000,
+
        G3D_ALL = 0x7fffffff
 };
 
@@ -54,6 +56,7 @@ enum {
 enum {
        G3D_MODELVIEW,
        G3D_PROJECTION,
+       G3D_TEXTURE,
 
        G3D_NUM_MATRICES
 };