Compare commits

4 Commits
13 changed files with 572 additions and 7 deletions
+13
View File
@@ -0,0 +1,13 @@
{
// Legacy source files use CP949 (Korean Windows encoding, superset of EUC-KR).
// VS Code defaults to UTF-8, which silently corrupts the Korean comment bytes
// on save. Setting encoding to cp949 here preserves them exactly.
"files.encoding": "cp949",
// Let VS Code try to detect encoding per-file, falling back to cp949 above.
"files.autoGuessEncoding": true,
// Preserve the original Windows CRLF line endings (Git's * -text in
// .gitattributes also prevents conversion, but this keeps VS Code consistent).
"files.eol": "\r\n"
}
@@ -46,6 +46,8 @@ videoDevices BufferedDevices[8];
int g_nDualHead = -1; // jcem
int g_nDualHead2 = -1; // jcem
int g_nNonDualHead = -1; // jcem
int g_nMFD1 = -1; // mode 4: left 640x480 MFD monitor
int g_nMFD2 = -1; // mode 4: right 640x480 MFD monitor
// MSL 5.03 Mechview
int g_nMechViewType; // jcem : 0 - no mechview, 1 - on radar screen, 2 - on main screen
@@ -380,6 +382,20 @@ void FindVideoCards()
}
}
}
// Mode 4 (split dual 640x480): find two extra D3D devices beyond
// FullScreenDevice and g_nNonDualHead. These need no special resolution.
{
int found = 0;
for (int t0 = 0; t0 < NumDevices && found < 2; t0++) {
if (t0 == Environment.FullScreenDevice) continue;
if (t0 == g_nNonDualHead) continue;
if (DeviceArray[t0].D3DCaps.dwDevCaps & D3DDEVCAPS_HWRASTERIZATION) {
if (found == 0) g_nMFD1 = t0;
else g_nMFD2 = t0;
found++;
}
}
}
// jcem
//
// Check any known video cards have up to date drivers (Only on Windows9x)
@@ -940,6 +940,13 @@ void gos_UpdateDisplay( bool Everything )
radar_device.BeginScene();
}
break;
case 4:
// Same 7-step cadence as mode 1: clear both MFD devices at step 0.
if(sh_step==0){
radar_device.BeginScene();
mfd_device.BeginScene(); // also clears mfd_device_right internally
}
break;
}
}else if(hsh_mrdev_initialized){
mr_device.BeginScene();
@@ -1106,6 +1113,21 @@ void gos_UpdateDisplay( bool Everything )
break;
case 3:
break;
case 4:
// Same 7-step cadence as mode 1. Flip all three: radar, left MFD,
// right MFD. mfd_device_right.pDDSFront is NULL if not initialised
// (e.g. g_nMFD2 = -1), so guard the flip.
sh_step++;
sh_step%=7;
if(sh_step==0) {
radar_device.EndScene();
radar_device.pDDSFront->Flip(0,DDFLIP_DONOTWAIT|DDFLIP_NOVSYNC);
mfd_device.EndScene();
mfd_device.pDDSFront->Flip(0,DDFLIP_DONOTWAIT|DDFLIP_NOVSYNC);
if (mfd_device_right.pDDSFront)
mfd_device_right.pDDSFront->Flip(0,DDFLIP_DONOTWAIT|DDFLIP_NOVSYNC);
}
break;
}
}else if(hsh_mrdev_initialized){
mr_device.EndScene();
@@ -945,6 +945,8 @@ void CHSH_Device::DrawTexture(float pt[4][2],DWORD dwColor,float tx1,float ty1,f
extern int g_nDualHead;
extern int g_nNonDualHead;
extern int g_nMFD1; // mode 4: left 640x480 MFD monitor
extern int g_nMFD2; // mode 4: right 640x480 MFD monitor
// MSL 5.03 Mechview
extern int g_nMechViewType; // jcem : 0 - no mechview, 1 - on radar screen, 2 - on main screen
@@ -1066,6 +1068,23 @@ bool CMR_Device::LoadMRTargetTexture(const char *mechtexturename)
CMR_Device mr_device;
// Mode 4: the right-hand 640x480 MFD device. Shares VRAM with mfd_device
// (same GPU), so mfd_device's pDDSTarget texture can be passed to this
// device's pD3DDevice->SetTexture without a copy.
CMFDRight_Device mfd_device_right;
bool CMFDRight_Device::InitFirst()
{
// Take over g_nMFD2 monitor at 640x480 fullscreen.
return CHSH_Device::InitFirst(g_nMFD2, 640, 480);
}
bool CMFDRight_Device::InitSecond()
{
// Create flip chain, D3D device and a render-target slot (1024x512).
return CHSH_Device::InitSecond(1024, 512);
}
/////////////////////////////////// CRadar_Device ///////////////////////////////////
const char g_szRadarShutdown[] = "SHUT\nDOWN";
const char g_szRadarStartup[] = "START\nUP";
@@ -1349,7 +1368,7 @@ static DWORD channel_color[6]={
CMFD_Device::CMFD_Device()
: ch((DWORD)-1)
: ch((DWORD)-1), m_pRightDevice(NULL)
{
}
@@ -1359,6 +1378,15 @@ CMFD_Device::~CMFD_Device()
bool CMFD_Device::InitFirst()
{
// Mode 4: use g_nMFD1 (640x480) for left panel; also start up the right
// device here so both displays are ready before InitSecond runs.
if (g_nTypeOfMFDs == 4) {
m_pRightDevice = &mfd_device_right;
CHSH_Device::InitFirst(g_nMFD1, 640, 480); // left device
mfd_device_right.InitFirst(); // right device display mode
return true;
}
m_pRightDevice = NULL;
return CHSH_Device::InitFirst(g_nDualHead,1280,480);
}
@@ -1409,6 +1437,11 @@ bool CMFD_Device::InitSecond()
pD3DDevice->SetMaterial( &mtrl );
pD3DDevice->SetRenderState( D3DRENDERSTATE_AMBIENT, 0xffffffff );
// Mode 4: create flip chain + D3D device for the right 640x480 monitor.
if (g_nTypeOfMFDs == 4 && m_pRightDevice) {
mfd_device_right.InitSecond();
}
return true;
}
@@ -1450,6 +1483,11 @@ bool CMFD_Device::BeginChannel(DWORD channel)
return false;
}
break;
case 4:
// Same 7-step timing as mode 1: channels 0-4 map to sh_step 2-6.
if (sh_step != (int)(channel + 2))
return false;
break;
}
ch=channel;
@@ -1475,8 +1513,42 @@ bool CMFD_Device::EndChannel()
gCaptureScreen = 0;
}
SetRenderTargetBackbuffer();
pD3DDevice->BeginScene();
// Mode 4: route this channel's blit to the correct physical monitor.
// Handled here, before the modes 1-3 SetRenderTargetBackbuffer/BeginScene
// block, so each path has exactly one matched Begin/EndScene pair.
// Channels 0-2 go to the LEFT device (this, g_nMFD1).
// Channels 3-4 go to the RIGHT device (m_pRightDevice, g_nMFD2).
// pDDSTarget was created by this device's pDD; both devices are on the
// same GPU so VRAM textures are mutually accessible.
if (g_nTypeOfMFDs == 4 && m_pRightDevice) {
CHSH_Device* target = (ch >= 3) ? m_pRightDevice : static_cast<CHSH_Device*>(this);
target->SetRenderTargetBackbuffer();
target->pD3DDevice->BeginScene();
target->pD3DDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE,TRUE);
target->pD3DDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND,D3DBLEND_ONE);
target->pD3DDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND,D3DBLEND_ONE);
target->pD3DDevice->SetTexture(0, pDDSTarget);
DWORD color4 = channel_color[ch];
float w4 = (float)target->size_back.cx; // 640
float h4 = (float)target->size_back.cy; // 480
float w2_4 = (float)size_target.cx; // 1024
float h2_4 = (float)size_target.cy; // 512
D3DTLVERTEX V4[4];
V4[0]=D3DTLVERTEX(D3DVECTOR( -0.5f,h4-0.5f,0.9f),1.0f,color4,0, 0/w2_4,h4/h2_4);
V4[1]=D3DTLVERTEX(D3DVECTOR( -0.5f, -0.5f,0.9f),1.0f,color4,0, 0/w2_4, 0/h2_4);
V4[2]=D3DTLVERTEX(D3DVECTOR(w4-0.5f,h4-0.5f,0.9f),1.0f,color4,0,w4/w2_4,h4/h2_4);
V4[3]=D3DTLVERTEX(D3DVECTOR(w4-0.5f, -0.5f,0.9f),1.0f,color4,0,w4/w2_4, 0/h2_4);
target->pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,D3DFVF_TLVERTEX,V4,4,NULL);
target->pD3DDevice->EndScene();
ch = (DWORD)-1;
} else {
// Modes 1-3: blit to half of the single 1280-wide (or 640-wide) backbuffer.
SetRenderTargetBackbuffer();
pD3DDevice->BeginScene();
pD3DDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE,TRUE);
pD3DDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND,D3DBLEND_ONE);
@@ -1504,13 +1576,27 @@ bool CMFD_Device::EndChannel()
pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX , Vertices, 4, NULL );
pD3DDevice->EndScene();
ch = (DWORD)-1;
pD3DDevice->EndScene();
ch = (DWORD)-1;
}
}
return true;
}
// Mode 4: same grid pattern as rcs640 but offset to x=0 for a standalone
// 640x480 surface (left half of rcs1280).
static RECT rcs640_solo[8]={
{0,40,640,42},
{ 160-1,0, 160+1,40},
{ 320-1,0, 320+1,40},
{ 480-1,0, 480+1,40},
{0,480-42,640,480-40},
{ 160-1,440, 160+1,480},
{ 320-1,440, 320+1,480},
{ 480-1,440, 480+1,480},
};
bool CMFD_Device::BeginScene()
{
/*
@@ -1533,6 +1619,25 @@ bool CMFD_Device::BeginScene()
pD3DDevice->Clear(1,&s_rc2,D3DCLEAR_TARGET ,0,1.0f,0);
//pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET ,0,1.0f,0);
}break;
case 4:
// Clear and draw background grid on the LEFT device.
SetRenderTargetBackbuffer();
pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,0,1.0f,0);
pD3DDevice->BeginScene();
if(sh_game_started) DrawMFDBackGrid();
pD3DDevice->EndScene();
// Clear and draw background grid on the RIGHT device.
if (m_pRightDevice) {
m_pRightDevice->SetRenderTargetBackbuffer();
m_pRightDevice->pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,0,1.0f,0);
m_pRightDevice->pD3DDevice->BeginScene();
if(sh_game_started) {
m_pRightDevice->pD3DDevice->SetTexture(0,0);
m_pRightDevice->DrawQuadList(8,rcs640_solo,0xFFFFFFFF);
}
m_pRightDevice->pD3DDevice->EndScene();
}
return true; // skip the common BeginScene/DrawGrid/EndScene below
}
pD3DDevice->BeginScene();
if(sh_game_started) {
@@ -1559,6 +1664,11 @@ bool CMFD_Device::Release()
SAFE_RELEASE(pDDSDamageTexture);
// MSL 5.03 Target Damage Display
SAFE_RELEASE(pDDSTargetTexture);
// Mode 4: release the right device before releasing this (left) device.
if (g_nTypeOfMFDs == 4 && m_pRightDevice) {
m_pRightDevice->Release();
m_pRightDevice = NULL;
}
CHSH_Device::Release();
}
return true;
@@ -1714,6 +1824,11 @@ bool CMFD_Device::DrawMFDBackGrid()
case 2:
DrawQuadList(8,rcs640,0xFFFFFFFF);
break;
case 4:
// Left device uses the left-half grid (0..640).
// Right device grid is drawn separately in BeginScene.
DrawQuadList(8,rcs640_solo,0xFFFFFFFF);
break;
}
return true;
@@ -2489,6 +2604,9 @@ bool IsMultimonitorAvaliable()
if ((*g_pfnCTCL_GetType)()==_ECTCL_CameraShip)
return false;
}
// Mode 4 uses its own device slots ? g_nDualHead is not required.
if (g_nTypeOfMFDs == 4)
return (g_nMFD1 != -1 && g_nMFD2 != -1);
if (g_nDualHead != -1) {
// 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual)
switch(g_nTypeOfMFDs)
@@ -169,6 +169,7 @@ public:
LPDIRECTDRAWSURFACE7 pDDSTargetTexture;//메크 데미지 텍스쳐..
DWORD ch; //current channel....
CHSH_Device* m_pRightDevice; // mode 4: pointer to right 640x480 device (NULL in modes 1-3)
public:
CMFD_Device();
~CMFD_Device();
@@ -189,6 +190,19 @@ public:
bool DrawMFDDefaultBackAux1(int state);
};
// Mode 4 (split dual 640x480): right-side MFD device on its own 640x480 monitor.
// Same GPU as the left device (mfd_device), so VRAM textures are shared.
class CMFDRight_Device : public CHSH_Device
{
public:
CMFDRight_Device() {}
bool InitFirst();
bool InitSecond();
virtual bool BeginScene() { return true; }
virtual bool EndScene() { return true; }
virtual bool Release() { return CHSH_Device::Release(); }
};
class CMR_Device:public CHSH_Device
{
public:
@@ -212,6 +226,7 @@ void HSH_DirectDrawRelease2();
extern CRadar_Device radar_device;
extern CMFD_Device mfd_device;
extern CMFDRight_Device mfd_device_right;
extern CMR_Device mr_device;
extern bool use_shgui;
extern int sh_step;
+4
View File
@@ -14820,6 +14820,10 @@ void __stdcall CTCL_UpdateMechView()
mfd_device.BeginScene();
sh_step = 4;
break;
case 4:
// Same 7-step cadence as mode 1.
sh_step = 6;
break;
}
}
else
@@ -1440,7 +1440,7 @@ int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int n
if (token && token[7])
{
int n = atoi(&token[7]);
if ((0 <= n) && (n <= 3)) // 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual)
if ((0 <= n) && (n <= 4)) // 0 - no MFDs, 1 - orginal(5+1=dual & single), 2 - B&W(3 + 1=1 dual), 3 - color(3 + 1=2 dual), 4 - split dual 640x480
g_nTypeOfMFDs = n;
}
token = strstr(all_lower, "-trio ");
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+363
View File
@@ -0,0 +1,363 @@
;==========================================================================
; === Text based config file for dgVoodoo2
; === Use this file if you are a game modder/hacker or an experted user and
; want to modify some advanced properties not available via the CPL.
;==========================================================================
Version = 0x287
;--------------------------------------------------------------------------
[General]
; OutputAPI: "d3d11warp", "d3d11_fl10_0", "d3d11_fl10_1", "d3d11_fl11_0",
; "d3d12_fl11_0", "d3d12_fl12_0", "bestavailable"
; Adapters: "all", or the ordinal of the adapter (1, ...)
;FullScreenOutput: "default", or the ordinal of the output on the adapter (1, ...)
; ScalingMode: "unspecified", "centered", "stretched", "centered_ar", "stretched_ar", "stretched_ar_crt",
; "stretched_4_3", "stretched_4_3_crt", "stretched_4_3_c64"
;
;InheritColorProfileInFullScreenMode:
; Enabled by default and can only be disabled only when a D3D11 output API
; is explicitly selected. Disabled case is intended for avoiding extra
; rendering resources on old hardware for better performance, if required.
; DisableScreenSaver: If true then screen saver and monitor sleep mode are disabled while rendering through dgVoodoo is active
OutputAPI = bestavailable
Adapters = all
FullScreenOutput = default
FullScreenMode = false
ScalingMode = unspecified
ProgressiveScanlineOrder = false
EnumerateRefreshRates = false
Brightness = 100
Color = 100
Contrast = 100
InheritColorProfileInFullScreenMode = true
KeepWindowAspectRatio = true
CaptureMouse = true
CenterAppWindow = false
DisableScreenSaver = false
;--------------------------------------------------------------------------
[GeneralExt]
; DesktopResolution: Desktop (native) resolution can be forced for dgVoodoo's internal calculations.
; Useful for rare applications that pre-set the desktop to other than the native
; resolution before dgVoodoo gets in action. Only the compact format can be used here,
; and applies to all outputs of the desktop.
; DesktopBitDepth: You can define what screen bit depth should be reported through dgVoodoo
; (8, 16, 32)
; DeframerSize: When resolution is forced to other than the app default then
; a black frame is drawn around the output image coming from a wrapped API
; to remove scaling artifacts -
; frame thickness can be defined in pixels (max 16, 0 = disable)
; ImageScaleFactor: Integer factor for scaling the output image coming from a wrapped API
; Always done by nearest point filtering, independent on scaling mode
; (0 = max available)
; Separate factors can be defined for horizontal and vertical scaling
; by subproperties, e.g.
; ImageScaleFactor = x:3, y:2
; CursorScaleFactor: Integer factor for scaling the emulated hardware mouse (max 16)
; (0 = automatic, 1 = no scale, 2 = double scale, ...)
; DisplayROI: Display region of interest
; If scaling is done by the dgVoodoo then you can define a subrect of the
; output image, coming from a wrapped API, to be displayed. The defined subrect
; is mapped to the display output according to the current scaling mode
; It can be useful for applications rendering a widescreen subimage into a 4:3
; resolution; in this case you can scale up that subimage to (nearly) fill the
; whole screen on a widescreen monitor.
; DisplayROI empty value means the whole image.
; DisplayROI value can be a proportion in form of %d_%d or a pixel size (%d|%d)
; Pos subproperty is not mandatory and can be 'centered' or a pixel position (%d|%d)
; Examples: DisplayROI = 16_9, pos:centered
; DisplayROI = (320|200), pos:(10|10)
; Resampling: When scaling is done by the dgVoodoo for the given scaling mode,
; you can choose which filter is to be used for resampling the output image
; Available filters are: "pointsampled", "bilinear", "bicubic", "lanczos-2", "lanczos-3"
; PresentationModel: Low-level swapchain swap effect: if you know what you are doing then it can be
; overridden here. Flip models are better suited for modern OS features like auto HDR,
; while plain legacy models provide the best presentation performance under ideal conditions
; Not all model + output API + OS version combinations are supported.
; "auto", "discard", "seq", "flip_discard", "flip_seq"
; ColorSpace: Color space of the swap chain:
; "appdriven" - an application can choose argb2101010 through D3D9, but it means
; the legacy argb8888_srgb in any other case
; "argb8888_srgb" - Legacy 32 bit output for SDR displays
; "argb2101010_sdr" - 32 bit extended precision for SDR displays
; "argb2101010_sdr_wcg" - Wide Color Gamut format for SDR displays (available from Windows 11 22H2)
; "argb16161616_hdr" - Float16 HDR output (available from Windows 10 1709)
;WatermarkDisplayDuration: Display duration in secs for the watermark(s) if they are enabled (per swapchain)
; 0 or undefined means infinite time
; FreeMouse: If true then physical mouse is free to move inside the game window
; when using emulated scaling and/or application and forced resolution
; differs; can be useful when a game relies on the physical window size
; WindowedAttributes: You can define attributes for forced windowed appearance (separated by commas):
; "borderless" - forces the app window not have any border
; "alwaysontop" - forces the app window into the top-most band
; "fullscreensize" - forces the app window to be full screen size with image scaling inside
; FullscreenAttributes: You can define attributes for fullscreen appearance (separated by commas):
; "fake" - forces fake fullscreen mode with a screen-size window
; FPSLimit: An integer or rational (fractional) value, 0 = unlimited
; Environment: Software environment in which dgVoodoo is running: can be left unspecified (native)
; or can be set to 'DosBox' or 'QEmu'.
; SystemHookFlags: You can define which part of the system should be hooked (x86-DX only):
; "gdi" - for showing graphical contents rendered through GDI
; (like movie playback through the ancient Windows Multimedia AVI player library)
; "cursor" - for suppressing double-cursor symptoms when the cursor is emulated
DesktopResolution =
DesktopBitDepth =
DeframerSize = 1
ImageScaleFactor = 1
CursorScaleFactor = 0
DisplayROI =
Resampling = bilinear
PresentationModel = auto
ColorSpace = appdriven
WatermarkDisplayDuration = 0
FreeMouse = false
WindowedAttributes =
FullscreenAttributes =
FPSLimit = 0
Environment =
SystemHookFlags =
;--------------------------------------------------------------------------
[Glide]
; VideoCard: "voodoo_graphics", "voodoo_rush", "voodoo_2", "voodoo_banshee", "other_greater"
; OnboardRAM: in MBs
; MemorySizeOfTMU: in kBs
; TMUFiltering: "appdriven", "pointsampled", "bilinear"
;
; Resolution: either "unforced", "max", "max_isf", "max_fhd", "max_fhd_isf", "max_qhd", "max_qhd_isf", "desktop", "%dx",
; "max_%dx", "max_isf_%dx", "max_fhd_%dx", "max_fhd_isf_%d"x, "max_qhd_%dx", "max_qhd_isf_%dx", "desktop_%dx"
; or subproperties: h: horizontal, v: vertical
; + optional subproperty refrate: refresh rate in Hz
; e.g. Resolution = max, refrate:60
; Resolution = 2x, refrate:59
; Resolution = h:1280, v:1024, refrate:75
; Resolution = max_2x
; or just use the compact form like "1024x768@60" or "512x384"
;
;Antialiasing: "off", "appdriven", "2x", "4x", "8x", "16x" (your GPU must support the chosen one)
VideoCard = voodoo_2
OnboardRAM = 8
MemorySizeOfTMU = 4096
NumberOfTMUs = 2
TMUFiltering = appdriven
DisableMipmapping = false
Resolution = unforced
Antialiasing = appdriven
EnableGlideGammaRamp = true
ForceVerticalSync = true
ForceEmulatingTruePCIAccess = false
16BitDepthBuffer = false
3DfxWatermark = true
3DfxSplashScreen = false
PointcastPalette = false
EnableInactiveAppState = false
;--------------------------------------------------------------------------
[GlideExt]
; DitheringEffect: "pure32bit", "dither2x2", "dither4x4"
; Dithering: "disabled", "appdriven", "forcealways"
; DitherOrderedMatrixSizeScale: integer scale value for dither matrix size
; 1 = normal, 2 = double size, etc.
; 0 = automatic (the aim is to have some retro feel&look)
DitheringEffect = pure32bit
Dithering = forcealways
DitherOrderedMatrixSizeScale = 0
;--------------------------------------------------------------------------
[DirectX]
; VideoCard: "svga", "internal3D", "geforce_ti_4800", "ati_radeon_8500",
; "matrox_parhelia-512", "geforce_fx_5700_ultra", "geforce_9800_gt"
; VRAM: in MBs (default) or in GBs (e.g. VRAM = 2GB)
; Filtering: "appdriven", "pointsampled", "bilinear", "pointmip", "linearmip", "trilinear"
; or the integer value of an anisotropic filtering level (1-16)
; Mipmapping: "appdriven", "disabled", "autogen_point", "autogen_bilinear"
; KeepFilterIfPointSampled: if enabled then forced filtering affects only non-point sampled textures
; Bilinear2DOperations: if enabled then DirectDraw Blit and CPU-written data is transferred with bilinear scaling
; DisableD3DTnLDevice: if disabled then D3D TnL device is not enumerated and hardware Transform&Light vertex processing
; is not available
DisableAndPassThru = false
VideoCard = internal3D
VRAM = 256
Filtering = appdriven
Mipmapping = appdriven
KeepFilterIfPointSampled = false
Resolution = unforced
Antialiasing = appdriven
AppControlledScreenMode = true
DisableAltEnterToToggleScreenMode = true
Bilinear2DOperations = false
PhongShadingWhenPossible = false
ForceVerticalSync = false
dgVoodooWatermark = true
FastVideoMemoryAccess = false
DisableD3DTnLDevice = false
;--------------------------------------------------------------------------
[DirectXExt]
; AdapterIDType: "nvidia", "amd", "intel" or leave it undefined
; You can define what type of driver version and vendor id's the wrapper should report to
; the application; Some games rely on that information so it can be useful for them
; Can be defined only for SVGA and Internal3D card types; the others have their own wired
; information
; VendorID, DeviceID, SubsystemID, RevisionID:
; Can be defined only for SVGA and Internal3D card types
; You can overwrite these properties even if a non-default AdapterIDType is defined;
; say, you defined an nvidia id type but would like to refine the vendor id
; DefaultEnumeratedResolutions: you can define what resolutions should be enumerated to the application by default
; "all", "classics", "none"
; ExtraEnumeratedResolutions: you can add extra resolutions (separated by commas, max 16) that will get
; enumerated to the application as display adapter supported ones -
; can be useful if an app supports rendering at arbitrary resolutions
; and you have a particular favorite resolution that are not
; enumerated to the application by default
; you can either use the compact resolution format here, or
; "max", "max@refrate" meaning your desktop resolution with a potential refresh rate, or
; "max_4_3", "max_4_3@refrate", "max_16_9", "max_16_9@refrate"
; meaning the maximum resolution with the given aspect ratio calculated from
; the desktop resolution with the given refresh rate, e.g. "max_4_3@60", "max_16_9"
; EnumeratedResolutionBitdepths: you can filter what bitdepths are included in the resolution enumeration
; any subset of {"8", "16", "32"}, or "all"
; DitheringEffect: "high_quality", "ordered2x2", "ordered4x4"
; Dithering: "disabled", "appdriven", "forceon16bit", "forcealways"
; DitherOrderedMatrixSizeScale: integer scale value for dither matrix size
; 1 = normal, 2 = double size, etc.
; 0 = automatic
; DepthBuffersBitDepth: internal bit depth of depth/stencil buffers for 3D rendering (32 bit is not recommended)
; "appdriven", "forcemin24bit", "force32bit"
; Default3DRenderFormat: default format of 3D rendering
; "auto", "argb8888", "argb2101010", "argb16161616"
; auto corresponds to the selected color space
; argb2101010 has the benefit that it is still 32 bit but it can corrupt the rendering
; because of the lowered alpha bits, not recommended
; MaxVSConstRegisters: Max number of vertex shader constant registers (DX8/9 only)
; Can be defined only for SVGA and Internal3D card types
; Valid values are 256 (default), 512 or 1024
; D3D12BoundsChecking: If enabled then the D3D12 backend does bound checking on vs const register file accesses (D3D8/9 only)
; It should always be enabled to be fully compatible with the D3D8/9 specs but unfortunately that can cause
; performance loss while the vast majority of games do not need it; try to enable it if you experience a
; GPU crash with a D3D8/9 game
; NPatchTesselationLevel: Force N-Patch tesselation level (D3D8/9)
; 0 = app driven
; 1 = disable
; 2 to 8 = a forced tesselation level
; Altough tesselation works with all vertex shader versions, you can force level higher than 1
; only for the fixed function or vs.1.x vertex pipeline because of performance and practical reasons
; (forced tesselation also disables adaptive mode (D3D9), but forcing is not recommended at all, anyway)
; DisplayOutputEnableMask: Each bit in this 32 bit value corresponds to a display output. Display outputs of the adapters are numbered
; sequentially. If Adapter0 has n display outputs and Adapter1 has m display outputs attached then the lowest
; n bits match Adapter0 display outputs, the next m bits match Adapter1 outputs, and so on. The lowest bit
; in a group corresponds to Output0. If a bit value is 0 then the display output is disabled for the device
; enumeration, in other words, it is invisible to the application. It can be useful for D3D9 multihead-
; or very special applications where you want to enable only individual displays on your monitor wall.
; MSD3DDeviceNames: if true then original Microsoft D3D device names are exposed
; (some applications check for them and they fail)
; RTTexturesForceScaleAndMSAA: if true then forced resolution scaling and MSAA is
; applied also to rendertarget textures
; Set it to false for games requiring pixel-precise rendering
; but be careful it can EASILY break certain things, not recommended
; SmoothedDepthSampling: if true then extra smoothing is added to depth textures
; when they are sampled
; DeferredScreenModeSwitch: If true the switching to full screen is deferred after the application initialized
; the DirectX device; can be useful for games that don't expect rendering window changes
; during initialization and crash
; PrimarySurfaceBatchedUpdate: If true then direct changes of the primary surface are batched together for presenting them
; If false then each change is instantly presented (debug-like mode)
; SuppressAMDBlacklist: Some AMD GPU models are blacklisted to workaround the solid-color-textures driver issue
; You can suppress it to check out if the problem is fixed in your current driver
AdapterIDType =
VendorID =
DeviceID =
SubsystemID =
RevisionID =
DefaultEnumeratedResolutions = all
ExtraEnumeratedResolutions =
EnumeratedResolutionBitdepths = all
DitheringEffect = high_quality
Dithering = forcealways
DitherOrderedMatrixSizeScale = 0
DepthBuffersBitDepth = appdriven
Default3DRenderFormat = auto
MaxVSConstRegisters = 256
D3D12BoundsChecking = false
NPatchTesselationLevel = 0
DisplayOutputEnableMask = 0xffffffff
MSD3DDeviceNames = false
RTTexturesForceScaleAndMSAA = true
SmoothedDepthSampling = true
DeferredScreenModeSwitch = false
PrimarySurfaceBatchedUpdate = false
SuppressAMDBlacklist = false
;--------------------------------------------------------------------------
[Debug]
; This section affects only debug/spec release builds
;
; Info, Warning, Error
; "Disable" - disables all messages and debugger break
; "Enable" - enables messages and disables debugger break
; "EnableBreak" - enables both messages and breaking into debugger
;
; MaxTraceLevel: Maximum level of tracing API calls
; 0 - Disable
; 1 - API Functions and methods
; 2 - Additional trace info for internals
;
; LogToFile: if false or debugger is detected then output goes to the debug output
; if true and no debugger detected then output goes to 'dgVoodoo.log'
; (not implemented yet, always the default debug output is used)
Info = enable
Warning = enable
Error = enable
MaxTraceLevel = 0
;LogToFile = false
Binary file not shown.
+3 -1
View File
@@ -78,7 +78,9 @@ Write-Host "[pack 2/3] running resource compiler fullscreen (this can take a whi
# Error -> the builder hangs on a modal dialog). Move it aside so the builder uses native DirectDraw;
# the finally restores it for the editor regardless of how the build ends.
$ddraw = Join-Path $Runtime "ddraw.dll"; $ddrawBak = "$ddraw.buildaside"; $ddrawMoved = $false
if (Test-Path $ddraw) { Move-Item $ddraw $ddrawBak -Force; $ddrawMoved = $true; Write-Host " (moved DDrawCompat ddraw.dll aside for the build)" }
$isDDrawCompat = (Test-Path $ddraw) -and -not (Test-Path (Join-Path $Runtime "dgVoodoo.conf"))
if ($isDDrawCompat) { Move-Item $ddraw $ddrawBak -Force; $ddrawMoved = $true; Write-Host " (moved DDrawCompat ddraw.dll aside for the build)" }
elseif (Test-Path $ddraw) { Write-Host " (dgVoodoo2 ddraw.dll detected - keeping in place for build)" }
$code = $null
try {
$argList = "/gosnodialogs -armorlevel 3 -build -norun -nosound -nocd -noeula"