static bool processshader(struct d3d11struct *d3d, struct shadertex *st, struct shaderdata11 *s, bool rendertarget)
{
int uPasses, uPass, uIndex;
- ID3D11RenderTargetView *lpRenderTarget;
+ ID3D11RenderTargetView *lpRenderTarget = NULL;
ID3D11RenderTargetView *lpNewRenderTarget;
struct shadertex *lpWorkTexture;
psEffect_End(d3d, s);
}
- if (lpRenderTarget)
+ if (lpRenderTarget) {
d3d->m_deviceContext->OMSetRenderTargets(1, &lpRenderTarget, NULL);
+ }
lpNewRenderTarget = NULL;
if (psEffect_hasPreProcess2(s) && lpWorkTexture == &s->lpWorkTexture1) {
goto pass2;
}
- lpRenderTarget = NULL;
+ if (lpRenderTarget) {
+ lpRenderTarget->Release();
+ lpRenderTarget = NULL;
+ }
}
psEffect_SetMatrices(&d3d->m_matProj2, &d3d->m_matView2, &d3d->m_matWorld2, s);
uPasses = 0;
if (psEffect_Begin(d3d, psEffect_Combine, &uPasses, &uIndex, s)) {
for (uPass = 0; uPass < uPasses; uPass++) {
- if (!psEffect_BeginPass(d3d, s, uPass, uIndex))
- return NULL;
+ if (!psEffect_BeginPass(d3d, s, uPass, uIndex)) {
+ if (lpRenderTarget) {
+ lpRenderTarget->Release();
+ }
+ return false;
+ }
d3d->m_deviceContext->DrawIndexed(6, 0, 0);
psEffect_EndPass(d3d, s);
}
}
if (rendertarget) {
-
d3d->m_deviceContext->OMSetRenderTargets(1, &lpRenderTarget, NULL);
}
+ if (lpRenderTarget) {
+ lpRenderTarget->Release();
+ }
+
memcpy(st, &s->lpTempTexture, sizeof(struct shadertex));
return true;