diff --git a/src/common/textures/hw_material.cpp b/src/common/textures/hw_material.cpp index 34f60af79..37fa8441a 100644 --- a/src/common/textures/hw_material.cpp +++ b/src/common/textures/hw_material.cpp @@ -121,13 +121,6 @@ FMaterial::FMaterial(FTexture * tx, bool expanded) } } } - mWidth = tx->GetTexelWidth(); - mHeight = tx->GetTexelHeight(); - mLeftOffset = tx->GetLeftOffset(0); // These only get used by decals and decals should not use renderer-specific offsets. - mTopOffset = tx->GetTopOffset(0); - mRenderWidth = tx->GetScaledWidth(); - mRenderHeight = tx->GetScaledHeight(); - mExpanded = expanded; mTextureLayers.ShrinkToFit(); diff --git a/src/common/textures/hw_material.h b/src/common/textures/hw_material.h index 9e9428759..e211585ba 100644 --- a/src/common/textures/hw_material.h +++ b/src/common/textures/hw_material.h @@ -32,13 +32,6 @@ class FMaterial TArray mTextureLayers; int mShaderIndex; int mLayerFlags = 0; - - short mLeftOffset; - short mTopOffset; - short mWidth; - short mHeight; - short mRenderWidth; - short mRenderHeight; bool mExpanded; public: @@ -48,7 +41,6 @@ public: FMaterial(FTexture *tex, bool forceexpand); ~FMaterial(); int GetLayerFlags() const { return mLayerFlags; } - void SetSpriteRect(); int GetShaderIndex() const { return mShaderIndex; } FTexture* Source() const @@ -60,28 +52,11 @@ public: // Only for spftpoly! return imgtex; } - bool isFullbright() const - { - return sourcetex->isFullbright(); - } - bool isHardwareCanvas() const - { - return sourcetex->isHardwareCanvas(); - } - bool GetTranslucency() - { - // This queries the master texture to reduce recalculations. - return imgtex->GetTranslucency(); - } void AddTextureLayer(FTexture *tex) { ValidateTexture(tex, false); mTextureLayers.Push(tex); } - bool isMasked() const - { - return sourcetex->bMasked; - } bool isExpanded() const { return mExpanded; @@ -91,39 +66,9 @@ public: { return mTextureLayers.Size() + 1; } - - bool hasCanvas() - { - return sourcetex->isHardwareCanvas(); - } IHardwareTexture *GetLayer(int i, int translation, FTexture **pLayer = nullptr); - // Patch drawing utilities - - // This is scaled size in integer units as needed by walls and flats - int TextureHeight() const { return mRenderHeight; } - int TextureWidth() const { return mRenderWidth; } - - int GetWidth() const - { - return mWidth; - } - - int GetHeight() const - { - return mHeight; - } - - int GetLeftOffset() const - { - return mLeftOffset; - } - - int GetTopOffset() const - { - return mTopOffset; - } static FMaterial *ValidateTexture(FTexture * tex, bool expand, bool create = true); static FMaterial *ValidateTexture(FTextureID no, bool expand, bool trans, bool create = true); diff --git a/src/rendering/gl/renderer/gl_renderer.cpp b/src/rendering/gl/renderer/gl_renderer.cpp index 06fc5d27b..08c7caae9 100644 --- a/src/rendering/gl/renderer/gl_renderer.cpp +++ b/src/rendering/gl/renderer/gl_renderer.cpp @@ -306,7 +306,7 @@ void FGLRenderer::BindToFrameBuffer(FMaterial *mat) FHardwareTexture::Unbind(0); gl_RenderState.ClearLastMaterial(); } - BaseLayer->BindToFrameBuffer(mat->GetWidth(), mat->GetHeight()); + BaseLayer->BindToFrameBuffer(mat->Source()->GetTexelWidth(), mat->Source()->GetTexelHeight()); } //=========================================================================== @@ -320,19 +320,18 @@ void FGLRenderer::RenderTextureView(FCanvasTexture *tex, AActor *Viewpoint, doub // This doesn't need to clear the fake flat cache. It can be shared between camera textures and the main view of a scene. FMaterial * gltex = FMaterial::ValidateTexture(tex, false); - int width = gltex->TextureWidth(); - int height = gltex->TextureHeight(); + float ratio = (float)tex->GetDisplayWidthDouble() / (float)tex->GetDisplayHeightDouble(); StartOffscreen(); BindToFrameBuffer(gltex); IntRect bounds; bounds.left = bounds.top = 0; - bounds.width = FHardwareTexture::GetTexDimension(gltex->GetWidth()); - bounds.height = FHardwareTexture::GetTexDimension(gltex->GetHeight()); + bounds.width = FHardwareTexture::GetTexDimension(tex->GetTexelWidth()); + bounds.height = FHardwareTexture::GetTexDimension(tex->GetTexelHeight()); FRenderViewpoint texvp; - RenderViewpoint(texvp, Viewpoint, &bounds, FOV, (float)width / height, (float)width / height, false, false); + RenderViewpoint(texvp, Viewpoint, &bounds, FOV, ratio, ratio, false, false); EndOffscreen(); diff --git a/src/rendering/gl/renderer/gl_renderstate.cpp b/src/rendering/gl/renderer/gl_renderstate.cpp index 8da456248..a537d7050 100644 --- a/src/rendering/gl/renderer/gl_renderstate.cpp +++ b/src/rendering/gl/renderer/gl_renderstate.cpp @@ -298,7 +298,7 @@ void FGLRenderState::Apply() void FGLRenderState::ApplyMaterial(FMaterial *mat, int clampmode, int translation, int overrideshader) { - if (mat->isHardwareCanvas()) + if (mat->Source()->isHardwareCanvas()) { mTempTM = TM_OPAQUE; } diff --git a/src/rendering/polyrenderer/backend/poly_framebuffer.cpp b/src/rendering/polyrenderer/backend/poly_framebuffer.cpp index 0e12a8275..6c0e7b1fc 100644 --- a/src/rendering/polyrenderer/backend/poly_framebuffer.cpp +++ b/src/rendering/polyrenderer/backend/poly_framebuffer.cpp @@ -380,19 +380,18 @@ void PolyFrameBuffer::RenderTextureView(FCanvasTexture *tex, AActor *Viewpoint, FMaterial *mat = FMaterial::ValidateTexture(tex, false); auto BaseLayer = static_cast(mat->GetLayer(0, 0)); - int width = mat->TextureWidth(); - int height = mat->TextureHeight(); + float ratio = (float)tex->GetDisplayWidthDouble() / (float)tex->GetDisplayHeightDouble(); DCanvas *image = BaseLayer->GetImage(tex, 0, 0); PolyDepthStencil *depthStencil = BaseLayer->GetDepthStencil(tex); mRenderState->SetRenderTarget(image, depthStencil, false); IntRect bounds; bounds.left = bounds.top = 0; - bounds.width = MIN(mat->GetWidth(), image->GetWidth()); - bounds.height = MIN(mat->GetHeight(), image->GetHeight()); + bounds.width = std::min(tex->GetTexelWidth(), image->GetWidth()); + bounds.height = std::min(tex->GetTexelHeight(), image->GetHeight()); FRenderViewpoint texvp; - RenderViewpoint(texvp, Viewpoint, &bounds, FOV, (float)width / height, (float)width / height, false, false); + RenderViewpoint(texvp, Viewpoint, &bounds, FOV, ratio, ratio, false, false); FlushDrawCommands(); DrawerThreads::WaitForWorkers(); diff --git a/src/rendering/polyrenderer/backend/poly_renderstate.cpp b/src/rendering/polyrenderer/backend/poly_renderstate.cpp index 6a36105b5..5538fbf37 100644 --- a/src/rendering/polyrenderer/backend/poly_renderstate.cpp +++ b/src/rendering/polyrenderer/backend/poly_renderstate.cpp @@ -312,7 +312,7 @@ void PolyRenderState::ApplyMaterial() { if (mMaterial.mChanged && mMaterial.mMaterial) { - mTempTM = mMaterial.mMaterial->isHardwareCanvas() ? TM_OPAQUE : TM_NORMAL; + mTempTM = mMaterial.mMaterial->Source()->isHardwareCanvas() ? TM_OPAQUE : TM_NORMAL; FTexture* layer; auto base = static_cast(mMaterial.mMaterial->GetLayer(0, mMaterial.mTranslation, &layer)); diff --git a/src/rendering/vulkan/renderer/vk_renderstate.cpp b/src/rendering/vulkan/renderer/vk_renderstate.cpp index b1d2b3e0c..d647594b1 100644 --- a/src/rendering/vulkan/renderer/vk_renderstate.cpp +++ b/src/rendering/vulkan/renderer/vk_renderstate.cpp @@ -369,7 +369,7 @@ void VkRenderState::ApplyPushConstants() } int tempTM = TM_NORMAL; - if (mMaterial.mMaterial && mMaterial.mMaterial->isHardwareCanvas()) + if (mMaterial.mMaterial && mMaterial.mMaterial->Source()->isHardwareCanvas()) tempTM = TM_OPAQUE; mPushConstants.uFogEnabled = fogset; diff --git a/src/rendering/vulkan/system/vk_framebuffer.cpp b/src/rendering/vulkan/system/vk_framebuffer.cpp index 796526b7e..6153a574d 100644 --- a/src/rendering/vulkan/system/vk_framebuffer.cpp +++ b/src/rendering/vulkan/system/vk_framebuffer.cpp @@ -519,8 +519,7 @@ void VulkanFrameBuffer::RenderTextureView(FCanvasTexture *tex, AActor *Viewpoint FMaterial *mat = FMaterial::ValidateTexture(tex, false); auto BaseLayer = static_cast(mat->GetLayer(0, 0)); - int width = mat->TextureWidth(); - int height = mat->TextureHeight(); + float ratio = (float)tex->GetDisplayWidthDouble() / (float)tex->GetDisplayHeightDouble(); VkTextureImage *image = BaseLayer->GetImage(tex, 0, 0); VkTextureImage *depthStencil = BaseLayer->GetDepthStencil(tex); @@ -534,11 +533,11 @@ void VulkanFrameBuffer::RenderTextureView(FCanvasTexture *tex, AActor *Viewpoint IntRect bounds; bounds.left = bounds.top = 0; - bounds.width = MIN(mat->GetWidth(), image->Image->width); - bounds.height = MIN(mat->GetHeight(), image->Image->height); + bounds.width = std::min(tex->GetTexelWidth(), image->Image->width); + bounds.height = std::min(tex->GetTexelHeight(), image->Image->height); FRenderViewpoint texvp; - RenderViewpoint(texvp, Viewpoint, &bounds, FOV, (float)width / height, (float)width / height, false, false); + RenderViewpoint(texvp, Viewpoint, &bounds, FOV, ratio, ratio, false, false); mRenderState->EndRenderPass();