rodecomp/Source/Render/DX7/DeviceCapabilitiesDX7.cpp
ragnarok-clanker 1cd1a4fb45 Maintenance: Forced (approved by the maintainer: small score loss accepted for correct behaviour). Resubmission of 13473, returned on
Batch #13474 by ragnarok-clanker: forced by an admin (3 lower score(s), 9 changed function(s)); checked with 65 compiled unit(s), including every includer of Source/Contents/Effects/RagEffect.h, Source/Render/DX7/DeviceOwnerDX7.h, Source/Render/DX7/RenderSystemDX7.h, Source/Render/RendererDX7.h, Source/Contents/Effects/RagEffectInitialization.h.
Deletes: Source/Contents/Effects/RagEffectInitialization.h
2026-11-06 18:29:50 +00:00

74 lines
2.4 KiB
C++

#include "Client/Application/ErrorDialog.h"
#include "Render/DX7/DeviceOwnerDX7.h"
#include "Render/DX7/TextureAllocationDX7.h"
#include "Render/DeviceContext/DCSurface.h"
#include "Render/RendererDX7.h"
#include "Render/Textures/Texture.h"
#include "UI/GameSettings/GameSettingsUI.h"
// INLINED
inline void TextureAllocationDX7::Update(int enabled, const D3DDEVICEDESC7& caps) {
if (enabled != 0 && (caps.dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_LINEARMIPLINEAR)) {
this->descriptorFlags = DDSD_MIPMAPCOUNT;
this->surfaceCaps = DDSCAPS_COMPLEX | DDSCAPS_MIPMAP;
} else {
this->descriptorFlags = 0;
this->surfaceCaps = 0;
}
}
// GLOBAL: gl_24508
unsigned char g_multitexture = 1;
// OFFSET: 0x0054A380
// FUNCTION: fn_01896
CRenderer* DeviceOwnerDX7::CreateRenderer() {
int format;
switch (this->redMask) {
case 0xF800:
format = TextureFormat::R5G6B5;
break;
case 0x7C00:
format = TextureFormat::X1R5G5B5;
break;
case 0x1F:
ShowErrorDialog(GetRenderSystemHolder()->system, "BGR 565 MODE. NOT SUPPORTED", 0);
format = TextureFormat::R5G6B5;
break;
default:
if (this->bitDepth == 32) {
format = TextureFormat::A8R8G8B8;
} else {
ShowErrorDialog(GetRenderSystemHolder()->system, "NOT SUPPORTED MODE", 0);
format = TextureFormat::UnknownTextureFormat;
}
break;
}
DDCAPS drawCaps{};
drawCaps.dwSize = sizeof(drawCaps);
if (this->draw->GetCaps(&drawCaps, nullptr) == S_OK) {
this->colorKeySupported = (drawCaps.dwCaps & DDCAPS_BLTSTRETCH) != 0;
}
if (this->device->GetCaps(&this->caps) == S_OK) {
this->minTextureWidth = this->caps.dwMinTextureWidth;
this->minTextureHeight = this->caps.dwMinTextureHeight;
this->maxTextureWidth = this->caps.dwMaxTextureWidth;
this->maxTextureHeight = this->caps.dwMaxTextureHeight;
this->maxTextureAspectRatio = this->caps.dwMaxTextureAspectRatio;
g_multitexture = this->caps.wMaxSimultaneousTextures >= 2 && (this->caps.dwTextureOpCaps & D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR) != 0;
g_textureAllocationDX7.Update(g_textureFiltering, this->caps);
}
this->largeTextures = this->maxTextureWidth >= 1024 && this->maxTextureHeight >= 1024;
CRendererDX7* renderer = new CRendererDX7();
renderer->SetTextureFormat(format);
renderer->device = this->device;
renderer->viewport.SetSize(this->width, this->height);
this->CalibrateTextureCoordinates();
return renderer;
}