mirror of https://github.com/PCSX2/pcsx2.git
GSdx: Add merge sprite hack to GSdx hacks dialog
Adds merge sprite hack to GSDx hacks dialog And ports merge sprite hack to Direct3D renderers. Special thanks to my keyboards Ctrl, c and v buttons for all their hard work in porting this hack.
This commit is contained in:
parent
557b672232
commit
82405982f7
|
@ -314,6 +314,9 @@ void GSRendererDX::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sourc
|
|||
}
|
||||
}
|
||||
|
||||
// Upscaling hack to avoid various line/grid issues
|
||||
MergeSprite(tex);
|
||||
|
||||
if(DATE)
|
||||
{
|
||||
if(dev->HasStencil())
|
||||
|
|
|
@ -41,11 +41,13 @@ GSRendererHW::GSRendererHW(GSTextureCache* tc)
|
|||
m_userhacks_round_sprite_offset = theApp.GetConfigI("UserHacks_round_sprite_offset");
|
||||
m_userhacks_disable_gs_mem_clear = theApp.GetConfigB("UserHacks_DisableGsMemClear");
|
||||
m_userHacks_HPO = theApp.GetConfigI("UserHacks_HalfPixelOffset");
|
||||
m_userHacks_merge_sprite = theApp.GetConfigB("UserHacks_merge_pp_sprite");
|
||||
} else {
|
||||
m_userhacks_align_sprite_X = false;
|
||||
m_userhacks_round_sprite_offset = 0;
|
||||
m_userhacks_disable_gs_mem_clear = false;
|
||||
m_userHacks_HPO = 0;
|
||||
m_userHacks_merge_sprite = false;
|
||||
}
|
||||
|
||||
if (!m_upscale_multiplier) { //Custom Resolution
|
||||
|
@ -403,6 +405,58 @@ GSVector4 GSRendererHW::RealignTargetTextureCoordinate(const GSTextureCache::Sou
|
|||
return half_offset;
|
||||
}
|
||||
|
||||
void GSRendererHW::MergeSprite(GSTextureCache::Source* tex)
|
||||
{
|
||||
// Upscaling hack to avoid various line/grid issues
|
||||
if (m_userHacks_merge_sprite && tex && tex->m_target && (m_vt.m_primclass == GS_SPRITE_CLASS)) {
|
||||
if (PRIM->FST && GSLocalMemory::m_psm[tex->m_TEX0.PSM].fmt < 2 && ((m_vt.m_eq.value & 0xCFFFF) == 0xCFFFF)) {
|
||||
|
||||
// Ideally the hack ought to be enabled in a true paving mode only. I don't know how to do it accurately
|
||||
// neither in a fast way. So instead let's just take the hypothesis that all sprites must have the same
|
||||
// size.
|
||||
// Tested on Tekken 5.
|
||||
GSVertex* v = &m_vertex.buff[0];
|
||||
bool is_paving = true;
|
||||
// SSE optimization: shuffle m[1] to have (4*32 bits) X, Y, U, V
|
||||
int first_dpX = v[1].XYZ.X - v[0].XYZ.X;
|
||||
int first_dpU = v[1].U - v[0].U;
|
||||
for (size_t i = 0; i < m_vertex.next; i += 2) {
|
||||
int dpX = v[i + 1].XYZ.X - v[i].XYZ.X;
|
||||
int dpU = v[i + 1].U - v[i].U;
|
||||
if (dpX != first_dpX || dpU != first_dpU) {
|
||||
is_paving = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
GSVector4 delta_p = m_vt.m_max.p - m_vt.m_min.p;
|
||||
GSVector4 delta_t = m_vt.m_max.t - m_vt.m_min.t;
|
||||
bool is_blit = PrimitiveOverlap() == PRIM_OVERLAP_NO;
|
||||
GL_INS("PP SAMPLER: Dp %f %f Dt %f %f. Is blit %d, is paving %d, count %d", delta_p.x, delta_p.y, delta_t.x, delta_t.y, is_blit, is_paving, m_vertex.tail);
|
||||
#endif
|
||||
|
||||
if (is_paving) {
|
||||
// Replace all sprite with a single fullscreen sprite.
|
||||
GSVertex* s = &m_vertex.buff[0];
|
||||
|
||||
s[0].XYZ.X = static_cast<uint16>((16.0f * m_vt.m_min.p.x) + m_context->XYOFFSET.OFX);
|
||||
s[1].XYZ.X = static_cast<uint16>((16.0f * m_vt.m_max.p.x) + m_context->XYOFFSET.OFX);
|
||||
s[0].XYZ.Y = static_cast<uint16>((16.0f * m_vt.m_min.p.y) + m_context->XYOFFSET.OFY);
|
||||
s[1].XYZ.Y = static_cast<uint16>((16.0f * m_vt.m_max.p.y) + m_context->XYOFFSET.OFY);
|
||||
|
||||
s[0].U = static_cast<uint16>(16.0f * m_vt.m_min.t.x);
|
||||
s[0].V = static_cast<uint16>(16.0f * m_vt.m_min.t.y);
|
||||
s[1].U = static_cast<uint16>(16.0f * m_vt.m_max.t.x);
|
||||
s[1].V = static_cast<uint16>(16.0f * m_vt.m_max.t.y);
|
||||
|
||||
m_vertex.head = m_vertex.tail = m_vertex.next = 2;
|
||||
m_index.tail = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GSRendererHW::InvalidateVideoMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r)
|
||||
{
|
||||
// printf("[%d] InvalidateVideoMem %d,%d - %d,%d %05x (%d)\n", (int)m_perfmon.GetFrame(), r.left, r.top, r.right, r.bottom, (int)BITBLTBUF.DBP, (int)BITBLTBUF.DPSM);
|
||||
|
|
|
@ -40,6 +40,7 @@ private:
|
|||
bool m_large_framebuffer;
|
||||
bool m_userhacks_align_sprite_X;
|
||||
bool m_userhacks_disable_gs_mem_clear;
|
||||
bool m_userHacks_merge_sprite;
|
||||
|
||||
#pragma region hacks
|
||||
|
||||
|
@ -52,7 +53,6 @@ private:
|
|||
void OI_GsMemClear(); // always on
|
||||
void OI_DoubleHalfClear(GSTexture* rt, GSTexture* ds); // always on
|
||||
|
||||
bool OI_DoubleHalfClear_Vertical(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t);
|
||||
bool OI_FFXII(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t);
|
||||
bool OI_FFX(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t);
|
||||
bool OI_MetalSlug6(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t);
|
||||
|
@ -67,7 +67,6 @@ private:
|
|||
bool OI_SuperManReturns(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t);
|
||||
bool OI_ArTonelico2(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t);
|
||||
bool OI_ItadakiStreet(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t);
|
||||
bool OI_FFVIIDoC(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t);
|
||||
|
||||
void OO_DBZBT2();
|
||||
void OO_MajokkoALaMode2();
|
||||
|
@ -166,8 +165,9 @@ public:
|
|||
int GetUpscaleMultiplier();
|
||||
GSVector2i GetCustomResolution();
|
||||
void SetScaling();
|
||||
GSVector4 RealignTargetTextureCoordinate(const GSTextureCache::Source* tex);
|
||||
void Lines2Sprites();
|
||||
GSVector4 RealignTargetTextureCoordinate(const GSTextureCache::Source* tex);
|
||||
void MergeSprite(GSTextureCache::Source* tex);
|
||||
|
||||
void Reset();
|
||||
void VSync(int field);
|
||||
|
|
|
@ -37,7 +37,6 @@ GSRendererOGL::GSRendererOGL()
|
|||
UserHacks_TCOffset = theApp.GetConfigI("UserHacks_TCOffset");
|
||||
UserHacks_TCO_x = (UserHacks_TCOffset & 0xFFFF) / -1000.0f;
|
||||
UserHacks_TCO_y = ((UserHacks_TCOffset >> 16) & 0xFFFF) / -1000.0f;
|
||||
UserHacks_merge_sprite = theApp.GetConfigB("UserHacks_merge_pp_sprite");
|
||||
UserHacks_unscale_pt_ln = theApp.GetConfigB("UserHacks_unscale_point_line");
|
||||
UserHacks_HPO = theApp.GetConfigI("UserHacks_HalfPixelOffset");
|
||||
UserHacks_tri_filter = static_cast<TriFiltering>(theApp.GetConfigI("UserHacks_TriFilter"));
|
||||
|
@ -49,7 +48,6 @@ GSRendererOGL::GSRendererOGL()
|
|||
UserHacks_TCOffset = 0;
|
||||
UserHacks_TCO_x = 0;
|
||||
UserHacks_TCO_y = 0;
|
||||
UserHacks_merge_sprite = false;
|
||||
UserHacks_unscale_pt_ln = false;
|
||||
UserHacks_HPO = 0;
|
||||
UserHacks_tri_filter = TriFiltering::None;
|
||||
|
@ -1093,53 +1091,7 @@ void GSRendererOGL::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour
|
|||
EmulateChannelShuffle(&rt, tex);
|
||||
|
||||
// Upscaling hack to avoid various line/grid issues
|
||||
if (UserHacks_merge_sprite && tex && tex->m_target && (m_vt.m_primclass == GS_SPRITE_CLASS)) {
|
||||
if (PRIM->FST && GSLocalMemory::m_psm[tex->m_TEX0.PSM].fmt < 2 && ((m_vt.m_eq.value & 0xCFFFF) == 0xCFFFF)) {
|
||||
|
||||
// Ideally the hack ought to be enabled in a true paving mode only. I don't know how to do it accurately
|
||||
// neither in a fast way. So instead let's just take the hypothesis that all sprites must have the same
|
||||
// size.
|
||||
// Tested on Tekken 5.
|
||||
GSVertex* v = &m_vertex.buff[0];
|
||||
bool is_paving = true;
|
||||
// SSE optimization: shuffle m[1] to have (4*32 bits) X, Y, U, V
|
||||
int first_dpX = v[1].XYZ.X - v[0].XYZ.X;
|
||||
int first_dpU = v[1].U - v[0].U;
|
||||
for (size_t i = 0; i < m_vertex.next; i += 2) {
|
||||
int dpX = v[i+1].XYZ.X - v[i].XYZ.X;
|
||||
int dpU = v[i+1].U - v[i].U;
|
||||
if (dpX != first_dpX || dpU != first_dpU) {
|
||||
is_paving = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
GSVector4 delta_p = m_vt.m_max.p - m_vt.m_min.p;
|
||||
GSVector4 delta_t = m_vt.m_max.t - m_vt.m_min.t;
|
||||
bool is_blit = PrimitiveOverlap() == PRIM_OVERLAP_NO;
|
||||
GL_INS("PP SAMPLER: Dp %f %f Dt %f %f. Is blit %d, is paving %d, count %d", delta_p.x, delta_p.y, delta_t.x, delta_t.y, is_blit, is_paving, m_vertex.tail);
|
||||
#endif
|
||||
|
||||
if (is_paving) {
|
||||
// Replace all sprite with a single fullscreen sprite.
|
||||
GSVertex* s = &m_vertex.buff[0];
|
||||
|
||||
s[0].XYZ.X = static_cast<uint16>((16.0f * m_vt.m_min.p.x) + m_context->XYOFFSET.OFX);
|
||||
s[1].XYZ.X = static_cast<uint16>((16.0f * m_vt.m_max.p.x) + m_context->XYOFFSET.OFX);
|
||||
s[0].XYZ.Y = static_cast<uint16>((16.0f * m_vt.m_min.p.y) + m_context->XYOFFSET.OFY);
|
||||
s[1].XYZ.Y = static_cast<uint16>((16.0f * m_vt.m_max.p.y) + m_context->XYOFFSET.OFY);
|
||||
|
||||
s[0].U = static_cast<uint16>(16.0f * m_vt.m_min.t.x);
|
||||
s[0].V = static_cast<uint16>(16.0f * m_vt.m_min.t.y);
|
||||
s[1].U = static_cast<uint16>(16.0f * m_vt.m_max.t.x);
|
||||
s[1].V = static_cast<uint16>(16.0f * m_vt.m_max.t.y);
|
||||
|
||||
m_vertex.head = m_vertex.tail = m_vertex.next = 2;
|
||||
m_index.tail = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
MergeSprite(tex);
|
||||
|
||||
// Always check if primitive overlap. The function will return PRIM_OVERLAP_UNKNOW for non sprite primitive
|
||||
m_prim_overlap = PrimitiveOverlap();
|
||||
|
|
|
@ -52,7 +52,6 @@ class GSRendererOGL final : public GSRendererHW
|
|||
|
||||
unsigned int UserHacks_TCOffset;
|
||||
float UserHacks_TCO_x, UserHacks_TCO_y;
|
||||
bool UserHacks_merge_sprite;
|
||||
bool UserHacks_unscale_pt_ln;
|
||||
int UserHacks_HPO;
|
||||
TriFiltering UserHacks_tri_filter;
|
||||
|
|
|
@ -147,6 +147,9 @@ const char* dialog_message(int ID, bool* updateText) {
|
|||
case IDC_MEMORY_WRAPPING:
|
||||
return "Emulates GS memory wrapping accurately. This fixes issues where part of the image is cut-off by block shaped sections such as the FMVs in Wallace & Gromit: The Curse of the Were-Rabbit and Thrillville.\n"
|
||||
"Note: This hack can have a small impact on performance.";
|
||||
case IDC_MERGE_PP_SPRITE:
|
||||
return "Replaces post-processing multiple paving sprites by a single fat sprite. It reduces various upscaling lines.\n"
|
||||
"Note: This hack is a work in progress.";
|
||||
case IDC_GEOMETRY_SHADER_OVERRIDE:
|
||||
return "Allows the GPU instead of just the CPU to transform lines into sprites. This reduces CPU load and bandwidth requirement, but it is heavier on the GPU.\n"
|
||||
"Automatic detection is recommended.\nNote: This option is only supported by GPUs which support at least Direct3D 10.";
|
||||
|
|
|
@ -80,6 +80,7 @@ enum {
|
|||
IDC_AUTO_FLUSH,
|
||||
IDC_UNSCALE_POINT_LINE,
|
||||
IDC_MEMORY_WRAPPING,
|
||||
IDC_MERGE_PP_SPRITE,
|
||||
IDC_GEOMETRY_SHADER_OVERRIDE,
|
||||
IDC_IMAGE_LOAD_STORE,
|
||||
IDC_OSD_LOG,
|
||||
|
|
|
@ -693,6 +693,7 @@ void GSHacksDlg::OnInit()
|
|||
CheckDlgButton(m_hWnd, IDC_AUTO_FLUSH, theApp.GetConfigB("UserHacks_AutoFlush"));
|
||||
CheckDlgButton(m_hWnd, IDC_UNSCALE_POINT_LINE, theApp.GetConfigB("UserHacks_unscale_point_line"));
|
||||
CheckDlgButton(m_hWnd, IDC_MEMORY_WRAPPING, theApp.GetConfigB("wrap_gs_mem"));
|
||||
CheckDlgButton(m_hWnd, IDC_MERGE_PP_SPRITE, theApp.GetConfigB("UserHacks_merge_pp_sprite"));
|
||||
|
||||
ComboBoxInit(IDC_TRI_FILTER, theApp.m_gs_trifilter, theApp.GetConfigI("UserHacks_TriFilter"));
|
||||
ComboBoxInit(IDC_OFFSETHACK, theApp.m_gs_offset_hack, theApp.GetConfigI("UserHacks_HalfPixelOffset"));
|
||||
|
@ -731,6 +732,7 @@ void GSHacksDlg::OnInit()
|
|||
EnableWindow(GetDlgItem(m_hWnd, IDC_ROUND_SPRITE_TEXT), !native);
|
||||
EnableWindow(GetDlgItem(m_hWnd, IDC_OFFSETHACK_TEXT), !native);
|
||||
EnableWindow(GetDlgItem(m_hWnd, IDC_OFFSETHACK), !native);
|
||||
EnableWindow(GetDlgItem(m_hWnd, IDC_MERGE_PP_SPRITE), !native);
|
||||
|
||||
// OpenGL Very Advanced Custom Settings:
|
||||
EnableWindow(GetDlgItem(m_hWnd, IDC_GEOMETRY_SHADER_OVERRIDE), ogl);
|
||||
|
@ -759,6 +761,7 @@ void GSHacksDlg::OnInit()
|
|||
AddTooltip(IDC_UNSCALE_POINT_LINE);
|
||||
AddTooltip(IDC_MEMORY_WRAPPING);
|
||||
AddTooltip(IDC_TRI_FILTER);
|
||||
AddTooltip(IDC_MERGE_PP_SPRITE);
|
||||
AddTooltip(IDC_GEOMETRY_SHADER_OVERRIDE);
|
||||
AddTooltip(IDC_IMAGE_LOAD_STORE);
|
||||
}
|
||||
|
@ -815,6 +818,7 @@ bool GSHacksDlg::OnMessage(UINT message, WPARAM wParam, LPARAM lParam)
|
|||
theApp.SetConfig("UserHacks_AutoFlush", (int)IsDlgButtonChecked(m_hWnd, IDC_AUTO_FLUSH));
|
||||
theApp.SetConfig("UserHacks_unscale_point_line", (int)IsDlgButtonChecked(m_hWnd, IDC_UNSCALE_POINT_LINE));
|
||||
theApp.SetConfig("wrap_gs_mem", (int)IsDlgButtonChecked(m_hWnd, IDC_MEMORY_WRAPPING));
|
||||
theApp.SetConfig("UserHacks_merge_pp_sprite", (int)IsDlgButtonChecked(m_hWnd, IDC_MERGE_PP_SPRITE));
|
||||
|
||||
unsigned int TCOFFSET = SendMessage(GetDlgItem(m_hWnd, IDC_TCOFFSETX), UDM_GETPOS, 0, 0) & 0xFFFF;
|
||||
TCOFFSET |= (SendMessage(GetDlgItem(m_hWnd, IDC_TCOFFSETY), UDM_GETPOS, 0, 0) & 0xFFFF) << 16;
|
||||
|
|
|
@ -111,13 +111,13 @@ IDB_PSX_NULL BITMAP "res\\psx-logo-null.bmp"
|
|||
// Dialog
|
||||
//
|
||||
|
||||
IDD_HACKS DIALOGEX 0, 0, 210, 286
|
||||
IDD_HACKS DIALOGEX 0, 0, 210, 299
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Advanced Settings & Hacks"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
// Hacks settings:
|
||||
GROUPBOX "USE AT YOUR OWN RISK!",IDC_STATIC,7,7,196,202,0,WS_EX_TRANSPARENT
|
||||
GROUPBOX "USE AT YOUR OWN RISK!",IDC_STATIC,7,7,196,215,0,WS_EX_TRANSPARENT
|
||||
CONTROL "Align Sprite",IDC_ALIGN_SPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,19,58,8
|
||||
CONTROL "Wild Arms Offset",IDC_WILDHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,19,70,8
|
||||
CONTROL "Fast Texture Invalidation",IDC_FAST_TC_INV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,32,92,8
|
||||
|
@ -125,37 +125,38 @@ BEGIN
|
|||
CONTROL "Auto Flush",IDC_AUTO_FLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,45,55,8
|
||||
CONTROL "Memory Wrapping",IDC_MEMORY_WRAPPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,45,75,8
|
||||
CONTROL "Unscale Point and Line",IDC_UNSCALE_POINT_LINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,58,90,8
|
||||
CONTROL "Disable Depth Emulation",IDC_TC_DEPTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,58,92,8
|
||||
CONTROL "Merge Sprite",IDC_MERGE_PP_SPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,58,90,8
|
||||
CONTROL "Alpha",IDC_ALPHAHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,71,34,8
|
||||
CONTROL "Alpha Stencil",IDC_ALPHASTENCIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,71,57,8
|
||||
RTEXT "MSAA:",IDC_MSAA_TEXT,54,86,22,8
|
||||
COMBOBOX IDC_MSAACB,80,83,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Trilinear Filtering:",IDC_TRI_FILTER_TEXT,16,101,60,8
|
||||
COMBOBOX IDC_TRI_FILTER,80,98,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Half-pixel Offset:",IDC_OFFSETHACK_TEXT,14,116,62,8
|
||||
COMBOBOX IDC_OFFSETHACK,80,113,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Sprite:",IDC_SPRITEHACK_TEXT,54,131,22,8
|
||||
COMBOBOX IDC_SPRITEHACK,80,128,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Round Sprite:",IDC_ROUND_SPRITE_TEXT,31,146,45,8
|
||||
COMBOBOX IDC_ROUND_SPRITE,80,143,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Skipdraw:",IDC_STATIC,44,161,32,8
|
||||
EDITTEXT IDC_SKIPDRAWHACKEDIT,80,158,116,14,ES_RIGHT | ES_AUTOHSCROLL
|
||||
CONTROL "",IDC_SKIPDRAWHACK,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,105,156,11,14
|
||||
RTEXT "TC Offset X:",IDC_STATIC,32,176,44,8
|
||||
EDITTEXT IDC_TCOFFSETX2,80,173,116,14,ES_RIGHT | ES_AUTOHSCROLL
|
||||
CONTROL "",IDC_TCOFFSETX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,127,171,11,14
|
||||
RTEXT "TC Offset Y:",IDC_STATIC,32,191,44,8
|
||||
EDITTEXT IDC_TCOFFSETY2,80,188,116,14,ES_RIGHT | ES_AUTOHSCROLL
|
||||
CONTROL "",IDC_TCOFFSETY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,127,186,11,14
|
||||
CONTROL "Disable Depth Emulation",IDC_TC_DEPTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,84,92,8
|
||||
RTEXT "MSAA:",IDC_MSAA_TEXT,54,99,22,8
|
||||
COMBOBOX IDC_MSAACB,80,96,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Trilinear Filtering:",IDC_TRI_FILTER_TEXT,16,114,60,8
|
||||
COMBOBOX IDC_TRI_FILTER,80,111,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Half-pixel Offset:",IDC_OFFSETHACK_TEXT,14,129,62,8
|
||||
COMBOBOX IDC_OFFSETHACK,80,126,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Sprite:",IDC_SPRITEHACK_TEXT,54,144,22,8
|
||||
COMBOBOX IDC_SPRITEHACK,80,141,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Round Sprite:",IDC_ROUND_SPRITE_TEXT,31,159,45,8
|
||||
COMBOBOX IDC_ROUND_SPRITE,80,156,116,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Skipdraw:",IDC_STATIC,44,174,32,8
|
||||
EDITTEXT IDC_SKIPDRAWHACKEDIT,80,171,116,14,ES_RIGHT | ES_AUTOHSCROLL
|
||||
CONTROL "",IDC_SKIPDRAWHACK,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,105,169,11,14
|
||||
RTEXT "TC Offset X:",IDC_STATIC,32,189,44,8
|
||||
EDITTEXT IDC_TCOFFSETX2,80,186,116,14,ES_RIGHT | ES_AUTOHSCROLL
|
||||
CONTROL "",IDC_TCOFFSETX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,127,184,11,14
|
||||
RTEXT "TC Offset Y:",IDC_STATIC,32,204,44,8
|
||||
EDITTEXT IDC_TCOFFSETY2,80,201,116,14,ES_RIGHT | ES_AUTOHSCROLL
|
||||
CONTROL "",IDC_TCOFFSETY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,127,199,11,14
|
||||
// OpenGL Advanced Settings:
|
||||
GROUPBOX "OpenGL Very Advanced Custom Settings",IDC_STATIC,7,212,196,48,0,WS_EX_TRANSPARENT
|
||||
RTEXT "Geometry Shader:",IDC_GEOMETRY_SHADER_TEXT,14,227,62,8
|
||||
COMBOBOX IDC_GEOMETRY_SHADER_OVERRIDE,80,224,97,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Image Load Store:",IDC_IMAGE_LOAD_STORE_TEXT,14,242,62,8
|
||||
COMBOBOX IDC_IMAGE_LOAD_STORE,80,239,97,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
GROUPBOX "OpenGL Very Advanced Custom Settings",IDC_STATIC,7,225,196,48,0,WS_EX_TRANSPARENT
|
||||
RTEXT "Geometry Shader:",IDC_GEOMETRY_SHADER_TEXT,14,240,62,8
|
||||
COMBOBOX IDC_GEOMETRY_SHADER_OVERRIDE,80,237,97,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
RTEXT "Image Load Store:",IDC_IMAGE_LOAD_STORE_TEXT,14,255,62,8
|
||||
COMBOBOX IDC_IMAGE_LOAD_STORE,80,252,97,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
// General Settings:
|
||||
DEFPUSHBUTTON "OK",IDOK,52,265,50,14
|
||||
DEFPUSHBUTTON "Cancel",IDCANCEL,108,265,50,14
|
||||
DEFPUSHBUTTON "OK",IDOK,52,278,50,14
|
||||
DEFPUSHBUTTON "Cancel",IDCANCEL,108,278,50,14
|
||||
END
|
||||
|
||||
IDD_SHADER DIALOGEX 0, 0, 248, 230
|
||||
|
|
|
@ -102,6 +102,7 @@
|
|||
#define IDC_TRI_FILTER 2123
|
||||
#define IDC_TRI_FILTER_TEXT 2124
|
||||
#define IDC_UNSCALE_POINT_LINE 2125
|
||||
#define IDC_MERGE_PP_SPRITE 2126
|
||||
// Shader:
|
||||
#define IDC_SHADEBOOST 2140
|
||||
#define IDC_FXAA 2141
|
||||
|
|
Loading…
Reference in New Issue