finally fix shadows, mostly
This commit is contained in:
parent
5448969ca1
commit
61c1ebe01c
|
@ -647,15 +647,31 @@ if (PolygonList[NumOpaqueFinalPolys].PolyData->IsShadow) printf("!! GLORG!!! %08
|
||||||
lastwasshadow = true;
|
lastwasshadow = true;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
// clear 'stencil buffer'
|
||||||
UseRenderShader(flags | RenderFlag_ShadowMask);
|
glUseProgram(ClearShaderPlain[2]);
|
||||||
|
|
||||||
|
glDisable(GL_BLEND);
|
||||||
glColorMaski(0, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
|
glColorMaski(0, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
|
||||||
glColorMaski(1, GL_FALSE, GL_FALSE, GL_TRUE, GL_FALSE);
|
glColorMaski(1, GL_FALSE, GL_FALSE, GL_TRUE, GL_FALSE);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
|
|
||||||
|
glDepthFunc(GL_ALWAYS);
|
||||||
|
glStencilFunc(GL_ALWAYS, 0, 0);
|
||||||
|
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, ClearVertexBufferID);
|
||||||
|
glBindVertexArray(ClearVertexArrayID);
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, 2*3);
|
||||||
|
|
||||||
|
// draw actual shadow mask
|
||||||
|
|
||||||
|
UseRenderShader(flags | RenderFlag_ShadowMask);
|
||||||
|
|
||||||
glDepthFunc(GL_GEQUAL);
|
glDepthFunc(GL_GEQUAL);
|
||||||
glStencilFunc(GL_ALWAYS,0,0);
|
|
||||||
glStencilOp(GL_KEEP,GL_KEEP,GL_KEEP);
|
glBindBuffer(GL_ARRAY_BUFFER, VertexBufferID);
|
||||||
|
glBindVertexArray(VertexArrayID);
|
||||||
|
|
||||||
lastwasshadow=true;
|
lastwasshadow=true;
|
||||||
|
|
||||||
darp = false;
|
darp = false;
|
||||||
|
@ -773,20 +789,23 @@ void RenderFrame()
|
||||||
|
|
||||||
glViewport(0, 0, ScreenW, ScreenH);
|
glViewport(0, 0, ScreenW, ScreenH);
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, FramebufferID[0]);
|
if (Accelerated)
|
||||||
|
{
|
||||||
|
//glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, FramebufferTex[FrontBuffer], 0);
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, FramebufferID[FrontBuffer]);
|
||||||
|
|
||||||
|
glActiveTexture(GL_TEXTURE2);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, FramebufferTex[FrontBuffer ? 7 : 5]);
|
||||||
|
|
||||||
|
FrontBuffer = FrontBuffer ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
glColorMaski(0, GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
|
glColorMaski(0, GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
|
||||||
glColorMaski(1, GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
|
glColorMaski(1, GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
|
||||||
glDepthMask(GL_TRUE);
|
glDepthMask(GL_TRUE);
|
||||||
glStencilMask(0xFF);
|
glStencilMask(0xFF);
|
||||||
|
|
||||||
if (Accelerated)
|
|
||||||
{
|
|
||||||
//glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, FramebufferTex[FrontBuffer], 0);
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, FramebufferID[FrontBuffer]);
|
|
||||||
FrontBuffer = FrontBuffer ? 0 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// clear buffers
|
// clear buffers
|
||||||
// TODO: clear bitmap
|
// TODO: clear bitmap
|
||||||
// TODO: check whether 'clear polygon ID' affects translucent polyID
|
// TODO: check whether 'clear polygon ID' affects translucent polyID
|
||||||
|
|
Loading…
Reference in New Issue