diff --git a/polymer/build/include/glbuild.h b/polymer/build/include/glbuild.h index 276385962..082e84905 100644 --- a/polymer/build/include/glbuild.h +++ b/polymer/build/include/glbuild.h @@ -94,6 +94,8 @@ extern void (APIENTRY * bglGenTextures)( GLsizei n, GLuint *textures ); // 1.1 extern void (APIENTRY * bglDeleteTextures)( GLsizei n, const GLuint *textures); // 1.1 extern void (APIENTRY * bglBindTexture)( GLenum target, GLuint texture ); // 1.1 extern void (APIENTRY * bglTexImage2D)( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); +extern void (APIENTRY * bglCopyTexImage2D)( GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ); +extern void (APIENTRY * bglCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); extern void (APIENTRY * bglTexSubImage2D)( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); // 1.1 extern void (APIENTRY * bglTexParameterf)( GLenum target, GLenum pname, GLfloat param ); extern void (APIENTRY * bglTexParameteri)( GLenum target, GLenum pname, GLint param ); @@ -111,6 +113,7 @@ extern void (APIENTRY * bglFogfv)( GLenum pname, const GLfloat *params ); extern void (APIENTRY * bglNewList)(GLuint list, GLenum mode); extern void (APIENTRY * bglEndList)(void); extern void (APIENTRY * bglCallList)(GLuint list); +extern void (APIENTRY * bglDeleteLists)(GLuint list, GLsizei range); // Vertex Arrays extern void (APIENTRY * bglEnableClientState)(GLenum cap); @@ -124,6 +127,14 @@ extern void (APIENTRY * bglDrawElements)(GLenum mode, GLsizei count, GLenum type extern void (APIENTRY * bglClearStencil)(GLint s); extern void (APIENTRY * bglStencilOp)(GLenum fail, GLenum zfail, GLenum zpass); extern void (APIENTRY * bglStencilFunc)(GLenum func, GLint ref, GLuint mask); + +// GPU Programs +extern void (APIENTRY * bglGenProgramsARB)(GLsizei, GLuint *); +extern void (APIENTRY * bglBindProgramARB)(GLenum, GLuint); +extern void (APIENTRY * bglProgramStringARB)(GLenum, GLenum, GLsizei, const GLvoid *); + +// Multitexturing +extern void (APIENTRY * bglActiveTextureARB)(GLenum texture); #ifdef RENDERTYPEWIN // Windows diff --git a/polymer/build/src/engine.c b/polymer/build/src/engine.c index 6a0e27e14..6dd85f7e4 100644 --- a/polymer/build/src/engine.c +++ b/polymer/build/src/engine.c @@ -3153,7 +3153,7 @@ static void drawsprite(long snum) if (rendmode == 3) { polymost_drawsprite(snum); #ifdef USE_OPENGL - bglDepthMask(1); + //bglDepthMask(1); #endif return; } @@ -5951,6 +5951,21 @@ int sameside(_equation* eq, _point2d* p1, _point2d* p2) return (0); } +void drawpeel(int peel) +{ + bglBindTexture(GL_TEXTURE_RECTANGLE_NV, peels[peel]); + bglBegin(GL_QUADS); + bglTexCoord2f(0.0f, 0.0f); + bglVertex2f(-1.0f, -1.0f); + bglTexCoord2f(xdim, 0.0f); + bglVertex2f(1.0f, -1.0f); + bglTexCoord2f(xdim, ydim); + bglVertex2f(1.0f, 1.0f); + bglTexCoord2f(0.0f, ydim); + bglVertex2f(-1.0f, 1.0f); + bglEnd(); +} + // // drawmasks // @@ -5987,6 +6002,8 @@ killsprite: spritesy[i] = yp; } +if (!usegoodalpha) +{ gap = 1; while (gap < spritesortcnt) gap = (gap<<1)+1; for (gap>>=1;gap>0;gap>>=1) //Sort sprite list for (i=0;i=0;i--) @@ -6061,7 +6084,8 @@ killsprite: }*/ -#if 0 +if (!usegoodalpha) +{ { // Removing previous sorting code #ifdef POLYMOST //Hack to make it draw all opaque quads first. This should reduce the chances of @@ -6147,7 +6171,9 @@ killsprite: while (spritesortcnt > 0) drawsprite(--spritesortcnt); while (maskwallcnt > 0) drawmaskwall(--maskwallcnt); } -#else +} +else +{ // PLAG : The heart of good transparency -> sorted rendering on all layers. // that's why this code interleaves the drawing of all possible transparent entities // bubblesort is used, shouldn't cause any problems cpu-wise since the lists are small @@ -6252,7 +6278,7 @@ killsprite: free(indexes); free(depths);*/ - pos.x = globalposx; + /*pos.x = globalposx; pos.y = globalposy; //OSD_Printf("EIN OBSERVER POSITION : x=%i y=%i\n", pos.x, pos.y); @@ -6307,13 +6333,103 @@ killsprite: spritesortcnt--; if (tspriteptr[spritesortcnt] != NULL) drawsprite(spritesortcnt); - } -#endif /* goodalpha */ + }*/ + + while (spritesortcnt > 0) drawsprite(--spritesortcnt); + while (maskwallcnt > 0) drawmaskwall(--maskwallcnt); +} /* goodalpha */ indrawroomsandmasks = 0; enddrawing(); //}}} -} + if (usegoodalpha) + { + bglEndList(); + peelcompiling = 0; + bglDisable(GL_BLEND); + bglEnable(GL_ALPHA_TEST); + bglAlphaFunc(GL_GREATER, 0.0f); + + i = 0; + while (i < numpeels) + { + if (i > 0) + { + bglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + bglEnable(GL_FRAGMENT_PROGRAM_ARB); + + bglActiveTextureARB(GL_TEXTURE1_ARB); + bglEnable(GL_TEXTURE_RECTANGLE_NV); + bglBindTexture(GL_TEXTURE_RECTANGLE_NV, ztexture); + bglActiveTextureARB(GL_TEXTURE0_ARB); + } + + bglCallList(1); + + if (i > 0) + { + bglActiveTextureARB(GL_TEXTURE1_ARB); + bglDisable(GL_TEXTURE_RECTANGLE_NV); + bglActiveTextureARB(GL_TEXTURE0_ARB); + + bglDisable(GL_FRAGMENT_PROGRAM_ARB); + } + + // save output to a peel + bglBindTexture(GL_TEXTURE_RECTANGLE_NV, peels[i]); + bglCopyTexSubImage2D(GL_TEXTURE_RECTANGLE_NV, 0, 0, 0, 0, 0, xdim, ydim); + + if (i < (numpeels - 1)) + { + // save depth buffer + bglBindTexture(GL_TEXTURE_RECTANGLE_NV, ztexture); + bglCopyTexSubImage2D(GL_TEXTURE_RECTANGLE_NV, 0, 0, 0, 0, 0, xdim, ydim); + } + + i++; + } + + bglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + bglEnable(GL_BLEND); + bglDisable(GL_ALPHA_TEST); + bglDisable(GL_DEPTH_TEST); + + bglColor4f(1.0f, 1.0f, 1.0f, 1.0f); + + // identity for screen aligned quads + bglMatrixMode(GL_PROJECTION); + bglPushMatrix(); + bglLoadIdentity(); + bglMatrixMode(GL_MODELVIEW); + bglPushMatrix(); + bglLoadIdentity(); + + bglEnable(GL_TEXTURE_RECTANGLE_NV); + + if (curpeel == -1) + { + i = numpeels - 1; + while (i >= 0) + drawpeel(i--); + } + else + drawpeel(curpeel); + + bglDisable(GL_TEXTURE_RECTANGLE_NV); + bglEnable(GL_TEXTURE_2D); + + // restore the polymost projection + bglMatrixMode(GL_PROJECTION); + bglPopMatrix(); + bglMatrixMode(GL_MODELVIEW); + bglPopMatrix(); + + bglEnable(GL_DEPTH_TEST); + + bglDeleteLists(1, 1); + } +} // // drawmapview diff --git a/polymer/build/src/glbuild.c b/polymer/build/src/glbuild.c index 4b2e6e33d..7876f6280 100644 --- a/polymer/build/src/glbuild.c +++ b/polymer/build/src/glbuild.c @@ -79,6 +79,8 @@ void (APIENTRY * bglGenTextures)( GLsizei n, GLuint *textures ); // 1.1 void (APIENTRY * bglDeleteTextures)( GLsizei n, const GLuint *textures); // 1.1 void (APIENTRY * bglBindTexture)( GLenum target, GLuint texture ); // 1.1 void (APIENTRY * bglTexImage2D)( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); +void (APIENTRY * bglCopyTexImage2D)( GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ); +void (APIENTRY * bglCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); void (APIENTRY * bglTexSubImage2D)( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); // 1.1 void (APIENTRY * bglTexParameterf)( GLenum target, GLenum pname, GLfloat param ); void (APIENTRY * bglTexParameteri)( GLenum target, GLenum pname, GLint param ); @@ -96,6 +98,7 @@ void (APIENTRY * bglFogfv)( GLenum pname, const GLfloat *params ); void (APIENTRY * bglNewList)(GLuint list, GLenum mode); void (APIENTRY * bglEndList)(void); void (APIENTRY * bglCallList)(GLuint list); +void (APIENTRY * bglDeleteLists)(GLuint list, GLsizei range); // Vertex Arrays void (APIENTRY * bglEnableClientState)(GLenum cap); @@ -110,6 +113,14 @@ void (APIENTRY * bglClearStencil)(GLint s); void (APIENTRY * bglStencilOp)(GLenum fail, GLenum zfail, GLenum zpass); void (APIENTRY * bglStencilFunc)(GLenum func, GLint ref, GLuint mask); +// GPU Programs +void (APIENTRY * bglGenProgramsARB)(GLsizei, GLuint *); +void (APIENTRY * bglBindProgramARB)(GLenum, GLuint); +void (APIENTRY * bglProgramStringARB)(GLenum, GLenum, GLsizei, const GLvoid *); + +// Multitexturing +void (APIENTRY * bglActiveTextureARB)(GLenum texture); + #ifdef RENDERTYPEWIN // Windows HGLRC (WINAPI * bwglCreateContext)(HDC); @@ -257,6 +268,8 @@ int loadgldriver(const char *driver) bglDeleteTextures = GETPROC("glDeleteTextures"); bglBindTexture = GETPROC("glBindTexture"); bglTexImage2D = GETPROC("glTexImage2D"); + bglCopyTexImage2D = GETPROC("glCopyTexImage2D"); + bglCopyTexSubImage2D= GETPROC("glCopyTexSubImage2D"); bglTexSubImage2D = GETPROC("glTexSubImage2D"); bglTexParameterf = GETPROC("glTexParameterf"); bglTexParameteri = GETPROC("glTexParameteri"); @@ -272,6 +285,7 @@ int loadgldriver(const char *driver) bglNewList = GETPROC("glNewList"); bglEndList = GETPROC("glEndList"); bglCallList = GETPROC("glCallList"); + bglDeleteLists = GETPROC("glDeleteLists"); // Vertex Arrays bglEnableClientState = GETPROC("glEnableClientState"); @@ -302,6 +316,14 @@ int loadglextensions(void) bglCompressedTexImage2DARB = GETPROCEXTSOFT("glCompressedTexImage2DARB"); bglGetCompressedTexImageARB = GETPROCEXTSOFT("glGetCompressedTexImageARB"); + // GPU Programs + bglGenProgramsARB = GETPROCEXTSOFT("glGenProgramsARB"); + bglBindProgramARB = GETPROCEXTSOFT("glBindProgramARB"); + bglProgramStringARB = GETPROCEXTSOFT("glProgramStringARB"); + + // Multitexturing + bglActiveTextureARB = GETPROCEXTSOFT("glActiveTextureARB"); + return err; } @@ -382,6 +404,8 @@ int unloadgldriver(void) bglDeleteTextures = NULL; bglBindTexture = NULL; bglTexImage2D = NULL; + bglCopyTexImage2D = NULL; + bglCopyTexSubImage2D= NULL; bglTexSubImage2D = NULL; bglTexParameterf = NULL; bglTexParameteri = NULL; @@ -398,6 +422,7 @@ int unloadgldriver(void) bglNewList = NULL; bglEndList = NULL; bglCallList = NULL; + bglDeleteLists = NULL; // Vertex Arrays bglEnableClientState = NULL; @@ -411,6 +436,14 @@ int unloadgldriver(void) bglStencilOp = NULL; bglStencilFunc = NULL; + // GPU Programs + bglGenProgramsARB = NULL; + bglBindProgramARB = NULL; + bglProgramStringARB = NULL; + + // Multitexturing + bglActiveTextureARB = NULL; + #ifdef RENDERTYPEWIN bwglCreateContext = NULL; bwglDeleteContext = NULL; diff --git a/polymer/build/src/mdsprite.c b/polymer/build/src/mdsprite.c index 7105542b9..59e5eff69 100644 --- a/polymer/build/src/mdsprite.c +++ b/polymer/build/src/mdsprite.c @@ -1489,7 +1489,7 @@ if (tspr->cstat&2) { if (!(tspr->cstat&512)) pc[3] = 0.66; else pc[3] = 0.33; } bglBindTexture(GL_TEXTURE_2D, i); //PLAG: delayed polygon-level sorted rendering - if (m->usesalpha && !(tspr->cstat & 1024)) + if (m->usesalpha && !(tspr->cstat & 1024) && !usegoodalpha) { indexes = malloc(sizeof(unsigned short) * s->numtris); maxdepths = malloc(sizeof(float) * s->numtris); diff --git a/polymer/build/src/polymost.c b/polymer/build/src/polymost.c index b776202b3..967ab168a 100644 --- a/polymer/build/src/polymost.c +++ b/polymer/build/src/polymost.c @@ -127,6 +127,10 @@ static long lastglpolygonmode = 0; //FUK long glpolygonmode = 0; // 0:GL_FILL,1:GL_LINE,2:GL_POINT //FUK long glwidescreen = 0; long glprojectionhacks = 1; +long usegoodalpha = 0; +long peelcompiling = 0; +long numpeels = 10; +long curpeel = -1; static GLuint polymosttext = 0; extern char nofog; @@ -594,11 +598,28 @@ void polymost_glreset () glox1 = -1; } +GLuint ztexture; +GLuint *peels; +GLuint peelprogram; + // one-time initialisation of OpenGL for polymost void polymost_glinit() { GLfloat col[4]; + int i; + char peelprogramstring[] = + "!!ARBfp1.0\n" + "TEMP texsample;\n" + "TEMP depthresult;\n" + "TEMP tempresult;\n" + "TEX texsample, fragment.texcoord[0], texture[0], 2D;\n" + "TEX depthresult, fragment.position, texture[1], RECT;\n" + "MUL tempresult, fragment.color, texsample;\n" + "MUL tempresult.a, tempresult.a, depthresult.a;\n" + "MOV result.color, tempresult;\n" + "END\n"; + bglGetIntegerv(GL_ALPHA_BITS, &i); #if 1 if (!Bstrcmp(glinfo.vendor, "ATI Technologies Inc.")) { @@ -630,6 +651,43 @@ void polymost_glinit() bglHint(GL_MULTISAMPLE_FILTER_HINT_NV, glnvmultisamplehint ? GL_NICEST:GL_FASTEST); bglEnable(GL_MULTISAMPLE_ARB); } + + //depth peeling init + if (usegoodalpha) + { + // create the secondary Z-buffer + bglGenTextures(1, &ztexture); + bglBindTexture(GL_TEXTURE_RECTANGLE_NV, ztexture); + bglCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_DEPTH_COMPONENT, 0, 0, xdim, ydim, 0); + bglTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + bglTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + bglTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_WRAP_S, GL_CLAMP); + bglTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_WRAP_T, GL_CLAMP); + bglTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB); + bglTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_COMPARE_FUNC_ARB, GL_GREATER); + bglTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_DEPTH_TEXTURE_MODE_ARB, GL_ALPHA); + + // create the various peeling layers + peels = malloc(numpeels * sizeof(GLuint)); + bglGenTextures(numpeels, peels); + i = 0; + while (i < numpeels) + { + bglBindTexture(GL_TEXTURE_RECTANGLE_NV, peels[i]); + bglCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGBA8, 0, 0, xdim, ydim, 0); + bglTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + bglTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + bglTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_WRAP_S, GL_CLAMP); + bglTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_WRAP_T, GL_CLAMP); + + i++; + } + + // create the peeling fragment program + bglGenProgramsARB(1, &peelprogram); + bglBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, peelprogram); + bglProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, strlen(peelprogramstring), peelprogramstring); + } } void resizeglcheck () @@ -1499,14 +1557,16 @@ void drawpoly (double *dpx, double *dpy, long n, long method) if ((!(method&3)) && (!fullbrightdrawingpass)) { bglDisable(GL_BLEND); - bglDisable(GL_ALPHA_TEST); + if (!peelcompiling) + bglDisable(GL_ALPHA_TEST); } else { float al = 0.0; // PLAG : default alphacut was 0.32 before goodalpha if (pth && pth->hicr && pth->hicr->alphacut >= 0.0) al = pth->hicr->alphacut; if (alphahackarray[globalpicnum]) al=alphahackarray[globalpicnum]; if (!waloff[globalpicnum]) al = 0.0; // invalid textures ignore the alpha cutoff settings - bglEnable(GL_BLEND); + if (!peelcompiling) + bglEnable(GL_BLEND); bglEnable(GL_ALPHA_TEST); bglAlphaFunc(GL_GREATER,al); } @@ -3899,9 +3959,9 @@ if (tspr->cstat&2) { if (!(tspr->cstat&512)) method = 2+4; else method = 3+4; } } break; } - if (((tspr->cstat&2) || (gltexmayhavealpha(tspr->picnum,tspr->pal))) && ((tspr->cstat&48) != 0)) - if (((tspr->cstat&2) || (gltexmayhavealpha(tspr->picnum,tspr->pal))) && ((tspr->cstat&48) != 0)) - bglDepthMask(0); + //if (((tspr->cstat&2) || (gltexmayhavealpha(tspr->picnum,tspr->pal))) && ((tspr->cstat&48) != 0)) + // if (((tspr->cstat&2) || (gltexmayhavealpha(tspr->picnum,tspr->pal))) && ((tspr->cstat&48) != 0)) + // bglDepthMask(0); #endif switch ((globalorientation>>4)&3) @@ -4961,7 +5021,18 @@ static int osdcmd_polymostvars(const osdfuncparm_t *parm) return OSDCMD_OK; } else if (!Bstrcasecmp(parm->name, "usegoodalpha")) { - OSD_Printf("usegoodalpha is obsolete\n"); + if (showval) { OSD_Printf("usegoodalpha is %d\n", usegoodalpha); } + else usegoodalpha = (val != 0); + return OSDCMD_OK; + } + else if (!Bstrcasecmp(parm->name, "numpeels")) { + if (showval) { OSD_Printf("numpeels is %d\n", numpeels); } + else numpeels = val; + return OSDCMD_OK; + } + else if (!Bstrcasecmp(parm->name, "curpeel")) { + if (showval) { OSD_Printf("curpeel is %d\n", curpeel); } + else curpeel = val; return OSDCMD_OK; } else if (!Bstrcasecmp(parm->name, "glpolygonmode")) { @@ -5040,6 +5111,8 @@ void polymost_initosdfuncs(void) OSD_RegisterFunction("gltexturemaxsize","gltexturemaxsize: changes the maximum OpenGL texture size limit",osdcmd_polymostvars); OSD_RegisterFunction("gltexturemiplevel","gltexturemiplevel: changes the highest OpenGL mipmap level used",osdcmd_polymostvars); OSD_RegisterFunction("usegoodalpha","usegoodalpha: [OBSOLETE] enable/disable better looking OpenGL alpha hack",osdcmd_polymostvars); + OSD_RegisterFunction("numpeels","numpeels",osdcmd_polymostvars); + OSD_RegisterFunction("curpeel","curpeel: [OBSOLETE] enable/disable better looking OpenGL alpha hack",osdcmd_polymostvars); OSD_RegisterFunction("glpolygonmode","glpolygonmode: debugging feature",osdcmd_polymostvars); //FUK OSD_RegisterFunction("glusetexcache","glusetexcache: enable/disable OpenGL compressed texture cache",osdcmd_polymostvars); OSD_RegisterFunction("glusetexcachecompression","usetexcachecompression: enable/disable compression of files in the OpenGL compressed texture cache",osdcmd_polymostvars); diff --git a/polymer/build/src/winlayer.c b/polymer/build/src/winlayer.c index 627f91889..66e94226c 100644 --- a/polymer/build/src/winlayer.c +++ b/polymer/build/src/winlayer.c @@ -2764,7 +2764,7 @@ static int SetupOpenGL(int width, int height, int bitspp) PFD_TYPE_RGBA, //Request An RGBA Format 0, //Select Our Color Depth 0,0,0,0,0,0, //Color Bits Ignored - 0, //No Alpha Buffer + 8, //No Alpha Buffer 0, //Shift Bit Ignored 0, //No Accumulation Buffer 0,0,0,0, //Accumulation Bits Ignored diff --git a/polymer/eduke32/eduke32.sln b/polymer/eduke32/eduke32.sln index 30fb50eab..b6d9d80f7 100644 --- a/polymer/eduke32/eduke32.sln +++ b/polymer/eduke32/eduke32.sln @@ -5,14 +5,20 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "eduke32", "eduke32.vcproj", EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - HRD SD|Win32 = HRD SD|Win32 - vanilla|Win32 = vanilla|Win32 + Classic Release|Win32 = Classic Release|Win32 + Classic|Win32 = Classic|Win32 + HRP SD Release|Win32 = HRP SD Release|Win32 + HRP SD|Win32 = HRP SD|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.HRD SD|Win32.ActiveCfg = HRD SD|Win32 - {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.HRD SD|Win32.Build.0 = HRD SD|Win32 - {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.vanilla|Win32.ActiveCfg = vanilla|Win32 - {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.vanilla|Win32.Build.0 = vanilla|Win32 + {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.Classic Release|Win32.ActiveCfg = Classic Release|Win32 + {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.Classic Release|Win32.Build.0 = Classic Release|Win32 + {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.Classic|Win32.ActiveCfg = Classic|Win32 + {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.Classic|Win32.Build.0 = Classic|Win32 + {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.HRP SD Release|Win32.ActiveCfg = HRP SD Release|Win32 + {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.HRP SD Release|Win32.Build.0 = HRP SD Release|Win32 + {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.HRP SD|Win32.ActiveCfg = HRP SD|Win32 + {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.HRP SD|Win32.Build.0 = HRP SD|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/polymer/eduke32/eduke32.vcproj b/polymer/eduke32/eduke32.vcproj index d0e38c6d6..75dd50231 100644 --- a/polymer/eduke32/eduke32.vcproj +++ b/polymer/eduke32/eduke32.vcproj @@ -4,6 +4,7 @@ Version="8,00" Name="eduke32" ProjectGUID="{8E7A6179-0B72-4073-8A4C-E8682D481DAE}" + RootNamespace="eduke32" Keyword="MakeFileProj" > @@ -15,7 +16,7 @@ + + + + + +