From 2238095a82a763926af78614f5a4fdbd7a4bdada Mon Sep 17 00:00:00 2001 From: "gregory.hainaut" Date: Sun, 12 Jan 2014 11:38:50 +0000 Subject: [PATCH] gsdx ogl: do the same as previous commit but for ogl ;) * fix the missing auto interlace opt when cycling with hotkey on linux git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5810 96395faa-99c1-11dd-bbfe-3dabce05a288 --- plugins/GSdx/GSDeviceOGL.cpp | 6 +++--- plugins/GSdx/GSDeviceOGL.h | 2 +- plugins/GSdx/GSRenderer.cpp | 15 +++++++++------ plugins/GSdx/res/convert.glsl | 26 ++++++++++++++++++++++++-- plugins/GSdx/res/glsl_source.h | 28 +++++++++++++++++++++++++--- 5 files changed, 62 insertions(+), 15 deletions(-) diff --git a/plugins/GSdx/GSDeviceOGL.cpp b/plugins/GSdx/GSDeviceOGL.cpp index 253da3f388..3433389ebd 100644 --- a/plugins/GSdx/GSDeviceOGL.cpp +++ b/plugins/GSdx/GSDeviceOGL.cpp @@ -69,19 +69,19 @@ GSDeviceOGL::~GSDeviceOGL() delete (m_vb_sr); // Clean m_merge_obj - for (uint32 i = 0; i < 2; i++) + for (size_t i = 0; i < countof(m_merge_obj.ps); i++) m_shader->Delete(m_merge_obj.ps[i]); delete (m_merge_obj.cb); delete (m_merge_obj.bs); // Clean m_interlace - for (uint32 i = 0; i < 2; i++) + for (size_t i = 0; i < countof(m_interlace.ps); i++) m_shader->Delete(m_interlace.ps[i]); delete (m_interlace.cb); // Clean m_convert m_shader->Delete(m_convert.vs); - for (uint32 i = 0; i < 2; i++) + for (size_t i = 0; i < countof(m_convert.ps); i++) m_shader->Delete(m_convert.ps[i]); delete m_convert.dss; delete m_convert.bs; diff --git a/plugins/GSdx/GSDeviceOGL.h b/plugins/GSdx/GSDeviceOGL.h index ec578ccb15..c33276b2ab 100644 --- a/plugins/GSdx/GSDeviceOGL.h +++ b/plugins/GSdx/GSDeviceOGL.h @@ -476,7 +476,7 @@ class GSDeviceOGL : public GSDevice struct { GLuint vs; // program object - GLuint ps[8]; // program object + GLuint ps[9]; // program object GLuint ln; // sampler object GLuint pt; // sampler object GSDepthStencilOGL* dss; diff --git a/plugins/GSdx/GSRenderer.cpp b/plugins/GSdx/GSRenderer.cpp index a4797499dc..356cfeb747 100644 --- a/plugins/GSdx/GSRenderer.cpp +++ b/plugins/GSdx/GSRenderer.cpp @@ -533,6 +533,9 @@ void GSRenderer::EndCapture() void GSRenderer::KeyEvent(GSKeyEventData* e) { + const unsigned int interlace_nb = 8; + const unsigned int post_shader_nb = 4; + const unsigned int aspect_ratio_nb = 3; #ifdef _WINDOWS if(e->type == KEYPRESS) { @@ -542,15 +545,15 @@ void GSRenderer::KeyEvent(GSKeyEventData* e) switch(e->key) { case VK_F5: - m_interlace = (m_interlace + 8 + step) % 8; + m_interlace = (m_interlace + interlace_nb + step) % interlace_nb; printf("GSdx: Set deinterlace mode to %d (%s).\n", (int)m_interlace, theApp.m_gs_interlace.at(m_interlace).name.c_str()); return; case VK_F6: if( m_wnd->IsManaged() ) - m_aspectratio = (m_aspectratio + 3 + step) % 3; + m_aspectratio = (m_aspectratio + aspect_ratio_nb + step) % aspect_ratio_nb; return; case VK_F7: - m_shader = (m_shader + 4 + step) % 4; + m_shader = (m_shader + post_shader_nb + step) % post_shader_nb; printf("GSdx: Set shader %d.\n", (int)m_shader); return; case VK_DELETE: @@ -576,15 +579,15 @@ void GSRenderer::KeyEvent(GSKeyEventData* e) switch(e->key) { case XK_F5: - m_interlace = (m_interlace + 7 + step) % 7; + m_interlace = (m_interlace + interlace_nb + step) % interlace_nb; fprintf(stderr, "GSdx: Set deinterlace mode to %d (%s).\n", (int)m_interlace, theApp.m_gs_interlace.at(m_interlace).name.c_str()); return; case XK_F6: if( m_wnd->IsManaged() ) - m_aspectratio = (m_aspectratio + 3 + step) % 3; + m_aspectratio = (m_aspectratio + aspect_ratio_nb + step) % aspect_ratio_nb; return; case XK_F7: - m_shader = (m_shader + 3 + step) % 3; + m_shader = (m_shader + post_shader_nb + step) % post_shader_nb; fprintf(stderr,"GSdx: Set shader %d.\n", (int)m_shader); return; case XK_Delete: diff --git a/plugins/GSdx/res/convert.glsl b/plugins/GSdx/res/convert.glsl index d03a31a62f..b2f715e15a 100644 --- a/plugins/GSdx/res/convert.glsl +++ b/plugins/GSdx/res/convert.glsl @@ -132,6 +132,17 @@ vec4 ps_crt(uint i) return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f); } +vec4 ps_scanlines(int i) +{ + float4 mask[2] = + { + float4(1, 1, 1, 0), + float4(0, 0, 0, 0) + }; + + return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f); +} + #ifdef ps_main0 void ps_main0() { @@ -164,11 +175,11 @@ void ps_main7() #endif #ifdef ps_main5 -void ps_main5() // triangular +void ps_main5() // scanlines { highp uvec4 p = uvec4(PSin_p); - vec4 c = ps_crt(((p.x + ((p.y >> 1u) & 1u) * 3u) >> 1u) % 3u); + vec4 c = ps_scanlines(p.y % 2u); SV_Target0 = c; } @@ -185,6 +196,17 @@ void ps_main6() // diagonal } #endif +#ifdef ps_main8 +void ps_main8() // triangular +{ + uvec4 p = uvec4(PSin_p); + + vec4 c = ps_crt(((p.x + ((p.y >> 1u) & 1u) * 3u) >> 1u) % 3u); + + SV_Target0 = c; +} +#endif + // Used for DATE (stencil) // DATM == 1 #ifdef ps_main2 diff --git a/plugins/GSdx/res/glsl_source.h b/plugins/GSdx/res/glsl_source.h index 9f274bc435..377ad18218 100644 --- a/plugins/GSdx/res/glsl_source.h +++ b/plugins/GSdx/res/glsl_source.h @@ -157,6 +157,17 @@ static const char* convert_glsl = " return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f);\n" "}\n" "\n" + "vec4 ps_scanlines(int i)\n" + "{\n" + " float4 mask[2] =\n" + " {\n" + " float4(1, 1, 1, 0),\n" + " float4(0, 0, 0, 0)\n" + " };\n" + "\n" + " return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f);\n" + "}\n" + "\n" "#ifdef ps_main0\n" "void ps_main0()\n" "{\n" @@ -189,11 +200,11 @@ static const char* convert_glsl = "#endif\n" "\n" "#ifdef ps_main5\n" - "void ps_main5() // triangular\n" + "void ps_main5() // scanlines\n" "{\n" " highp uvec4 p = uvec4(PSin_p);\n" "\n" - " vec4 c = ps_crt(((p.x + ((p.y >> 1u) & 1u) * 3u) >> 1u) % 3u);\n" + " vec4 c = ps_scanlines(p.y % 2u);\n" "\n" " SV_Target0 = c;\n" "}\n" @@ -210,6 +221,17 @@ static const char* convert_glsl = "}\n" "#endif\n" "\n" + "#ifdef ps_main8\n" + "void ps_main8() // triangular\n" + "{\n" + " uvec4 p = uvec4(PSin_p);\n" + "\n" + " vec4 c = ps_crt(((p.x + ((p.y >> 1u) & 1u) * 3u) >> 1u) % 3u);\n" + "\n" + " SV_Target0 = c;\n" + "}\n" + "#endif\n" + "\n" "// Used for DATE (stencil)\n" "// DATM == 1\n" "#ifdef ps_main2\n" @@ -1725,7 +1747,7 @@ static const char* fxaa_fx = "#endif\n" "#endif\n" "\n" - "#if !pGL_ES && __VERSION__ > 140\n" + "#if !GL_ES && __VERSION__ > 140\n" "\n" "in SHADER\n" "{\n"