rodecomp/Source/Render/DX9/RenderSystemDX9.cpp
ragnarok-clanker d4568519de Maintenance: [forced, user-approved] R7b+R7c (resubmit of returned 10244, rebased on 947ce989): remove the invented FogConfiguration,
Batch #10247 by ragnarok-clanker: forced by an admin (3 lower score(s), 26 changed function(s)); checked with 330 compiled unit(s), including every includer of Source/Render/DX7/RendererFogDX7.h, Source/Render/DX9/DeviceOwnerDX9.h, Source/Render/DX9/RenderSystemDX9.h, Source/Render/DX9/RendererDX9.h, Source/Render/DX9/RendererDX9Operations.h, Source/Render/DX9/RendererFogDX9.h, Source/Render/DX9/RendererPresentation.h, Source/Render/DeviceContext/DCSurface.h, Source/Render/Projection/RendererViewport.h, Source/Render/RenderAdapter.h, Source/Render/SpriteGeometry.h, Source/Render/TextureQuad.h, Source/Render/FogConfiguration.h.
Deletes: Source/Render/FogConfiguration.h
2026-11-03 12:07:29 +00:00

173 lines
4.8 KiB
C++

#include "Render/DX9/RenderSystemDX9.h"
#include "UI/GameSettings/GameSettingsUI.h"
#include "Render/TextureQuad.h"
#include <bit>
#include <new>
// OFFSET: 0x0056CF60
// FUNCTION: fn_02353
CRenderSystemDX9::CRenderSystemDX9() : m_device(new DeviceOwnerDX9), m_defaultTexture(nullptr), m_textureContext{}, m_surfaceContext{} {
this->RefreshContexts();
}
// OFFSET: 0x0056D180
// OFFSET: 0x0056D320
// FUNCTION: fn_02355
CRenderSystemDX9::~CRenderSystemDX9() {
delete this->m_device;
this->m_device = nullptr;
this->m_backBuffer.reset();
delete this->m_defaultTexture;
}
// INLINED
void CRenderSystemDX9::RefreshContexts() {
this->m_surfaceContext = this->m_device->SurfaceContext();
auto& context = this->m_textureContext;
context.direct3D = this->m_device->direct3D;
context.device = this->m_device->device;
context.adapter = this->m_device->adapter;
context.displayFormat = this->m_device->presentation.BackBufferFormat;
context.caps = this->m_device->caps;
context.dynamicTextures = this->m_device->dynamicTextures;
context.depthStart = g_depthStart;
context.depthEnd = g_depthEnd;
}
// OFFSET: 0x0056E250
// FUNCTION: fn_02373
std::int32_t CRenderSystemDX9::Backend() {
return 2;
}
// INLINED
HRESULT CRenderSystemDX9::Initialize(HWND window) {
const HRESULT result =
InitializeConfiguredDeviceDX9(*this->m_device, window);
this->RefreshContexts();
return result;
}
// OFFSET: 0x0056D670
// FUNCTION: fn_02363
HRESULT CRenderSystemDX9::Close() {
CTexture* texture = this->m_defaultTexture;
this->m_defaultTexture = nullptr;
delete texture;
this->m_backBuffer.reset();
return this->m_device->Close();
}
// OFFSET: 0x0056E3E0
// FUNCTION: fn_02376
bool CRenderSystemDX9::IsWindowed() {
return this->m_device->presentation.Windowed == 0;
}
// OFFSET: 0x0056E260
// FUNCTION: fn_02374
std::uint32_t CRenderSystemDX9::Width() {
return this->m_device->presentation.BackBufferWidth;
}
// OFFSET: 0x0056DB90
// FUNCTION: fn_02370
std::uint32_t CRenderSystemDX9::Height() {
return this->m_device->presentation.BackBufferHeight;
}
// OFFSET: 0x0056D3F0
// FUNCTION: fn_02359
CRenderer* CRenderSystemDX9::CreateRenderer() {
auto* renderer = new CRendererDX9(*this->m_device);
renderer->viewport.SetSize(
std::bit_cast<std::int32_t>(this->Width()), std::bit_cast<std::int32_t>(this->Height())
);
this->m_textureContext.primitives = &renderer->primitives;
this->m_textureContext.queues = &renderer->queues;
return renderer;
}
// OFFSET: 0x0056D720
// FUNCTION: fn_02364
void CRenderSystemDX9::DestroySurface(CSurface* surface) {
delete surface;
}
// OFFSET: 0x0056D480
// FUNCTION: fn_02360
CSurface* CRenderSystemDX9::CreateSurface(std::uint32_t width, std::uint32_t height) {
this->RefreshContexts();
return new (std::nothrow) CSurfaceDX9(this->m_surfaceContext, std::bit_cast<std::int32_t>(width), std::bit_cast<std::int32_t>(height));
}
// OFFSET: 0x0056D510
// FUNCTION: fn_02361
CTexture* CRenderSystemDX9::CreateTexture(std::uint32_t width, std::uint32_t height, std::int32_t format, bool dynamic, bool renderTarget) {
this->RefreshContexts();
return new (std::nothrow)
CTextureDX9(this->m_textureContext, std::bit_cast<std::int32_t>(width), std::bit_cast<std::int32_t>(height), format, dynamic, renderTarget);
}
// OFFSET: 0x0056D5B0
// FUNCTION: fn_02362
CSurface* CRenderSystemDX9::CreateSurfaceOrTexture(std::uint32_t width, std::uint32_t height) {
if (this->m_device->caps.MaxTextureWidth < width || this->m_device->caps.MaxTextureHeight < height) {
return this->CreateSurface(width, height);
}
return this->CreateTexture(width, height, TextureFormat::A1R5G5B5, false, false);
}
// OFFSET: 0x0056DAC0
// FUNCTION: fn_02369
CTexture* CRenderSystemDX9::BackBufferTexture() {
if (!this->m_defaultTexture) {
this->RefreshContexts();
this->m_defaultTexture = new CTextureDX9(this->m_textureContext);
}
return this->m_defaultTexture;
}
// OFFSET: 0x0056DBA0
// FUNCTION: fn_02371
std::shared_ptr<CSurface> CRenderSystemDX9::BackBufferSurface() {
if (!this->m_backBuffer) {
this->RefreshContexts();
this->m_backBuffer = std::make_shared<CSurfaceDX9>(this->m_surfaceContext, this->m_device->backBuffer);
}
return this->m_backBuffer;
}
// OFFSET: 0x0056D740
// FUNCTION: fn_02365
void CRenderSystemDX9::UpdateOption() {
this->m_device->dynamicTextures = (this->m_device->caps.Caps2 & D3DCAPS2_DYNAMICTEXTURES) != 0 && g_textureFiltering != 0;
}
// OFFSET: 0x0056D760
// FUNCTION: fn_02367
void CRenderSystemDX9::PrepareErrorDialog() {
}
// OFFSET: 0x0056D750
// FUNCTION: fn_02366
void CRenderSystemDX9::RestoreDisplayMode() {
}
// OFFSET: 0x0056E3F0
// FUNCTION: fn_02377
HRESULT CRenderSystemDX9::TestDevice() {
return this->m_device->ClipFullscreenCursor();
}
// OFFSET: 0x0056E400
// FUNCTION: fn_02378
HRESULT CRenderSystemDX9::Present(bool option) {
return this->m_device->Present(option);
}