Do not compress textures lower than 4x4.

This commit is contained in:
Rinnegatamante
2020-10-31 19:33:37 +01:00
parent e40e0c5da2
commit e3e5c7bbc6
2 changed files with 19 additions and 12 deletions
+2 -2
View File
@@ -911,7 +911,7 @@ flushCache(void)
{ {
flushGlRenderState(); flushGlRenderState();
glUniform4fv(U(u_matColor), 1, (GLfloat*)&matColorCache); glUniform4fv(U(u_matColor), 1, &matColorCache.red);
glUniform4fv(U(u_surfProps), 1, surfPropsCache); glUniform4fv(U(u_surfProps), 1, surfPropsCache);
// TODO: this is probably a stupid way to do it without UBOs // TODO: this is probably a stupid way to do it without UBOs
@@ -947,7 +947,7 @@ flushCache(void)
uniformState.fogDisable = rwStateCache.fogEnable ? 0.0f : 1.0f; uniformState.fogDisable = rwStateCache.fogEnable ? 0.0f : 1.0f;
uniformState.fogStart = rwStateCache.fogStart; uniformState.fogStart = rwStateCache.fogStart;
uniformState.fogEnd = rwStateCache.fogEnd; uniformState.fogEnd = rwStateCache.fogEnd;
uniformState.fogRange = 1.0f/(rwStateCache.fogStart - rwStateCache.fogEnd); uniformState.fogRange = 1.0f / (rwStateCache.fogStart - rwStateCache.fogEnd);
//if(uniformStateDirty[RWGL_ALPHAFUNC] || uniformStateDirty[RWGL_ALPHAREF]){ //if(uniformStateDirty[RWGL_ALPHAFUNC] || uniformStateDirty[RWGL_ALPHAREF]){
switch(alphaFunc){ switch(alphaFunc){
+17 -10
View File
@@ -65,7 +65,8 @@ rasterCreateTexture(Raster *raster)
#endif #endif
#ifndef PSP2_NO_DXT_TEXTURES #ifndef PSP2_NO_DXT_TEXTURES
natras->internalFormat = natras->hasAlpha ? GL_COMPRESSED_RGBA_S3TC_DXT5_EXT : GL_COMPRESSED_RGB_S3TC_DXT1_EXT; if (raster->width >= 4 && raster->height >= 4)
natras->internalFormat = natras->hasAlpha ? GL_COMPRESSED_RGBA_S3TC_DXT5_EXT : GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
#endif #endif
raster->stride = raster->width*natras->bpp; raster->stride = raster->width*natras->bpp;
@@ -125,10 +126,6 @@ rasterCreateCameraTexture(Raster *raster)
natras->bpp = 3; natras->bpp = 3;
#endif #endif
//#ifndef PSP2_NO_DXT_TEXTURES
// natras->internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
//#endif
raster->stride = raster->width*natras->bpp; raster->stride = raster->width*natras->bpp;
glGenTextures(1, &natras->texid); glGenTextures(1, &natras->texid);
@@ -288,11 +285,18 @@ rasterLock(Raster *raster, int32 level, int32 lockMode)
uint32_t internal_stride = ALIGN(raster->width, 8) * natras->bpp; uint32_t internal_stride = ALIGN(raster->width, 8) * natras->bpp;
while (y < raster->height) { while (y < raster->height) {
memcpy_neon(px, p, raster->stride); memcpy_neon(px, p, raster->stride);
px += internal_stride; p += internal_stride;
y++; y++;
} }
#else #else
memcpy_neon(px, p, natras->hasAlpha ? (raster->width * raster->height) : (raster->width * raster->height / 2)); if (raster->width < 4 || raster->height < 4) {
uint32_t internal_stride = ALIGN(raster->width, 8) * natras->bpp;
while (y < raster->height) {
memcpy_neon(px, p, raster->stride);
p += internal_stride;
y++;
}
} else memcpy_neon(px, p, natras->hasAlpha ? (raster->width * raster->height) : (raster->width * raster->height / 2));
#endif #endif
bindTexture(prev); bindTexture(prev);
} }
@@ -564,9 +568,11 @@ getLevelSize(Raster *raster, int32 level)
{ {
Gl3Raster *natras = PLUGINOFFSET(Gl3Raster, raster, nativeRasterOffset); Gl3Raster *natras = PLUGINOFFSET(Gl3Raster, raster, nativeRasterOffset);
#ifdef PSP2_NO_DXT_TEXTURES #ifdef PSP2_NO_DXT_TEXTURES
uint32 size = raster->stride*raster->height; uint32 size = raster->stride * raster->height;
#else #else
uint32 size = natras->hasAlpha ? (raster->width*raster->height) : (raster->width*raster->height / 2); uint32 size;
if (raster->width < 4 || raster->height < 4) size = raster->stride * raster->height;
else size = natras->hasAlpha ? (raster->width*raster->height) : (raster->width*raster->height / 2);
#endif #endif
while(level--) while(level--)
size /= 4; size /= 4;
@@ -617,7 +623,8 @@ readNativeTexture(Stream *stream)
#ifdef PSP2_NO_DXT_TEXTURES #ifdef PSP2_NO_DXT_TEXTURES
data = raster->lock(i, Raster::LOCKWRITE|Raster::LOCKNOFETCH); data = raster->lock(i, Raster::LOCKWRITE|Raster::LOCKNOFETCH);
#else #else
data = raster->lock(i, Raster::LOCKWRITE|Raster::LOCKNOFETCH|Raster::LOCKRAW); if (raster->width < 4 || raster->height < 4) data = raster->lock(i, Raster::LOCKWRITE|Raster::LOCKNOFETCH);
else data = raster->lock(i, Raster::LOCKWRITE|Raster::LOCKNOFETCH|Raster::LOCKRAW);
#endif #endif
stream->read8(data, size); stream->read8(data, size);
raster->unlock(i); raster->unlock(i);