diff -crB openarena-engine-0.8.1/code/renderer/tr_flares.c OORefFlare/renderer/tr_flares.c *** openarena-engine-0.8.1/code/renderer/tr_flares.c 2008-08-09 18:28:18.000000000 +0200 --- OORefFlare/renderer/tr_flares.c 2009-12-08 13:11:23.000000000 +0100 *************** *** 314,319 **** --- 314,320 ---- int iColor[3]; float distance, intensity, factor; byte fogFactors[3] = {255, 255, 255}; + int ind=0; backEnd.pc.c_flareRenders++; *************** *** 413,425 **** tess.vertexColors[tess.numVertexes][2] = iColor[2]; tess.vertexColors[tess.numVertexes][3] = 255; tess.numVertexes++; ! tess.indexes[tess.numIndexes++] = 0; tess.indexes[tess.numIndexes++] = 1; tess.indexes[tess.numIndexes++] = 2; tess.indexes[tess.numIndexes++] = 0; tess.indexes[tess.numIndexes++] = 2; tess.indexes[tess.numIndexes++] = 3; RB_EndSurface(); } --- 414,614 ---- tess.vertexColors[tess.numVertexes][2] = iColor[2]; tess.vertexColors[tess.numVertexes][3] = 255; tess.numVertexes++; ! tess.indexes[tess.numIndexes++] = 0; tess.indexes[tess.numIndexes++] = 1; tess.indexes[tess.numIndexes++] = 2; tess.indexes[tess.numIndexes++] = 0; tess.indexes[tess.numIndexes++] = 2; tess.indexes[tess.numIndexes++] = 3; + + ind+=4; + + // reflections -- tcpparena + + if(r_lensReflection1->integer){ + + // renders sharp lens flare. + + float cx, cy; + float dx, dy; + float size2; + const float poses[]= {-.15f, 0.6f, -.1f, -.6f, -1.8f}; + const float sizes[]= {0.14f, 0.2f, 0.1f, 0.2f, 1.0f}; + int brightness1[]= {8,25, 40, 26, 10}; // red + int brightness2[]= {15,23, 25, 30, 5}; // green + int brightness3[]= {12,20, 30, 28, 10}; // blue + const float r3_2=0.866025403784439f; + int n; + cx=backEnd.viewParms.viewportX+(backEnd.viewParms.viewportWidth>>1); + cy=backEnd.viewParms.viewportY+(backEnd.viewParms.viewportHeight>>1); + for(n=0;n<5;n++){ + dx=(f->windowX-cx)*poses[n]+cx; + dy=(f->windowY-cy)*poses[n]+cy; + size2=sizes[n]*backEnd.viewParms.viewportWidth*.25f; + + brightness1[n]=(int)(brightness1[n]*r_lensReflectionBrightness->value); + brightness2[n]=(int)(brightness2[n]*r_lensReflectionBrightness->value); + brightness3[n]=(int)(brightness3[n]*r_lensReflectionBrightness->value); + + tess.xyz[tess.numVertexes][0] = dx-size2; + tess.xyz[tess.numVertexes][1] = dy; + tess.texCoords[tess.numVertexes][0][0] = .5f; + tess.texCoords[tess.numVertexes][0][1] = .5f; + tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8; + tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8; + tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8; + tess.vertexColors[tess.numVertexes][3] = 255; + tess.numVertexes++; + + tess.xyz[tess.numVertexes][0] = dx-size2*.5f; + tess.xyz[tess.numVertexes][1] = dy-size2*r3_2; + tess.texCoords[tess.numVertexes][0][0] = .5f; + tess.texCoords[tess.numVertexes][0][1] = .5f; + tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8; + tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8; + tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8; + tess.vertexColors[tess.numVertexes][3] = 255; + tess.numVertexes++; + + tess.xyz[tess.numVertexes][0] = dx+size2*.5f; + tess.xyz[tess.numVertexes][1] = dy-size2*r3_2; + tess.texCoords[tess.numVertexes][0][0] = .5f; + tess.texCoords[tess.numVertexes][0][1] = .5f; + tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8; + tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8; + tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8; + tess.vertexColors[tess.numVertexes][3] = 255; + tess.numVertexes++; + + tess.xyz[tess.numVertexes][0] = dx+size2; + tess.xyz[tess.numVertexes][1] = dy; + tess.texCoords[tess.numVertexes][0][0] = .5f; + tess.texCoords[tess.numVertexes][0][1] = .5f; + tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8; + tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8; + tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8; + tess.vertexColors[tess.numVertexes][3] = 255; + tess.numVertexes++; + + tess.xyz[tess.numVertexes][0] = dx+size2*.5f; + tess.xyz[tess.numVertexes][1] = dy+size2*r3_2; + tess.texCoords[tess.numVertexes][0][0] = .5f; + tess.texCoords[tess.numVertexes][0][1] = .5f; + tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8; + tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8; + tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8; + tess.vertexColors[tess.numVertexes][3] = 255; + tess.numVertexes++; + + tess.xyz[tess.numVertexes][0] = dx-size2*.5f; + tess.xyz[tess.numVertexes][1] = dy+size2*r3_2; + tess.texCoords[tess.numVertexes][0][0] = .5f; + tess.texCoords[tess.numVertexes][0][1] = .5f; + tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8; + tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8; + tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8; + tess.vertexColors[tess.numVertexes][3] = 255; + tess.numVertexes++; + + tess.indexes[tess.numIndexes++] = 2+ind; + tess.indexes[tess.numIndexes++] = 1+ind; + tess.indexes[tess.numIndexes++] = 0+ind; + tess.indexes[tess.numIndexes++] = 3+ind; + tess.indexes[tess.numIndexes++] = 2+ind; + tess.indexes[tess.numIndexes++] = 0+ind; + tess.indexes[tess.numIndexes++] = 4+ind; + tess.indexes[tess.numIndexes++] = 3+ind; + tess.indexes[tess.numIndexes++] = 0+ind; + tess.indexes[tess.numIndexes++] = 5+ind; + tess.indexes[tess.numIndexes++] = 4+ind; + tess.indexes[tess.numIndexes++] = 0+ind; + + ind+=6; + + } + } + + if(r_lensReflection2->integer){ + + // renders fuzzy lens flare. + + float cx, cy; + float dx, dy; + float size2; + const float poses[]= {1.7f, -0.2f}; + const float sizes[]= {1.2f, 0.2f}; + int brightness1[]= {25, 40}; // red + int brightness2[]= {35, 10}; // green + int brightness3[]= {30, 15}; // blue + int n; + cx=backEnd.viewParms.viewportX+(backEnd.viewParms.viewportWidth>>1); + cy=backEnd.viewParms.viewportY+(backEnd.viewParms.viewportHeight>>1); + + + for(n=0;n<2;n++){ + dx=(f->windowX-cx)*poses[n]+cx; + dy=(f->windowY-cy)*poses[n]+cy; + size2=sizes[n]*backEnd.viewParms.viewportWidth*.25f; + + brightness1[n]=(int)(brightness1[n]*r_lensReflectionBrightness->value); + brightness2[n]=(int)(brightness2[n]*r_lensReflectionBrightness->value); + brightness3[n]=(int)(brightness3[n]*r_lensReflectionBrightness->value); + + tess.xyz[tess.numVertexes][0] = dx-size2; + tess.xyz[tess.numVertexes][1] = dy-size2; + tess.texCoords[tess.numVertexes][0][0] = 0.f; + tess.texCoords[tess.numVertexes][0][1] = 0.f; + tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8; + tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8; + tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8; + tess.vertexColors[tess.numVertexes][3] = 255; + tess.numVertexes++; + + tess.xyz[tess.numVertexes][0] = dx-size2; + tess.xyz[tess.numVertexes][1] = dy+size2; + tess.texCoords[tess.numVertexes][0][0] = 0.f; + tess.texCoords[tess.numVertexes][0][1] = 1.f; + tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8; + tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8; + tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8; + tess.vertexColors[tess.numVertexes][3] = 255; + tess.numVertexes++; + + tess.xyz[tess.numVertexes][0] = dx+size2; + tess.xyz[tess.numVertexes][1] = dy+size2; + tess.texCoords[tess.numVertexes][0][0] = 1.f; + tess.texCoords[tess.numVertexes][0][1] = 1.f; + tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8; + tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8; + tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8; + tess.vertexColors[tess.numVertexes][3] = 255; + tess.numVertexes++; + + tess.xyz[tess.numVertexes][0] = dx+size2; + tess.xyz[tess.numVertexes][1] = dy-size2; + tess.texCoords[tess.numVertexes][0][0] = 1.f; + tess.texCoords[tess.numVertexes][0][1] = 0.f; + tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8; + tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8; + tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8; + tess.vertexColors[tess.numVertexes][3] = 255; + tess.numVertexes++; + + tess.indexes[tess.numIndexes++] = 0+ind; + tess.indexes[tess.numIndexes++] = 1+ind; + tess.indexes[tess.numIndexes++] = 2+ind; + tess.indexes[tess.numIndexes++] = 0+ind; + tess.indexes[tess.numIndexes++] = 2+ind; + tess.indexes[tess.numIndexes++] = 3+ind; + + ind+=4; + + + } + } + + RB_EndSurface(); } diff -crB openarena-engine-0.8.1/code/renderer/tr_init.c OORefFlare/renderer/tr_init.c *** openarena-engine-0.8.1/code/renderer/tr_init.c 2008-08-09 22:22:37.000000000 +0200 --- OORefFlare/renderer/tr_init.c 2009-12-08 13:10:10.000000000 +0100 *************** *** 159,164 **** --- 159,169 ---- cvar_t *r_maxpolyverts; int max_polyverts; + // tcpp + cvar_t *r_lensReflection1; + cvar_t *r_lensReflection2; + cvar_t *r_lensReflectionBrightness; + /* ** InitOpenGL ** *************** *** 707,713 **** if( cmd->motionJpeg ) { ! frameSize = SaveJPGToBuffer( cmd->encodeBuffer, 90, cmd->width, cmd->height, cmd->captureBuffer ); ri.CL_WriteAVIVideoFrame( cmd->encodeBuffer, frameSize ); } --- 712,718 ---- if( cmd->motionJpeg ) { ! frameSize = SaveJPGToBuffer( cmd->encodeBuffer, 50, cmd->width, cmd->height, cmd->captureBuffer ); ri.CL_WriteAVIVideoFrame( cmd->encodeBuffer, frameSize ); } *************** *** 1008,1014 **** r_maxpolys = ri.Cvar_Get( "r_maxpolys", va("%d", MAX_POLYS), 0); r_maxpolyverts = ri.Cvar_Get( "r_maxpolyverts", va("%d", MAX_POLYVERTS), 0); ! // make sure all the commands added here are also // removed in R_Shutdown ri.Cmd_AddCommand( "imagelist", R_ImageList_f ); --- 1013,1023 ---- r_maxpolys = ri.Cvar_Get( "r_maxpolys", va("%d", MAX_POLYS), 0); r_maxpolyverts = ri.Cvar_Get( "r_maxpolyverts", va("%d", MAX_POLYVERTS), 0); ! ! r_lensReflection1 = ri.Cvar_Get( "r_lensReflection1", "1" , 0); // sharp reflection ! r_lensReflection2 = ri.Cvar_Get( "r_lensReflection2", "0" , 0); // fuzzy reflection ! r_lensReflectionBrightness = ri.Cvar_Get( "r_lensReflectionBrightness", "0.5" , 0); ! // make sure all the commands added here are also // removed in R_Shutdown ri.Cmd_AddCommand( "imagelist", R_ImageList_f ); diff -crB openarena-engine-0.8.1/code/renderer/tr_local.h OORefFlare/renderer/tr_local.h *** openarena-engine-0.8.1/code/renderer/tr_local.h 2008-08-09 22:22:37.000000000 +0200 --- OORefFlare/renderer/tr_local.h 2009-08-11 12:36:40.000000000 +0200 *************** *** 1117,1122 **** --- 1117,1126 ---- extern cvar_t *r_GLlibCoolDownMsec; + extern cvar_t *r_lensReflection1; + extern cvar_t *r_lensReflection2; + extern cvar_t *r_lensReflectionBrightness; + //==================================================================== float R_NoiseGet4f( float x, float y, float z, float t );