mirror of
https://github.com/GTAmodding/re3.git
synced 2024-11-15 13:18:59 +00:00
update librw with stencil states
This commit is contained in:
parent
78c7459b3a
commit
9200810f60
2 changed files with 29 additions and 53 deletions
|
@ -338,6 +338,34 @@ enum {
|
|||
|
||||
static RwRGBAReal black;
|
||||
|
||||
static void
|
||||
SetStencilState(int state)
|
||||
{
|
||||
switch(state){
|
||||
// disable stencil
|
||||
case 0:
|
||||
rw::SetRenderState(rw::STENCILENABLE, FALSE);
|
||||
break;
|
||||
// test against stencil
|
||||
case 1:
|
||||
rw::SetRenderState(rw::STENCILENABLE, TRUE);
|
||||
rw::SetRenderState(rw::STENCILFUNCTION, rw::STENCILNOTEQUAL);
|
||||
rw::SetRenderState(rw::STENCILPASS, rw::STENCILKEEP);
|
||||
rw::SetRenderState(rw::STENCILFAIL, rw::STENCILKEEP);
|
||||
rw::SetRenderState(rw::STENCILZFAIL, rw::STENCILKEEP);
|
||||
rw::SetRenderState(rw::STENCILFUNCTIONMASK, 0xFF);
|
||||
rw::SetRenderState(rw::STENCILFUNCTIONREF, 0xFF);
|
||||
break;
|
||||
// write to stencil
|
||||
case 2:
|
||||
rw::SetRenderState(rw::STENCILENABLE, TRUE);
|
||||
rw::SetRenderState(rw::STENCILFUNCTION, rw::STENCILALWAYS);
|
||||
rw::SetRenderState(rw::STENCILPASS, rw::STENCILREPLACE);
|
||||
rw::SetRenderState(rw::STENCILFUNCTIONREF, 0xFF);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef RW_D3D9
|
||||
struct BuildingInst
|
||||
{
|
||||
|
@ -349,34 +377,6 @@ struct BuildingInst
|
|||
static BuildingInst blendInsts[3][2000];
|
||||
static int numBlendInsts[3];
|
||||
|
||||
static void
|
||||
SetStencilState(int state)
|
||||
{
|
||||
switch(state){
|
||||
// disable stencil
|
||||
case 0:
|
||||
rw::d3d::setRenderState(D3DRS_STENCILENABLE, FALSE);
|
||||
break;
|
||||
// test against stencil
|
||||
case 1:
|
||||
rw::d3d::setRenderState(D3DRS_STENCILENABLE, TRUE);
|
||||
rw::d3d::setRenderState(D3DRS_STENCILFUNC, D3DCMP_NOTEQUAL);
|
||||
rw::d3d::setRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_KEEP);
|
||||
rw::d3d::setRenderState(D3DRS_STENCILFAIL, D3DSTENCILOP_KEEP);
|
||||
rw::d3d::setRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_KEEP);
|
||||
rw::d3d::setRenderState(D3DRS_STENCILMASK, 0xFF);
|
||||
rw::d3d::setRenderState(D3DRS_STENCILREF, 0xFF);
|
||||
break;
|
||||
// write to stencil
|
||||
case 2:
|
||||
rw::d3d::setRenderState(D3DRS_STENCILENABLE, TRUE);
|
||||
rw::d3d::setRenderState(D3DRS_STENCILFUNC, D3DCMP_ALWAYS);
|
||||
rw::d3d::setRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_REPLACE);
|
||||
rw::d3d::setRenderState(D3DRS_STENCILREF, 0xFF);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
SetMatrix(BuildingInst *building, rw::Matrix *worldMat)
|
||||
{
|
||||
|
@ -529,30 +529,6 @@ struct BuildingInst
|
|||
static BuildingInst blendInsts[3][2000];
|
||||
static int numBlendInsts[3];
|
||||
|
||||
static void
|
||||
SetStencilState(int state)
|
||||
{
|
||||
switch(state){
|
||||
// disable stencil
|
||||
case 0:
|
||||
glDisable(GL_STENCIL_TEST);
|
||||
break;
|
||||
// test against stencil
|
||||
case 1:
|
||||
glEnable(GL_STENCIL_TEST);
|
||||
glStencilFunc(GL_NOTEQUAL, 0xFF, 0xFF);
|
||||
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
glStencilMask(0xFF);
|
||||
break;
|
||||
// write to stencil
|
||||
case 2:
|
||||
glEnable(GL_STENCIL_TEST);
|
||||
glStencilFunc(GL_ALWAYS, 0xFF, 0xFF);
|
||||
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
IsTextureTransparent(RwTexture *tex)
|
||||
{
|
||||
|
|
2
vendor/librw
vendored
2
vendor/librw
vendored
|
@ -1 +1 @@
|
|||
Subproject commit efc0c307d79e8a7a7586cfecde109257b9fac738
|
||||
Subproject commit ed9cb45ee9a2749a0a89231bf16f09a5c53bfc92
|
Loading…
Reference in a new issue