mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-12-27 04:41:23 +00:00
Optimise the screen texture setup for SDL2, Post-processor, and wipes.
Only use glCopyTexImage2D when first creating the screen texture, use glCopyTexSubImage2D anytime after that as it does not define a new texture each time. Flushing of the screen textures has been implemented for when the screen size changes (so that the screen textures don't stay at a wrong size) and the game is closed, I believe they would leave a memory leak before.
This commit is contained in:
parent
67ee1637c9
commit
77af3a8f95
8 changed files with 122 additions and 34 deletions
|
@ -79,6 +79,7 @@ EXPORT char *HWRAPI(GetRenderer) (void);
|
||||||
#define SCREENVERTS 10
|
#define SCREENVERTS 10
|
||||||
EXPORT void HWRAPI(PostImgRedraw) (float points[SCREENVERTS][SCREENVERTS][2]);
|
EXPORT void HWRAPI(PostImgRedraw) (float points[SCREENVERTS][SCREENVERTS][2]);
|
||||||
#endif
|
#endif
|
||||||
|
EXPORT void HWRAPI(FlushScreenTextures) (void);
|
||||||
EXPORT void HWRAPI(StartScreenWipe) (void);
|
EXPORT void HWRAPI(StartScreenWipe) (void);
|
||||||
EXPORT void HWRAPI(EndScreenWipe) (void);
|
EXPORT void HWRAPI(EndScreenWipe) (void);
|
||||||
EXPORT void HWRAPI(DoScreenWipe) (float alpha);
|
EXPORT void HWRAPI(DoScreenWipe) (float alpha);
|
||||||
|
@ -124,6 +125,7 @@ struct hwdriver_s
|
||||||
#ifdef SHUFFLE
|
#ifdef SHUFFLE
|
||||||
PostImgRedraw pfnPostImgRedraw;
|
PostImgRedraw pfnPostImgRedraw;
|
||||||
#endif
|
#endif
|
||||||
|
FlushScreenTextures pfnFlushScreenTextures;
|
||||||
StartScreenWipe pfnStartScreenWipe;
|
StartScreenWipe pfnStartScreenWipe;
|
||||||
EndScreenWipe pfnEndScreenWipe;
|
EndScreenWipe pfnEndScreenWipe;
|
||||||
DoScreenWipe pfnDoScreenWipe;
|
DoScreenWipe pfnDoScreenWipe;
|
||||||
|
|
|
@ -5443,6 +5443,8 @@ void HWR_SetViewSize(void)
|
||||||
|
|
||||||
gr_pspritexscale = gr_viewwidth / BASEVIDWIDTH;
|
gr_pspritexscale = gr_viewwidth / BASEVIDWIDTH;
|
||||||
gr_pspriteyscale = ((vid.height*gr_pspritexscale*BASEVIDWIDTH)/BASEVIDHEIGHT)/vid.width;
|
gr_pspriteyscale = ((vid.height*gr_pspritexscale*BASEVIDWIDTH)/BASEVIDHEIGHT)/vid.width;
|
||||||
|
|
||||||
|
HWD.pfnFlushScreenTextures();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
@ -6036,6 +6038,7 @@ void HWR_Shutdown(void)
|
||||||
HWR_FreeExtraSubsectors();
|
HWR_FreeExtraSubsectors();
|
||||||
HWR_FreePolyPool();
|
HWR_FreePolyPool();
|
||||||
HWR_FreeTextureCache();
|
HWR_FreeTextureCache();
|
||||||
|
HWD.pfnFlushScreenTextures();
|
||||||
}
|
}
|
||||||
|
|
||||||
void transform(float *cx, float *cy, float *cz)
|
void transform(float *cx, float *cy, float *cz)
|
||||||
|
|
|
@ -107,10 +107,19 @@ static GLint viewport[4];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Yay for arbitrary numbers! NextTexAvail is buggy for some reason.
|
// Yay for arbitrary numbers! NextTexAvail is buggy for some reason.
|
||||||
static GLuint screentexture = 60000;
|
// Sryder: NextTexAvail is broken for these because palette changes or changes to the texture filter or antialiasing
|
||||||
static GLuint startScreenWipe = 60001;
|
// flush all of the stored textures, leaving them unavailable at times such as between levels
|
||||||
static GLuint endScreenWipe = 60002;
|
// These need to start at 0 and be set to their number, and be reset to 0 when deleted so that intel GPUs
|
||||||
static GLuint finalScreenTexture = 60003;
|
// can know when the textures aren't there, as textures are always considered resident in their virtual memory
|
||||||
|
// TODO: Store them in a more normal way
|
||||||
|
#define SCRTEX_SCREENTEXTURE 65535
|
||||||
|
#define SCRTEX_STARTSCREENWIPE 65534
|
||||||
|
#define SCRTEX_ENDSCREENWIPE 65533
|
||||||
|
#define SCRTEX_FINALSCREENTEXTURE 65532
|
||||||
|
static GLuint screentexture = 0;
|
||||||
|
static GLuint startScreenWipe = 0;
|
||||||
|
static GLuint endScreenWipe = 0;
|
||||||
|
static GLuint finalScreenTexture = 0;
|
||||||
#if 0
|
#if 0
|
||||||
GLuint screentexture = FIRST_TEX_AVAIL;
|
GLuint screentexture = FIRST_TEX_AVAIL;
|
||||||
#endif
|
#endif
|
||||||
|
@ -263,6 +272,7 @@ FUNCPRINTF void DBG_Printf(const char *lpFmt, ...)
|
||||||
/* texture mapping */ //GL_EXT_copy_texture
|
/* texture mapping */ //GL_EXT_copy_texture
|
||||||
#ifndef KOS_GL_COMPATIBILITY
|
#ifndef KOS_GL_COMPATIBILITY
|
||||||
#define pglCopyTexImage2D glCopyTexImage2D
|
#define pglCopyTexImage2D glCopyTexImage2D
|
||||||
|
#define pglCopyTexSubImage2D glCopyTexSubImage2D
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else //!STATIC_OPENGL
|
#else //!STATIC_OPENGL
|
||||||
|
@ -387,6 +397,8 @@ static PFNglBindTexture pglBindTexture;
|
||||||
/* texture mapping */ //GL_EXT_copy_texture
|
/* texture mapping */ //GL_EXT_copy_texture
|
||||||
typedef void (APIENTRY * PFNglCopyTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
|
typedef void (APIENTRY * PFNglCopyTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
|
||||||
static PFNglCopyTexImage2D pglCopyTexImage2D;
|
static PFNglCopyTexImage2D pglCopyTexImage2D;
|
||||||
|
typedef void (APIENTRY * PFNglCopyTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
|
||||||
|
static PFNglCopyTexSubImage2D pglCopyTexSubImage2D;
|
||||||
#endif
|
#endif
|
||||||
/* GLU functions */
|
/* GLU functions */
|
||||||
typedef GLint (APIENTRY * PFNgluBuild2DMipmaps) (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data);
|
typedef GLint (APIENTRY * PFNgluBuild2DMipmaps) (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data);
|
||||||
|
@ -503,6 +515,7 @@ boolean SetupGLfunc(void)
|
||||||
GETOPENGLFUNC(pglBindTexture , glBindTexture)
|
GETOPENGLFUNC(pglBindTexture , glBindTexture)
|
||||||
|
|
||||||
GETOPENGLFUNC(pglCopyTexImage2D , glCopyTexImage2D)
|
GETOPENGLFUNC(pglCopyTexImage2D , glCopyTexImage2D)
|
||||||
|
GETOPENGLFUNC(pglCopyTexSubImage2D , glCopyTexSubImage2D)
|
||||||
|
|
||||||
#undef GETOPENGLFUNC
|
#undef GETOPENGLFUNC
|
||||||
|
|
||||||
|
@ -654,6 +667,10 @@ void SetModelView(GLint w, GLint h)
|
||||||
{
|
{
|
||||||
// DBG_Printf("SetModelView(): %dx%d\n", (int)w, (int)h);
|
// DBG_Printf("SetModelView(): %dx%d\n", (int)w, (int)h);
|
||||||
|
|
||||||
|
// The screen textures need to be flushed if the width or height change so that they be remade for the correct size
|
||||||
|
if (screen_width != w || screen_height != h)
|
||||||
|
FlushScreenTextures();
|
||||||
|
|
||||||
screen_width = w;
|
screen_width = w;
|
||||||
screen_height = h;
|
screen_height = h;
|
||||||
|
|
||||||
|
@ -801,6 +818,7 @@ void Flush(void)
|
||||||
screentexture = FIRST_TEX_AVAIL;
|
screentexture = FIRST_TEX_AVAIL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tex_downloaded = 0;
|
tex_downloaded = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2156,10 +2174,25 @@ EXPORT void HWRAPI(PostImgRedraw) (float points[SCREENVERTS][SCREENVERTS][2])
|
||||||
}
|
}
|
||||||
#endif //SHUFFLE
|
#endif //SHUFFLE
|
||||||
|
|
||||||
|
// Sryder: This needs to be called whenever the screen changes resolution in order to reset the screen textures to use
|
||||||
|
// a new size
|
||||||
|
EXPORT void HWRAPI(FlushScreenTextures) (void)
|
||||||
|
{
|
||||||
|
pglDeleteTextures(1, &screentexture);
|
||||||
|
pglDeleteTextures(1, &startScreenWipe);
|
||||||
|
pglDeleteTextures(1, &endScreenWipe);
|
||||||
|
pglDeleteTextures(1, &finalScreenTexture);
|
||||||
|
screentexture = 0;
|
||||||
|
startScreenWipe = 0;
|
||||||
|
endScreenWipe = 0;
|
||||||
|
finalScreenTexture = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Create Screen to fade from
|
// Create Screen to fade from
|
||||||
EXPORT void HWRAPI(StartScreenWipe) (void)
|
EXPORT void HWRAPI(StartScreenWipe) (void)
|
||||||
{
|
{
|
||||||
INT32 texsize = 2048;
|
INT32 texsize = 2048;
|
||||||
|
boolean firstTime = (startScreenWipe == 0);
|
||||||
|
|
||||||
// Use a power of two texture, dammit
|
// Use a power of two texture, dammit
|
||||||
if(screen_width <= 512)
|
if(screen_width <= 512)
|
||||||
|
@ -2168,27 +2201,38 @@ EXPORT void HWRAPI(StartScreenWipe) (void)
|
||||||
texsize = 1024;
|
texsize = 1024;
|
||||||
|
|
||||||
// Create screen texture
|
// Create screen texture
|
||||||
|
if (firstTime)
|
||||||
|
startScreenWipe = SCRTEX_STARTSCREENWIPE;
|
||||||
pglBindTexture(GL_TEXTURE_2D, startScreenWipe);
|
pglBindTexture(GL_TEXTURE_2D, startScreenWipe);
|
||||||
|
|
||||||
|
if (firstTime)
|
||||||
|
{
|
||||||
#ifdef KOS_GL_COMPATIBILITY
|
#ifdef KOS_GL_COMPATIBILITY
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE);
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE);
|
||||||
#else
|
#else
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
#endif
|
#endif
|
||||||
Clamp2D(GL_TEXTURE_WRAP_S);
|
Clamp2D(GL_TEXTURE_WRAP_S);
|
||||||
Clamp2D(GL_TEXTURE_WRAP_T);
|
Clamp2D(GL_TEXTURE_WRAP_T);
|
||||||
#ifndef KOS_GL_COMPATIBILITY
|
#ifndef KOS_GL_COMPATIBILITY
|
||||||
pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0);
|
pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#ifndef KOS_GL_COMPATIBILITY
|
||||||
|
pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
|
tex_downloaded = startScreenWipe;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create Screen to fade to
|
// Create Screen to fade to
|
||||||
EXPORT void HWRAPI(EndScreenWipe)(void)
|
EXPORT void HWRAPI(EndScreenWipe)(void)
|
||||||
{
|
{
|
||||||
INT32 texsize = 2048;
|
INT32 texsize = 2048;
|
||||||
|
boolean firstTime = (endScreenWipe == 0);
|
||||||
|
|
||||||
// Use a power of two texture, dammit
|
// Use a power of two texture, dammit
|
||||||
if(screen_width <= 512)
|
if(screen_width <= 512)
|
||||||
|
@ -2197,21 +2241,32 @@ EXPORT void HWRAPI(EndScreenWipe)(void)
|
||||||
texsize = 1024;
|
texsize = 1024;
|
||||||
|
|
||||||
// Create screen texture
|
// Create screen texture
|
||||||
|
if (firstTime)
|
||||||
|
endScreenWipe = SCRTEX_ENDSCREENWIPE;
|
||||||
pglBindTexture(GL_TEXTURE_2D, endScreenWipe);
|
pglBindTexture(GL_TEXTURE_2D, endScreenWipe);
|
||||||
|
|
||||||
|
if (firstTime)
|
||||||
|
{
|
||||||
#ifdef KOS_GL_COMPATIBILITY
|
#ifdef KOS_GL_COMPATIBILITY
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE);
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE);
|
||||||
#else
|
#else
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
#endif
|
#endif
|
||||||
Clamp2D(GL_TEXTURE_WRAP_S);
|
Clamp2D(GL_TEXTURE_WRAP_S);
|
||||||
Clamp2D(GL_TEXTURE_WRAP_T);
|
Clamp2D(GL_TEXTURE_WRAP_T);
|
||||||
#ifndef KOS_GL_COMPATIBILITY
|
#ifndef KOS_GL_COMPATIBILITY
|
||||||
pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0);
|
pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#ifndef KOS_GL_COMPATIBILITY
|
||||||
|
pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
|
|
||||||
|
tex_downloaded = endScreenWipe;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2253,7 +2308,7 @@ EXPORT void HWRAPI(DrawIntermissionBG)(void)
|
||||||
|
|
||||||
pglEnd();
|
pglEnd();
|
||||||
|
|
||||||
tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
|
tex_downloaded = screentexture;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do screen fades!
|
// Do screen fades!
|
||||||
|
@ -2344,6 +2399,7 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha)
|
||||||
|
|
||||||
pglDisable(GL_TEXTURE_2D); // disable the texture in the 2nd texture unit
|
pglDisable(GL_TEXTURE_2D); // disable the texture in the 2nd texture unit
|
||||||
pglActiveTexture(GL_TEXTURE0);
|
pglActiveTexture(GL_TEXTURE0);
|
||||||
|
tex_downloaded = endScreenWipe;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2369,11 +2425,10 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha)
|
||||||
pglTexCoord2f(xfix, 0.0f);
|
pglTexCoord2f(xfix, 0.0f);
|
||||||
pglVertex3f(1.0f, -1.0f, 1.0f);
|
pglVertex3f(1.0f, -1.0f, 1.0f);
|
||||||
pglEnd();
|
pglEnd();
|
||||||
|
tex_downloaded = endScreenWipe;
|
||||||
#ifndef MINI_GL_COMPATIBILITY
|
#ifndef MINI_GL_COMPATIBILITY
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2381,6 +2436,7 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha)
|
||||||
EXPORT void HWRAPI(MakeScreenTexture) (void)
|
EXPORT void HWRAPI(MakeScreenTexture) (void)
|
||||||
{
|
{
|
||||||
INT32 texsize = 2048;
|
INT32 texsize = 2048;
|
||||||
|
boolean firstTime = (screentexture == 0);
|
||||||
|
|
||||||
// Use a power of two texture, dammit
|
// Use a power of two texture, dammit
|
||||||
if(screen_width <= 512)
|
if(screen_width <= 512)
|
||||||
|
@ -2389,7 +2445,12 @@ EXPORT void HWRAPI(MakeScreenTexture) (void)
|
||||||
texsize = 1024;
|
texsize = 1024;
|
||||||
|
|
||||||
// Create screen texture
|
// Create screen texture
|
||||||
|
if (firstTime)
|
||||||
|
screentexture = SCRTEX_SCREENTEXTURE;
|
||||||
pglBindTexture(GL_TEXTURE_2D, screentexture);
|
pglBindTexture(GL_TEXTURE_2D, screentexture);
|
||||||
|
|
||||||
|
if (firstTime)
|
||||||
|
{
|
||||||
#ifdef KOS_GL_COMPATIBILITY
|
#ifdef KOS_GL_COMPATIBILITY
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE);
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE);
|
||||||
|
@ -2400,15 +2461,21 @@ EXPORT void HWRAPI(MakeScreenTexture) (void)
|
||||||
Clamp2D(GL_TEXTURE_WRAP_S);
|
Clamp2D(GL_TEXTURE_WRAP_S);
|
||||||
Clamp2D(GL_TEXTURE_WRAP_T);
|
Clamp2D(GL_TEXTURE_WRAP_T);
|
||||||
#ifndef KOS_GL_COMPATIBILITY
|
#ifndef KOS_GL_COMPATIBILITY
|
||||||
pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0);
|
pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#ifndef KOS_GL_COMPATIBILITY
|
||||||
|
pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
|
tex_downloaded = screentexture;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT void HWRAPI(MakeScreenFinalTexture) (void)
|
EXPORT void HWRAPI(MakeScreenFinalTexture) (void)
|
||||||
{
|
{
|
||||||
INT32 texsize = 2048;
|
INT32 texsize = 2048;
|
||||||
|
boolean firstTime = (finalScreenTexture == 0);
|
||||||
|
|
||||||
// Use a power of two texture, dammit
|
// Use a power of two texture, dammit
|
||||||
if(screen_width <= 512)
|
if(screen_width <= 512)
|
||||||
|
@ -2417,21 +2484,31 @@ EXPORT void HWRAPI(MakeScreenFinalTexture) (void)
|
||||||
texsize = 1024;
|
texsize = 1024;
|
||||||
|
|
||||||
// Create screen texture
|
// Create screen texture
|
||||||
|
if (firstTime)
|
||||||
|
finalScreenTexture = SCRTEX_FINALSCREENTEXTURE;
|
||||||
pglBindTexture(GL_TEXTURE_2D, finalScreenTexture);
|
pglBindTexture(GL_TEXTURE_2D, finalScreenTexture);
|
||||||
|
|
||||||
|
if (firstTime)
|
||||||
|
{
|
||||||
#ifdef KOS_GL_COMPATIBILITY
|
#ifdef KOS_GL_COMPATIBILITY
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE);
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE);
|
||||||
#else
|
#else
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
#endif
|
#endif
|
||||||
Clamp2D(GL_TEXTURE_WRAP_S);
|
Clamp2D(GL_TEXTURE_WRAP_S);
|
||||||
Clamp2D(GL_TEXTURE_WRAP_T);
|
Clamp2D(GL_TEXTURE_WRAP_T);
|
||||||
#ifndef KOS_GL_COMPATIBILITY
|
#ifndef KOS_GL_COMPATIBILITY
|
||||||
pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0);
|
pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#ifndef KOS_GL_COMPATIBILITY
|
||||||
|
pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
|
tex_downloaded = finalScreenTexture;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2476,7 +2553,7 @@ EXPORT void HWRAPI(DrawScreenFinalTexture)(int width, int height)
|
||||||
SetModelView(screen_width, screen_height);
|
SetModelView(screen_width, screen_height);
|
||||||
SetStates();
|
SetStates();
|
||||||
|
|
||||||
tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now
|
tex_downloaded = finalScreenTexture;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //HWRENDER
|
#endif //HWRENDER
|
||||||
|
|
|
@ -94,6 +94,7 @@ void *hwSym(const char *funcName,void *handle)
|
||||||
#ifdef SHUFFLE
|
#ifdef SHUFFLE
|
||||||
GETFUNC(PostImgRedraw);
|
GETFUNC(PostImgRedraw);
|
||||||
#endif //SHUFFLE
|
#endif //SHUFFLE
|
||||||
|
GETFUNC(FlushScreenTextures);
|
||||||
GETFUNC(StartScreenWipe);
|
GETFUNC(StartScreenWipe);
|
||||||
GETFUNC(EndScreenWipe);
|
GETFUNC(EndScreenWipe);
|
||||||
GETFUNC(DoScreenWipe);
|
GETFUNC(DoScreenWipe);
|
||||||
|
|
|
@ -1442,6 +1442,7 @@ void I_StartupGraphics(void)
|
||||||
#ifdef SHUFFLE
|
#ifdef SHUFFLE
|
||||||
HWD.pfnPostImgRedraw = hwSym("PostImgRedraw",NULL);
|
HWD.pfnPostImgRedraw = hwSym("PostImgRedraw",NULL);
|
||||||
#endif
|
#endif
|
||||||
|
HWD.pfnFlushScreenTextures=hwSym("FlushScreenTextures",NULL);
|
||||||
HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL);
|
HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL);
|
||||||
HWD.pfnEndScreenWipe = hwSym("EndScreenWipe",NULL);
|
HWD.pfnEndScreenWipe = hwSym("EndScreenWipe",NULL);
|
||||||
HWD.pfnDoScreenWipe = hwSym("DoScreenWipe",NULL);
|
HWD.pfnDoScreenWipe = hwSym("DoScreenWipe",NULL);
|
||||||
|
|
|
@ -100,6 +100,7 @@ void *hwSym(const char *funcName,void *handle)
|
||||||
#ifdef SHUFFLE
|
#ifdef SHUFFLE
|
||||||
GETFUNC(PostImgRedraw);
|
GETFUNC(PostImgRedraw);
|
||||||
#endif //SHUFFLE
|
#endif //SHUFFLE
|
||||||
|
GETFUNC(FlushScreenTextures);
|
||||||
GETFUNC(StartScreenWipe);
|
GETFUNC(StartScreenWipe);
|
||||||
GETFUNC(EndScreenWipe);
|
GETFUNC(EndScreenWipe);
|
||||||
GETFUNC(DoScreenWipe);
|
GETFUNC(DoScreenWipe);
|
||||||
|
|
|
@ -1972,6 +1972,7 @@ void I_StartupGraphics(void)
|
||||||
#ifdef SHUFFLE
|
#ifdef SHUFFLE
|
||||||
HWD.pfnPostImgRedraw = hwSym("PostImgRedraw",NULL);
|
HWD.pfnPostImgRedraw = hwSym("PostImgRedraw",NULL);
|
||||||
#endif
|
#endif
|
||||||
|
HWD.pfnFlushScreenTextures=hwSym("FlushScreenTextures",NULL);
|
||||||
HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL);
|
HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL);
|
||||||
HWD.pfnEndScreenWipe = hwSym("EndScreenWipe",NULL);
|
HWD.pfnEndScreenWipe = hwSym("EndScreenWipe",NULL);
|
||||||
HWD.pfnDoScreenWipe = hwSym("DoScreenWipe",NULL);
|
HWD.pfnDoScreenWipe = hwSym("DoScreenWipe",NULL);
|
||||||
|
|
|
@ -117,6 +117,7 @@ static loadfunc_t hwdFuncTable[] = {
|
||||||
#ifdef SHUFFLE
|
#ifdef SHUFFLE
|
||||||
{"PostImgRedraw@4", &hwdriver.pfnPostImgRedraw},
|
{"PostImgRedraw@4", &hwdriver.pfnPostImgRedraw},
|
||||||
#endif
|
#endif
|
||||||
|
{"FlushScreenTextures@0",&hwdriver.pfnFlushScreenTextures},
|
||||||
{"StartScreenWipe@0", &hwdriver.pfnStartScreenWipe},
|
{"StartScreenWipe@0", &hwdriver.pfnStartScreenWipe},
|
||||||
{"EndScreenWipe@0", &hwdriver.pfnEndScreenWipe},
|
{"EndScreenWipe@0", &hwdriver.pfnEndScreenWipe},
|
||||||
{"DoScreenWipe@4", &hwdriver.pfnDoScreenWipe},
|
{"DoScreenWipe@4", &hwdriver.pfnDoScreenWipe},
|
||||||
|
@ -147,6 +148,7 @@ static loadfunc_t hwdFuncTable[] = {
|
||||||
#ifdef SHUFFLE
|
#ifdef SHUFFLE
|
||||||
{"PostImgRedraw", &hwdriver.pfnPostImgRedraw},
|
{"PostImgRedraw", &hwdriver.pfnPostImgRedraw},
|
||||||
#endif
|
#endif
|
||||||
|
{"FlushScreenTextures"},&hwdriver.pfnFlushScreenTextures},
|
||||||
{"StartScreenWipe", &hwdriver.pfnStartScreenWipe},
|
{"StartScreenWipe", &hwdriver.pfnStartScreenWipe},
|
||||||
{"EndScreenWipe", &hwdriver.pfnEndScreenWipe},
|
{"EndScreenWipe", &hwdriver.pfnEndScreenWipe},
|
||||||
{"DoScreenWipe", &hwdriver.pfnDoScreenWipe},
|
{"DoScreenWipe", &hwdriver.pfnDoScreenWipe},
|
||||||
|
|
Loading…
Reference in a new issue