]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_models.c
fractalnoise enhancements, better smoke textures, better bubble explosions, blood...
[xonotic/darkplaces.git] / gl_models.c
index a3b25d7b06b1fb335621688e540a1686a609eae3..c46691e008a60c4416f85487bdd9e7e3a97b31c4 100644 (file)
@@ -15,7 +15,7 @@ void makechrometexture()
        byte noise[64*64];
        byte data[64*64][4];
 
-       fractalnoise(noise, 64);
+       fractalnoise(noise, 64, 16);
 
        // convert to RGBA data
        for (i = 0;i < 64*64;i++)
@@ -151,6 +151,8 @@ extern qboolean lighthalf;
 void GL_DrawModelMesh(int skin, byte *colors, maliashdr_t *maliashdr)
 {
        int i;
+       if (!r_render.value)
+               return;
        glBindTexture(GL_TEXTURE_2D, skin);
        if (!colors)
        {
@@ -161,8 +163,6 @@ void GL_DrawModelMesh(int skin, byte *colors, maliashdr_t *maliashdr)
        }
        if (gl_vertexarrays.value)
        {
-//             qglVertexPointer(3, GL_FLOAT, 0, aliasvert);
-//             glEnableClientState(GL_VERTEX_ARRAY);
                if (colors)
                {
                        qglColorPointer(4, GL_UNSIGNED_BYTE, 0, colors);
@@ -175,23 +175,9 @@ void GL_DrawModelMesh(int skin, byte *colors, maliashdr_t *maliashdr)
                qglDrawElements(GL_TRIANGLES, maliashdr->numtris * 3, GL_UNSIGNED_SHORT, (void *)((int) maliashdr + maliashdr->tridata));
 
                glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-               /*
-               // draw the front faces
-               qglTexCoordPointer(2, GL_FLOAT, 0, (void *)((int) paliashdr->texcoords + (int) paliashdr));
-               glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-               qglDrawElements(GL_TRIANGLES, paliashdr->frontfaces * 3, GL_UNSIGNED_SHORT, (void *)((int) paliashdr->vertindices + (int) paliashdr));
-               glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-
-               // draw the back faces
-               qglTexCoordPointer(2, GL_FLOAT, 0, (void *)((int) paliashdr->texcoords + sizeof(float[2]) * paliashdr->numverts + (int) paliashdr));
-               glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-               qglDrawElements(GL_TRIANGLES, paliashdr->backfaces * 3, GL_UNSIGNED_SHORT, (void *)((int) paliashdr->vertindices + sizeof(unsigned short[3]) * paliashdr->frontfaces + (int) paliashdr));
-               glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-               */
 
                if (colors)
                        glDisableClientState(GL_COLOR_ARRAY);
-//             glDisableClientState(GL_VERTEX_ARRAY);
        }
        else
        {
@@ -209,65 +195,6 @@ void GL_DrawModelMesh(int skin, byte *colors, maliashdr_t *maliashdr)
                        glVertex3fv(&aliasvert[index*3]);
                }
                glEnd();
-               /*
-               in = (void *)((int) paliashdr->vertindices + (int) paliashdr);
-               glBegin(GL_TRIANGLES);
-               // draw the front faces
-               tex = (void *)((int) paliashdr->texcoords + (int) paliashdr);
-               //if (isG200)
-               //{
-                       for (i = 0;i < paliashdr->frontfaces * 3;i++)
-                       {
-                               index = *in++;
-                               glTexCoord2f(tex[index*2], tex[index*2+1]);
-                               if (colors)
-                                       glColor4f(colors[index*4] * (1.0f / 255.0f), colors[index*4+1] * (1.0f / 255.0f), colors[index*4+2] * (1.0f / 255.0f), colors[index*4+3] * (1.0f / 255.0f));
-                               glVertex3fv(&aliasvert[index*3]);
-                       }
-               */
-               /*
-               }
-               else
-               {
-                       for (i = 0;i < paliashdr->frontfaces * 3;i++)
-                       {
-                               index = *in++;
-                               glTexCoord2f(tex[index*2], tex[index*2+1]);
-                               glColor4ub(colors[index*4], colors[index*4+1], colors[index*4+2], colors[index*4+3]);
-                               glVertex3fv(&aliasvert[index*3]);
-                       }
-               }
-               */
-               /*
-               // draw the back faces
-               tex += 2 * paliashdr->numverts;
-               //if (isG200)
-               //{
-                       for (i = 0;i < paliashdr->backfaces * 3;i++)
-                       {
-                               index = *in++;
-                               glTexCoord2f(tex[index*2], tex[index*2+1]);
-                               if (colors)
-                                       glColor4f(colors[index*4] * (1.0f / 255.0f), colors[index*4+1] * (1.0f / 255.0f), colors[index*4+2] * (1.0f / 255.0f), colors[index*4+3] * (1.0f / 255.0f));
-                               glVertex3fv(&aliasvert[index*3]);
-                       }
-               */
-               /*
-               }
-               else
-               {
-                       for (i = 0;i < paliashdr->backfaces * 3;i++)
-                       {
-                               index = *in++;
-                               glTexCoord2f(tex[index*2], tex[index*2+1]);
-                               glColor4ub(colors[index*4], colors[index*4+1], colors[index*4+2], colors[index*4+3]);
-                               glVertex3fv(&aliasvert[index*3]);
-                       }
-               }
-               */
-               /*
-               glEnd();
-               */
        }
        // leave it in a state for additional passes
        glDepthMask(0);
@@ -330,14 +257,19 @@ void R_DrawAliasFrame (maliashdr_t *maliashdr, float alpha, vec3_t color, entity
        R_AliasLerpVerts(maliashdr->numverts, lerp, (trivert2 *)((int) maliashdr + maliashdr->posedata) + ent->draw_lastpose * maliashdr->numverts, maliashdr->scale, maliashdr->scale_origin, (trivert2 *)((int) maliashdr + maliashdr->posedata) + ent->draw_pose * maliashdr->numverts, maliashdr->scale, maliashdr->scale_origin);
 
        // prep the vertex array as early as possible
-       if (gl_vertexarrays.value)
+       if (r_render.value)
        {
-               qglVertexPointer(3, GL_FLOAT, 0, aliasvert);
-               glEnableClientState(GL_VERTEX_ARRAY);
+               if (gl_vertexarrays.value)
+               {
+                       qglVertexPointer(3, GL_FLOAT, 0, aliasvert);
+                       glEnableClientState(GL_VERTEX_ARRAY);
+               }
        }
 
        R_LightModel(maliashdr->numverts, org, color);
 
+       if (!r_render.value)
+               return;
        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
        glShadeModel(GL_SMOOTH);
        if (effects & EF_ADDITIVE)
@@ -406,10 +338,7 @@ void R_DrawAliasFrame (maliashdr_t *maliashdr, float alpha, vec3_t color, entity
 
                if (gl_vertexarrays.value)
                {
-//                     qglVertexPointer(3, GL_FLOAT, 0, aliasvert);
-//                     glEnableClientState(GL_VERTEX_ARRAY);
                        qglDrawElements(GL_TRIANGLES, maliashdr->numtris * 3, GL_UNSIGNED_SHORT, (void *)((int) maliashdr + maliashdr->tridata));
-//                     glDisableClientState(GL_VERTEX_ARRAY);
                }
                else
                {
@@ -479,7 +408,8 @@ void R_DrawQ2AliasFrame (md2mem_t *pheader, float alpha, vec3_t color, entity_t
        float lerp;
        md2memframe_t *frame1, *frame2;
 
-       glBindTexture(GL_TEXTURE_2D, skin);
+       if (r_render.value)
+               glBindTexture(GL_TEXTURE_2D, skin);
 
        softwaretransformforentity(ent);
 
@@ -497,6 +427,8 @@ void R_DrawQ2AliasFrame (md2mem_t *pheader, float alpha, vec3_t color, entity_t
 
        R_LightModel(pheader->num_xyz, org, color);
 
+       if (!r_render.value)
+               return;
        if (gl_vertexarrays.value)
        {
                // LordHavoc: big mess...
@@ -545,30 +477,14 @@ void R_DrawQ2AliasFrame (md2mem_t *pheader, float alpha, vec3_t color, entity_t
                                glBegin(GL_TRIANGLE_FAN);
                                count = -count;
                        }
-                       //if (isG200)
-                       //{
-                               do
-                               {
-                                       glTexCoord2f(((float *)order)[0], ((float *)order)[1]);
-                                       glColor4f(aliasvertcolor[order[2] * 4] * (1.0f / 255.0f), aliasvertcolor[order[2] * 4 + 1] * (1.0f / 255.0f), aliasvertcolor[order[2] * 4 + 2] * (1.0f / 255.0f), aliasvertcolor[order[2] * 4 + 3] * (1.0f / 255.0f));
-                                       glVertex3fv(&aliasvert[order[2] * 3]);
-                                       order += 3;
-                               }
-                               while (count--);
-                       /*
-                       }
-                       else
+                       do
                        {
-                               do
-                               {
-                                       glTexCoord2f(((float *)order)[0], ((float *)order)[1]);
-                                       glColor4ub(aliasvertcolor[order[2] * 4], aliasvertcolor[order[2] * 4 + 1], aliasvertcolor[order[2] * 4 + 2], aliasvertcolor[order[2] * 4 + 3]);
-                                       glVertex3fv(&aliasvert[order[2] * 3]);
-                                       order += 3;
-                               }
-                               while (count--);
+                               glTexCoord2f(((float *)order)[0], ((float *)order)[1]);
+                               glColor4f(aliasvertcolor[order[2] * 4] * (1.0f / 255.0f), aliasvertcolor[order[2] * 4 + 1] * (1.0f / 255.0f), aliasvertcolor[order[2] * 4 + 2] * (1.0f / 255.0f), aliasvertcolor[order[2] * 4 + 3] * (1.0f / 255.0f));
+                               glVertex3fv(&aliasvert[order[2] * 3]);
+                               order += 3;
                        }
-                       */
+                       while (count--);
                }
        }
 
@@ -726,8 +642,6 @@ void R_DrawAliasModel (entity_t *ent, int cull, float alpha, model_t *clmodel, i
 {
        int                     i;
        vec3_t          mins, maxs, color;
-//     aliashdr_t      *paliashdr = NULL;
-//     md2mem_t        *pheader = NULL;
        mleaf_t         *leaf;
        void            *modelheader;
        int                     *skinset;
@@ -754,15 +668,10 @@ void R_DrawAliasModel (entity_t *ent, int cull, float alpha, model_t *clmodel, i
        if ((flags & EF_FULLBRIGHT) || (effects & EF_FULLBRIGHT))
                color[0] = color[1] = color[2] = 256;
        else
-       {
-               // HACK HACK HACK -- no fullbright colors, so make torches full light
-               if (!strcmp (clmodel->name, "progs/flame2.mdl") || !strcmp (clmodel->name, "progs/flame.mdl") )
-                       color[0] = color[1] = color[2] = 128;
-               else
-                       R_LightPoint (color, org);
-       }
+               R_LightPoint (color, org);
 
-       glDisable(GL_ALPHA_TEST);
+       if (r_render.value)
+               glDisable(GL_ALPHA_TEST);
 
        if (frame < 0 || frame >= clmodel->numframes)
        {
@@ -789,7 +698,8 @@ void R_DrawAliasModel (entity_t *ent, int cull, float alpha, model_t *clmodel, i
                skinset = skinanim + i*5;
        }
 
-       glEnable (GL_TEXTURE_2D);
+       if (r_render.value)
+               glEnable (GL_TEXTURE_2D);
 
        c_alias_polys += clmodel->numtris;
        if (clmodel->aliastype == ALIASTYPE_MD2)