From 7c5c0218269702d961e41b30183aecda9171f71c Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 23 Feb 2019 16:55:20 +0200 Subject: [PATCH] Shader mask handling update. --- od-win32/direct3d.cpp | 9 +++++---- od-win32/direct3d11.cpp | 12 +++++++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/od-win32/direct3d.cpp b/od-win32/direct3d.cpp index 5ffc90f1..0e7a519a 100644 --- a/od-win32/direct3d.cpp +++ b/od-win32/direct3d.cpp @@ -84,8 +84,9 @@ static const int ledtypes[] = { #define SHADERTYPE_BEFORE 1 #define SHADERTYPE_AFTER 2 #define SHADERTYPE_MIDDLE 3 -#define SHADERTYPE_MASK_BEFORE 3 -#define SHADERTYPE_MASK_AFTER 4 +#define SHADERTYPE_MASK_BEFORE 4 +#define SHADERTYPE_MASK_AFTER 5 +#define SHADERTYPE_MASK_MIDDLE 6 #define SHADERTYPE_POST 10 struct shaderdata @@ -2522,7 +2523,7 @@ static int restoredeviceobjects (struct d3dstruct *d3d) } } if (d3d->filterd3d->gfx_filtermask[2 * MAX_FILTERSHADERS][0]) { - struct shaderdata *s = allocshaderslot (d3d, SHADERTYPE_MASK_AFTER); + struct shaderdata *s = allocshaderslot (d3d, SHADERTYPE_MASK_MIDDLE); createmasktexture (d3d, d3d->filterd3d->gfx_filtermask[2 * MAX_FILTERSHADERS], s); } for (int i = 0; i < MAX_FILTERSHADERS; i++) { @@ -3483,7 +3484,7 @@ static void D3D_render2(struct d3dstruct *d3d, int mode) struct shaderdata *s = &d3d->shaders[i]; if (s->type == SHADERTYPE_AFTER) after = i; - if (s->masktexture) + if (s->type == SHADERTYPE_MASK_MIDDLE && s->masktexture) masktexture = s->masktexture; } diff --git a/od-win32/direct3d11.cpp b/od-win32/direct3d11.cpp index 2cc8d405..c08503a6 100644 --- a/od-win32/direct3d11.cpp +++ b/od-win32/direct3d11.cpp @@ -107,8 +107,9 @@ static const int ledtypes[] = { #define SHADERTYPE_BEFORE 1 #define SHADERTYPE_AFTER 2 #define SHADERTYPE_MIDDLE 3 -#define SHADERTYPE_MASK_BEFORE 3 -#define SHADERTYPE_MASK_AFTER 4 +#define SHADERTYPE_MASK_BEFORE 4 +#define SHADERTYPE_MASK_AFTER 5 +#define SHADERTYPE_MASK_MIDDLE 6 #define SHADERTYPE_POST 10 struct shadertex @@ -1504,6 +1505,7 @@ static void setupscenecoords(struct d3d11struct *d3d, bool normalrender) d3d->m_screenWidth, d3d->m_screenHeight, d3d->m_bitmapWidth, d3d->m_bitmapHeight); } + d3d->sr2 = sr; d3d->dr2 = dr; d3d->zr2 = zr; @@ -3994,7 +3996,7 @@ static void TextureShaderClass_RenderShader(struct d3d11struct *d3d) d3d->m_deviceContext->VSSetShader(d3d->m_vertexShader, NULL, 0); bool mask = false; for (int i = 0; i < MAX_SHADERS; i++) { - if (d3d->shaders[i].type == SHADERTYPE_MASK_AFTER && d3d->shaders[i].masktexturerv) { + if (d3d->shaders[i].type == SHADERTYPE_MASK_MIDDLE && d3d->shaders[i].masktexturerv) { mask = true; } } @@ -4214,7 +4216,7 @@ static bool renderframe(struct d3d11struct *d3d) int after = -1; for (int i = 0; i < MAX_SHADERS; i++) { struct shaderdata11 *s = &d3d->shaders[i]; - if (s->type == SHADERTYPE_MASK_AFTER && s->masktexturerv) { + if (s->type == SHADERTYPE_MASK_MIDDLE && s->masktexturerv) { d3d->m_deviceContext->PSSetShaderResources(1, 1, &s->masktexturerv); mask = true; } @@ -4381,7 +4383,7 @@ static bool restore(struct d3d11struct *d3d) } } if (d3d->filterd3d->gfx_filtermask[2 * MAX_FILTERSHADERS][0]) { - struct shaderdata11 *s = allocshaderslot(d3d, SHADERTYPE_MASK_AFTER); + struct shaderdata11 *s = allocshaderslot(d3d, SHADERTYPE_MASK_MIDDLE); if (!createmasktexture(d3d, d3d->filterd3d->gfx_filtermask[2 * MAX_FILTERSHADERS], s)) { freeshaderdata(s); } -- 2.47.3