mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-02-16 09:12:05 +00:00
- merged the remains of gl_texture.cpp into hw_cvars.cpp.
- eliminated hqresize.cpp's dependency on GL headers. - cleaned up the logic for CreateTexBuffer so that hqresize.cpp does not need to check for software warped textures anymore.
This commit is contained in:
parent
557c8b480b
commit
306b630de2
9 changed files with 109 additions and 138 deletions
|
@ -1051,7 +1051,6 @@ set (PCH_SOURCES
|
||||||
gl/system/gl_debug.cpp
|
gl/system/gl_debug.cpp
|
||||||
gl/system/gl_wipe.cpp
|
gl/system/gl_wipe.cpp
|
||||||
gl/textures/gl_hwtexture.cpp
|
gl/textures/gl_hwtexture.cpp
|
||||||
gl/textures/gl_texture.cpp
|
|
||||||
gl/textures/gl_samplers.cpp
|
gl/textures/gl_samplers.cpp
|
||||||
hwrenderer/data/flatvertices.cpp
|
hwrenderer/data/flatvertices.cpp
|
||||||
hwrenderer/dynlights/hw_aabbtree.cpp
|
hwrenderer/dynlights/hw_aabbtree.cpp
|
||||||
|
|
|
@ -9,6 +9,10 @@
|
||||||
#include "gl/dynlights/gl_shadowmap.h"
|
#include "gl/dynlights/gl_shadowmap.h"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#pragma warning(disable:4244)
|
||||||
|
#endif
|
||||||
|
|
||||||
struct particle_t;
|
struct particle_t;
|
||||||
class FCanvasTexture;
|
class FCanvasTexture;
|
||||||
class FFlatVertexBuffer;
|
class FFlatVertexBuffer;
|
||||||
|
|
|
@ -403,6 +403,16 @@ void OpenGLFrameBuffer::UnbindTexUnit(int no)
|
||||||
FHardwareTexture::Unbind(no);
|
FHardwareTexture::Unbind(no);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OpenGLFrameBuffer::FlushTextures()
|
||||||
|
{
|
||||||
|
if (GLRenderer) GLRenderer->FlushTextures();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLFrameBuffer::TextureFilterChanged()
|
||||||
|
{
|
||||||
|
if (GLRenderer != NULL && GLRenderer->mSamplerManager != NULL) GLRenderer->mSamplerManager->SetTextureFilterMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void OpenGLFrameBuffer::UpdatePalette()
|
void OpenGLFrameBuffer::UpdatePalette()
|
||||||
|
|
|
@ -46,6 +46,8 @@ public:
|
||||||
IHardwareTexture *CreateHardwareTexture(FTexture *tex) override;
|
IHardwareTexture *CreateHardwareTexture(FTexture *tex) override;
|
||||||
FModelRenderer *CreateModelRenderer(int mli) override;
|
FModelRenderer *CreateModelRenderer(int mli) override;
|
||||||
void UnbindTexUnit(int no) override;
|
void UnbindTexUnit(int no) override;
|
||||||
|
void FlushTextures() override;
|
||||||
|
void TextureFilterChanged() override;
|
||||||
|
|
||||||
// Retrieves a buffer containing image data for a screenshot.
|
// Retrieves a buffer containing image data for a screenshot.
|
||||||
// Hint: Pitch can be negative for upside-down images, in which case buffer
|
// Hint: Pitch can be negative for upside-down images, in which case buffer
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
//
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// Copyright(C) 2004-2016 Christoph Oelckers
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU Lesser General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU Lesser General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
|
||||||
// along with this program. If not, see http://www.gnu.org/licenses/
|
|
||||||
//
|
|
||||||
//--------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
/*
|
|
||||||
** Global texture data
|
|
||||||
**
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "gl/system/gl_system.h"
|
|
||||||
#include "c_cvars.h"
|
|
||||||
#include "w_wad.h"
|
|
||||||
#include "r_data/r_translate.h"
|
|
||||||
#include "c_dispatch.h"
|
|
||||||
#include "r_state.h"
|
|
||||||
#include "actor.h"
|
|
||||||
#include "textures/skyboxtexture.h"
|
|
||||||
#include "hwrenderer/textures/hw_material.h"
|
|
||||||
|
|
||||||
#include "gl/system/gl_interface.h"
|
|
||||||
#include "gl/renderer/gl_renderer.h"
|
|
||||||
#include "gl/textures/gl_samplers.h"
|
|
||||||
#include "gl/models/gl_models.h"
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// Texture CVARs
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
CUSTOM_CVAR(Float,gl_texture_filter_anisotropic,8.0f,CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL)
|
|
||||||
{
|
|
||||||
if (GLRenderer != NULL && GLRenderer->mSamplerManager != NULL) GLRenderer->mSamplerManager->SetTextureFilterMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
CCMD(gl_flush)
|
|
||||||
{
|
|
||||||
if (GLRenderer != NULL) GLRenderer->FlushTextures();
|
|
||||||
}
|
|
||||||
|
|
||||||
CUSTOM_CVAR(Int, gl_texture_filter, 4, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL)
|
|
||||||
{
|
|
||||||
if (self < 0 || self > 6) self=4;
|
|
||||||
if (GLRenderer != NULL && GLRenderer->mSamplerManager != NULL) GLRenderer->mSamplerManager->SetTextureFilterMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
CUSTOM_CVAR(Bool, gl_texture_usehires, true, CVAR_ARCHIVE|CVAR_NOINITCALL)
|
|
||||||
{
|
|
||||||
if (GLRenderer != NULL) GLRenderer->FlushTextures();
|
|
||||||
}
|
|
||||||
|
|
||||||
CVAR(Bool, gl_precache, false, CVAR_ARCHIVE)
|
|
||||||
|
|
||||||
CVAR(Bool, gl_trimsprites, true, CVAR_ARCHIVE);
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include "c_cvars.h"
|
#include "c_cvars.h"
|
||||||
|
#include "c_dispatch.h"
|
||||||
#include "v_video.h"
|
#include "v_video.h"
|
||||||
#include "hw_cvars.h"
|
#include "hw_cvars.h"
|
||||||
#include "menu/menu.h"
|
#include "menu/menu.h"
|
||||||
|
@ -77,3 +78,34 @@ CUSTOM_CVAR (Float, vid_saturation, 1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
}
|
}
|
||||||
|
|
||||||
CVAR(Int, gl_satformula, 1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG);
|
CVAR(Int, gl_satformula, 1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG);
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// Texture CVARs
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
CUSTOM_CVAR(Float,gl_texture_filter_anisotropic,8.0f,CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL)
|
||||||
|
{
|
||||||
|
screen->TextureFilterChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
CCMD(gl_flush)
|
||||||
|
{
|
||||||
|
screen->FlushTextures();
|
||||||
|
}
|
||||||
|
|
||||||
|
CUSTOM_CVAR(Int, gl_texture_filter, 4, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL)
|
||||||
|
{
|
||||||
|
if (self < 0 || self > 6) self=4;
|
||||||
|
screen->TextureFilterChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
CUSTOM_CVAR(Bool, gl_texture_usehires, true, CVAR_ARCHIVE|CVAR_NOINITCALL)
|
||||||
|
{
|
||||||
|
screen->FlushTextures();
|
||||||
|
}
|
||||||
|
|
||||||
|
CVAR(Bool, gl_precache, false, CVAR_ARCHIVE)
|
||||||
|
|
||||||
|
CVAR(Bool, gl_trimsprites, true, CVAR_ARCHIVE);
|
||||||
|
|
||||||
|
|
|
@ -34,16 +34,14 @@
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gl/system/gl_system.h"
|
#include "c_cvars.h"
|
||||||
#include "gl/system/gl_interface.h"
|
#include "v_video.h"
|
||||||
#include "gl/renderer/gl_renderer.h"
|
|
||||||
#include "hqnx/hqx.h"
|
#include "hqnx/hqx.h"
|
||||||
#ifdef HAVE_MMX
|
#ifdef HAVE_MMX
|
||||||
#include "hqnx_asm/hqnx_asm.h"
|
#include "hqnx_asm/hqnx_asm.h"
|
||||||
#endif
|
#endif
|
||||||
#include "xbr/xbrz.h"
|
#include "xbr/xbrz.h"
|
||||||
#include "xbr/xbrz_old.h"
|
#include "xbr/xbrz_old.h"
|
||||||
|
|
||||||
#include "parallel_for.h"
|
#include "parallel_for.h"
|
||||||
|
|
||||||
CUSTOM_CVAR(Int, gl_texture_hqresize, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
|
CUSTOM_CVAR(Int, gl_texture_hqresize, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
|
||||||
|
@ -58,18 +56,18 @@ CUSTOM_CVAR(Int, gl_texture_hqresize, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR
|
||||||
if (self == 8) self = 10;
|
if (self == 8) self = 10;
|
||||||
if (self == 9) self = 6;
|
if (self == 9) self = 6;
|
||||||
#endif
|
#endif
|
||||||
GLRenderer->FlushTextures();
|
screen->FlushTextures();
|
||||||
}
|
}
|
||||||
|
|
||||||
CUSTOM_CVAR(Int, gl_texture_hqresize_maxinputsize, 512, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
|
CUSTOM_CVAR(Int, gl_texture_hqresize_maxinputsize, 512, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
|
||||||
{
|
{
|
||||||
if (self > 1024) self = 1024;
|
if (self > 1024) self = 1024;
|
||||||
GLRenderer->FlushTextures();
|
screen->FlushTextures();
|
||||||
}
|
}
|
||||||
|
|
||||||
CUSTOM_CVAR(Int, gl_texture_hqresize_targets, 7, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
|
CUSTOM_CVAR(Int, gl_texture_hqresize_targets, 7, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
|
||||||
{
|
{
|
||||||
GLRenderer->FlushTextures();
|
screen->FlushTextures();
|
||||||
}
|
}
|
||||||
|
|
||||||
CVAR (Flag, gl_texture_hqresize_textures, gl_texture_hqresize_targets, 1);
|
CVAR (Flag, gl_texture_hqresize_textures, gl_texture_hqresize_targets, 1);
|
||||||
|
@ -327,10 +325,6 @@ unsigned char *FTexture::CreateUpsampledTextureBuffer (unsigned char *inputBuffe
|
||||||
if ( bHasCanvas )
|
if ( bHasCanvas )
|
||||||
return inputBuffer;
|
return inputBuffer;
|
||||||
|
|
||||||
// [BB] Don't upsample non-shader handled warped textures. Needs too much memory and time
|
|
||||||
if (gl.legacyMode && bWarped)
|
|
||||||
return inputBuffer;
|
|
||||||
|
|
||||||
// already scaled?
|
// already scaled?
|
||||||
if (Scale.X >= 2 && Scale.Y >= 2)
|
if (Scale.X >= 2 && Scale.Y >= 2)
|
||||||
return inputBuffer;
|
return inputBuffer;
|
||||||
|
|
|
@ -1373,72 +1373,63 @@ unsigned char * FTexture::CreateTexBuffer(int translation, int & w, int & h, int
|
||||||
|
|
||||||
if ((flags & CTF_CheckHires) && translation != STRange_AlphaTexture)
|
if ((flags & CTF_CheckHires) && translation != STRange_AlphaTexture)
|
||||||
{
|
{
|
||||||
buffer = LoadHiresTexture(&w, &h);
|
return LoadHiresTexture(&w, &h);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffer == nullptr)
|
int exx = !!(flags & CTF_Expand);
|
||||||
|
|
||||||
|
W = w = GetWidth() + 2 * exx;
|
||||||
|
H = h = GetHeight() + 2 * exx;
|
||||||
|
|
||||||
|
|
||||||
|
buffer = new unsigned char[W*(H + 1) * 4];
|
||||||
|
memset(buffer, 0, W * (H + 1) * 4);
|
||||||
|
|
||||||
|
FBitmap bmp(buffer, W * 4, W, H);
|
||||||
|
|
||||||
|
if (translation <= 0 || translation >= STRange_Min)
|
||||||
{
|
{
|
||||||
|
// Allow creation of desaturated or special-colormapped textures for the legacy renderer.
|
||||||
int exx = !!(flags & CTF_Expand);
|
FCopyInfo inf = { OP_COPY, BLEND_NONE,{ 0 }, 0, 0 };
|
||||||
|
if (translation >= STRange_Desaturate && translation < STRange_Desaturate + 31) // there are 31 ranges of desaturations available
|
||||||
W = w = GetWidth() + 2 * exx;
|
|
||||||
H = h = GetHeight() + 2 * exx;
|
|
||||||
|
|
||||||
|
|
||||||
buffer = new unsigned char[W*(H + 1) * 4];
|
|
||||||
memset(buffer, 0, W * (H + 1) * 4);
|
|
||||||
|
|
||||||
FBitmap bmp(buffer, W * 4, W, H);
|
|
||||||
|
|
||||||
if (translation <= 0 || translation >= STRange_Min)
|
|
||||||
{
|
{
|
||||||
// Allow creation of desaturated or special-colormapped textures for the legacy renderer.
|
inf.blend = (EBlend)(BLEND_DESATURATE1 + translation - STRange_Desaturate);
|
||||||
FCopyInfo inf = { OP_COPY, BLEND_NONE,{ 0 }, 0, 0 };
|
|
||||||
if (translation >= STRange_Desaturate && translation < STRange_Desaturate + 31) // there are 31 ranges of desaturations available
|
|
||||||
{
|
|
||||||
inf.blend = (EBlend)(BLEND_DESATURATE1 + translation - STRange_Desaturate);
|
|
||||||
}
|
|
||||||
else if (translation >= STRange_Specialcolormap && translation < STRange_Specialcolormap + (int)SpecialColormaps.Size())
|
|
||||||
{
|
|
||||||
inf.blend = (EBlend)(BLEND_SPECIALCOLORMAP1 + translation - STRange_Specialcolormap);
|
|
||||||
}
|
|
||||||
|
|
||||||
int trans = CopyTrueColorPixels(&bmp, exx, exx, 0, translation >= STRange_Min ? &inf : nullptr);
|
|
||||||
CheckTrans(buffer, W*H, trans);
|
|
||||||
isTransparent = bTranslucent;
|
|
||||||
// alpha texture for legacy mode
|
|
||||||
if (translation == STRange_AlphaTexture)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < W*H; i++)
|
|
||||||
{
|
|
||||||
int b = buffer[4 * i];
|
|
||||||
int g = buffer[4 * i + 1];
|
|
||||||
int r = buffer[4 * i + 2];
|
|
||||||
int gray = Luminance(r, g, b);
|
|
||||||
buffer[4 * i] = 255;
|
|
||||||
buffer[4 * i + 1] = 255;
|
|
||||||
buffer[4 * i + 2] = 255;
|
|
||||||
buffer[4 * i + 3] = (buffer[4 * i + 3] * gray) >> 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else if (translation >= STRange_Specialcolormap && translation < STRange_Specialcolormap + (int)SpecialColormaps.Size())
|
||||||
{
|
{
|
||||||
// When using translations everything must be mapped to the base palette.
|
inf.blend = (EBlend)(BLEND_SPECIALCOLORMAP1 + translation - STRange_Specialcolormap);
|
||||||
// so use CopyTrueColorTranslated
|
|
||||||
CopyTrueColorTranslated(&bmp, exx, exx, 0, FUniquePalette::GetPalette(translation));
|
|
||||||
isTransparent = 0;
|
|
||||||
// This is not conclusive for setting the texture's transparency info.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// [BB] The hqnx upsampling (not the scaleN one) destroys partial transparency, don't upsamle textures using it.
|
int trans = CopyTrueColorPixels(&bmp, exx, exx, 0, translation >= STRange_Min ? &inf : nullptr);
|
||||||
// [BB] Potentially upsample the buffer.
|
CheckTrans(buffer, W*H, trans);
|
||||||
if (flags & CTF_ProcessData)
|
isTransparent = bTranslucent;
|
||||||
|
// alpha texture for legacy mode
|
||||||
|
if (translation == STRange_AlphaTexture)
|
||||||
{
|
{
|
||||||
buffer = CreateUpsampledTextureBuffer(buffer, W, H, w, h, !!isTransparent);
|
for (int i = 0; i < W*H; i++)
|
||||||
ProcessData(buffer, w, h, false);
|
{
|
||||||
|
int b = buffer[4 * i];
|
||||||
|
int g = buffer[4 * i + 1];
|
||||||
|
int r = buffer[4 * i + 2];
|
||||||
|
int gray = Luminance(r, g, b);
|
||||||
|
buffer[4 * i] = 255;
|
||||||
|
buffer[4 * i + 1] = 255;
|
||||||
|
buffer[4 * i + 2] = 255;
|
||||||
|
buffer[4 * i + 3] = (buffer[4 * i + 3] * gray) >> 8;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// When using translations everything must be mapped to the base palette.
|
||||||
|
// so use CopyTrueColorTranslated
|
||||||
|
CopyTrueColorTranslated(&bmp, exx, exx, 0, FUniquePalette::GetPalette(translation));
|
||||||
|
isTransparent = 0;
|
||||||
|
// This is not conclusive for setting the texture's transparency info.
|
||||||
|
}
|
||||||
|
|
||||||
|
// [BB] The hqnx upsampling (not the scaleN one) destroys partial transparency, don't upsamle textures using it.
|
||||||
|
// [BB] Potentially upsample the buffer.
|
||||||
if ((flags & CTF_MaybeWarped) && bWarped && w*h <= 256 * 256) // do not software-warp larger textures, especially on the old systems that still need this fallback.
|
if ((flags & CTF_MaybeWarped) && bWarped && w*h <= 256 * 256) // do not software-warp larger textures, especially on the old systems that still need this fallback.
|
||||||
{
|
{
|
||||||
// need to do software warping
|
// need to do software warping
|
||||||
|
@ -1449,6 +1440,14 @@ unsigned char * FTexture::CreateTexBuffer(int translation, int & w, int & h, int
|
||||||
buffer = warpbuffer;
|
buffer = warpbuffer;
|
||||||
wt->GenTime[0] = screen->FrameTime;
|
wt->GenTime[0] = screen->FrameTime;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (flags & CTF_ProcessData)
|
||||||
|
buffer = CreateUpsampledTextureBuffer(buffer, W, H, w, h, !!isTransparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags & CTF_ProcessData)
|
||||||
|
ProcessData(buffer, w, h, false);
|
||||||
|
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
|
@ -357,6 +357,8 @@ public:
|
||||||
virtual IHardwareTexture *CreateHardwareTexture(FTexture *tex) { return nullptr; }
|
virtual IHardwareTexture *CreateHardwareTexture(FTexture *tex) { return nullptr; }
|
||||||
virtual FModelRenderer *CreateModelRenderer(int mli) { return nullptr; }
|
virtual FModelRenderer *CreateModelRenderer(int mli) { return nullptr; }
|
||||||
virtual void UnbindTexUnit(int no) {}
|
virtual void UnbindTexUnit(int no) {}
|
||||||
|
virtual void FlushTextures() {}
|
||||||
|
virtual void TextureFilterChanged() {}
|
||||||
|
|
||||||
// Begin 2D drawing operations.
|
// Begin 2D drawing operations.
|
||||||
// Returns true if hardware-accelerated 2D has been entered, false if not.
|
// Returns true if hardware-accelerated 2D has been entered, false if not.
|
||||||
|
|
Loading…
Reference in a new issue