From cc617d9085bed7278f2160bb9a4de1f702076e10 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 30 Oct 2021 09:29:21 +0200 Subject: [PATCH] - Backend update from Raze. Mostly warning fixes reported by Clang, plus GLES update. --- src/common/filesystem/file_zip.cpp | 2 +- src/common/fonts/font.cpp | 2 +- src/common/models/models_voxel.cpp | 4 ++-- .../rendering/gles/gles_postprocess.cpp | 4 +++- .../rendering/gles/gles_renderstate.cpp | 23 ++++++++++++------- src/common/rendering/gles/gles_samplers.cpp | 18 +++++++++++++++ .../rendering/gles/gles_shaderprogram.cpp | 2 +- src/common/rendering/gles/gles_system.cpp | 4 +++- src/common/rendering/gles/gles_system.h | 2 ++ 9 files changed, 46 insertions(+), 15 deletions(-) diff --git a/src/common/filesystem/file_zip.cpp b/src/common/filesystem/file_zip.cpp index b3acb8d13..db5bdf902 100644 --- a/src/common/filesystem/file_zip.cpp +++ b/src/common/filesystem/file_zip.cpp @@ -266,7 +266,7 @@ bool FZipFile::Open(bool quiet, LumpFilterInfo* filter) // at least one of the more common definition lumps must be present. for (auto &p : filter->requiredPrefixes) { - if (name.IndexOf(name0 + p) == 0 || name.LastIndexOf(p) == name.Len() - strlen(p)) + if (name.IndexOf(name0 + p) == 0 || name.LastIndexOf(p) == ptrdiff_t(name.Len() - strlen(p))) { foundspeciallump = true; break; diff --git a/src/common/fonts/font.cpp b/src/common/fonts/font.cpp index 6ddbe41d4..5edd09eb1 100644 --- a/src/common/fonts/font.cpp +++ b/src/common/fonts/font.cpp @@ -686,7 +686,7 @@ int FFont::GetColorTranslation (EColorRange range, PalEntry *color) const { // Single pic fonts do not set up their translation table and must always return 0. if (Translations.Size() == 0) return 0; - assert(Translations.Size() == NumTextColors); + assert(Translations.Size() == (unsigned)NumTextColors); if (noTranslate) { diff --git a/src/common/models/models_voxel.cpp b/src/common/models/models_voxel.cpp index 2be0521ad..809d25400 100644 --- a/src/common/models/models_voxel.cpp +++ b/src/common/models/models_voxel.cpp @@ -210,8 +210,8 @@ void FVoxelModel::AddFace(int x1, int y1, int z1, int x2, int y2, int z2, int x3 unsigned int indx[4]; vert.packedNormal = 0; // currently this is not being used for voxels. - vert.u = (((col & 15) * 255 / 16) + 7) / 255.f; - vert.v = (((col / 16) * 255 / 16) + 7) / 255.f; + vert.u = (((col & 15) + 0.5f) / 16.f); + vert.v = (((col / 16) + 0.5f) / 16.f); vert.x = x1 - PivotX; vert.z = -y1 + PivotY; diff --git a/src/common/rendering/gles/gles_postprocess.cpp b/src/common/rendering/gles/gles_postprocess.cpp index a618c3b2e..7292ef228 100644 --- a/src/common/rendering/gles/gles_postprocess.cpp +++ b/src/common/rendering/gles/gles_postprocess.cpp @@ -159,7 +159,7 @@ void FGLRenderer::DrawPresentTexture(const IntRect &box, bool applyGamma) mPresentShader->Uniforms.SetData(); - for (int n = 0; n < mPresentShader->Uniforms.mFields.size(); n++) + for (size_t n = 0; n < mPresentShader->Uniforms.mFields.size(); n++) { int index = -1; UniformFieldDesc desc = mPresentShader->Uniforms.mFields[n]; @@ -175,6 +175,8 @@ void FGLRenderer::DrawPresentTexture(const IntRect &box, bool applyGamma) case UniformType::Vec2: glUniform2fv(loc,1 , ((GLfloat*)(((char*)(&mPresentShader->Uniforms)) + desc.Offset))); break; + default: + break; } } diff --git a/src/common/rendering/gles/gles_renderstate.cpp b/src/common/rendering/gles/gles_renderstate.cpp index 78bfc23de..0a9e4ca13 100644 --- a/src/common/rendering/gles/gles_renderstate.cpp +++ b/src/common/rendering/gles/gles_renderstate.cpp @@ -35,6 +35,9 @@ #include "gles_renderbuffers.h" #include "gles_hwtexture.h" #include "gles_buffers.h" +#include "gles_renderer.h" +#include "gles_samplers.h" + #include "hw_clock.h" #include "printf.h" @@ -116,13 +119,13 @@ bool FGLRenderState::ApplyShader() addLights = (int(lightPtr[3]) - int(lightPtr[2])) / LIGHT_VEC4_NUM; // Here we limit the number of lights, but dont' change the light data so priority has to be mod, sub then add - if (modLights > gles.maxlights) + if (modLights > (int)gles.maxlights) modLights = gles.maxlights; - if (modLights + subLights > gles.maxlights) + if (modLights + subLights > (int)gles.maxlights) subLights = gles.maxlights - modLights; - if (modLights + subLights + addLights > gles.maxlights) + if (modLights + subLights + addLights > (int)gles.maxlights) addLights = gles.maxlights - modLights - subLights; totalLights = modLights + subLights + addLights; @@ -332,7 +335,7 @@ bool FGLRenderState::ApplyShader() // Calculate the total number of vec4s we need int totalVectors = totalLights * LIGHT_VEC4_NUM; - if (totalVectors > gles.numlightvectors) + if (totalVectors > (int)gles.numlightvectors) totalVectors = gles.numlightvectors; glUniform4fv(activeShader->cur->lights_index, totalVectors, lightPtr); @@ -479,6 +482,7 @@ void FGLRenderState::ApplyMaterial(FMaterial *mat, int clampmode, int translatio for (int i = 1; i < 3; i++) { auto systex = static_cast(mat->GetLayer(i, translation, &layer)); + GLRenderer->mSamplerManager->Bind(i, CLAMP_NONE, 255); systex->Bind(i, false); maxbound = i; } @@ -720,10 +724,13 @@ void FGLRenderState::ClearScreen() bool FGLRenderState::SetDepthClamp(bool on) { bool res = mLastDepthClamp; - /* - if (!on) glDisable(GL_DEPTH_CLAMP); - else glEnable(GL_DEPTH_CLAMP); - */ + + if (gles.depthClampAvailable) + { + if (!on) glDisable(GL_DEPTH_CLAMP); + else glEnable(GL_DEPTH_CLAMP); + } + mLastDepthClamp = on; return res; } diff --git a/src/common/rendering/gles/gles_samplers.cpp b/src/common/rendering/gles/gles_samplers.cpp index 1e3b16d2d..c088657c7 100644 --- a/src/common/rendering/gles/gles_samplers.cpp +++ b/src/common/rendering/gles/gles_samplers.cpp @@ -119,8 +119,26 @@ uint8_t FSamplerManager::Bind(int texunit, int num, int lastval) break; case CLAMP_NOFILTER: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + break; + case CLAMP_NOFILTER_X: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + break; + case CLAMP_NOFILTER_Y: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + break; + case CLAMP_NOFILTER_XY: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); diff --git a/src/common/rendering/gles/gles_shaderprogram.cpp b/src/common/rendering/gles/gles_shaderprogram.cpp index 26906f57a..6aa9ec172 100644 --- a/src/common/rendering/gles/gles_shaderprogram.cpp +++ b/src/common/rendering/gles/gles_shaderprogram.cpp @@ -272,7 +272,7 @@ void FPresentShaderBase::Init(const char * vtx_shader_name, const char * program Uniforms.UniformLocation.resize(Uniforms.mFields.size()); - for (int n = 0; n < Uniforms.mFields.size(); n++) + for (size_t n = 0; n < Uniforms.mFields.size(); n++) { int index = -1; UniformFieldDesc desc = Uniforms.mFields[n]; diff --git a/src/common/rendering/gles/gles_system.cpp b/src/common/rendering/gles/gles_system.cpp index a01b8b92c..79f6e0a48 100644 --- a/src/common/rendering/gles/gles_system.cpp +++ b/src/common/rendering/gles/gles_system.cpp @@ -62,7 +62,6 @@ static PROC(WINAPI* getprocaddress)(LPCSTR name); static void* LoadGLES2Proc(const char* name) { - HINSTANCE hGetProcIDDLL = LoadLibraryA("libGLESv2.dll"); int error = GetLastError(); @@ -71,6 +70,7 @@ static void* LoadGLES2Proc(const char* name) if (!addr) { //exit(1); + return nullptr; } else { @@ -182,10 +182,12 @@ namespace OpenGLESRenderer #if USE_GLES2 gles.depthStencilAvailable = CheckExtension("GL_OES_packed_depth_stencil"); gles.npotAvailable = CheckExtension("GL_OES_texture_npot"); + gles.depthClampAvailable = CheckExtension("GL_EXT_depth_clamp"); #else gles.depthStencilAvailable = true; gles.npotAvailable = true; gles.useMappedBuffers = true; + gles.depthClampAvailable = true; #endif gles.numlightvectors = (gles.maxlights * LIGHT_VEC4_NUM); diff --git a/src/common/rendering/gles/gles_system.h b/src/common/rendering/gles/gles_system.h index 021499362..d7f6ed139 100644 --- a/src/common/rendering/gles/gles_system.h +++ b/src/common/rendering/gles/gles_system.h @@ -42,6 +42,7 @@ GLAPI PFNGLUNMAPBUFFEROESPROC glUnmapBuffer; #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 #define GL_BGRA 0x80E1 +#define GL_DEPTH_CLAMP 0x864F #else #include "gl_load/gl_load.h" @@ -69,6 +70,7 @@ namespace OpenGLESRenderer bool depthStencilAvailable; bool npotAvailable; bool forceGLSLv100; + bool depthClampAvailable; int max_texturesize; char* vendorstring; char* modelstring;