mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-02-17 01:31:25 +00:00
- some cleanup and preparation on RenderState interface.
This commit is contained in:
parent
3c3be0d349
commit
9ef5e00cdf
13 changed files with 73 additions and 51 deletions
|
@ -130,7 +130,7 @@ void FGLModelRenderer::SetInterpolation(double inter)
|
||||||
void FGLModelRenderer::SetMaterial(FTexture *skin, bool clampNoFilter, int translation)
|
void FGLModelRenderer::SetMaterial(FTexture *skin, bool clampNoFilter, int translation)
|
||||||
{
|
{
|
||||||
FMaterial * tex = FMaterial::ValidateTexture(skin, false);
|
FMaterial * tex = FMaterial::ValidateTexture(skin, false);
|
||||||
gl_RenderState.SetMaterial(tex, clampNoFilter ? CLAMP_NOFILTER : CLAMP_NONE, translation, -1, false);
|
gl_RenderState.ApplyMaterial(tex, clampNoFilter ? CLAMP_NOFILTER : CLAMP_NONE, translation, -1);
|
||||||
|
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
if (modellightindex != -1) gl_RenderState.ApplyLightIndex(modellightindex);
|
if (modellightindex != -1) gl_RenderState.ApplyLightIndex(modellightindex);
|
||||||
|
|
|
@ -505,7 +505,7 @@ void FGLRenderer::Draw2D(F2DDrawer *drawer)
|
||||||
if (mat == nullptr) continue;
|
if (mat == nullptr) continue;
|
||||||
|
|
||||||
if (gltrans == -1 && cmd.mTranslation != nullptr) gltrans = cmd.mTranslation->GetUniqueIndex();
|
if (gltrans == -1 && cmd.mTranslation != nullptr) gltrans = cmd.mTranslation->GetUniqueIndex();
|
||||||
gl_RenderState.SetMaterial(mat, cmd.mFlags & F2DDrawer::DTF_Wrap ? CLAMP_NONE : CLAMP_XY_NOMIP, -gltrans, -1, cmd.mDrawMode == F2DDrawer::DTM_AlphaTexture);
|
gl_RenderState.ApplyMaterial(mat, cmd.mFlags & F2DDrawer::DTF_Wrap ? CLAMP_NONE : CLAMP_XY_NOMIP, -gltrans, -1);
|
||||||
gl_RenderState.EnableTexture(true);
|
gl_RenderState.EnableTexture(true);
|
||||||
|
|
||||||
// Canvas textures are stored upside down
|
// Canvas textures are stored upside down
|
||||||
|
|
|
@ -228,6 +228,12 @@ void FGLRenderState::Apply()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mMaterial.mChanged)
|
||||||
|
{
|
||||||
|
ApplyMaterial(mMaterial.mMaterial, mMaterial.mClampMode, mMaterial.mTranslation, mMaterial.mOverrideShader);
|
||||||
|
mMaterial.mChanged = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (mStencil.mChanged)
|
if (mStencil.mChanged)
|
||||||
{
|
{
|
||||||
int recursion = GLRenderer->mPortalState.GetRecursion();
|
int recursion = GLRenderer->mPortalState.GetRecursion();
|
||||||
|
@ -242,6 +248,21 @@ void FGLRenderState::Apply()
|
||||||
else
|
else
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
mStencil.mChanged = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mBias.mChanged)
|
||||||
|
{
|
||||||
|
if (mBias.mFactor == 0 && mBias.mUnits == 0)
|
||||||
|
{
|
||||||
|
glDisable(GL_POLYGON_OFFSET_FILL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
glEnable(GL_POLYGON_OFFSET_FILL);
|
||||||
|
}
|
||||||
|
glPolygonOffset(mBias.mFactor, mBias.mUnits);
|
||||||
|
mBias.mChanged = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mVertexBuffer != mCurrentVertexBuffer)
|
if (mVertexBuffer != mCurrentVertexBuffer)
|
||||||
|
@ -257,6 +278,7 @@ void FGLRenderState::Apply()
|
||||||
|
|
||||||
void FGLRenderState::ApplyLightIndex(int index)
|
void FGLRenderState::ApplyLightIndex(int index)
|
||||||
{
|
{
|
||||||
|
if (index == -2) index = mLightIndex; // temporary workaround so that both old and new code can be handled.
|
||||||
if (index > -1 && GLRenderer->mLights->GetBufferType() == GL_UNIFORM_BUFFER)
|
if (index > -1 && GLRenderer->mLights->GetBufferType() == GL_UNIFORM_BUFFER)
|
||||||
{
|
{
|
||||||
index = GLRenderer->mLights->BindUBO(index);
|
index = GLRenderer->mLights->BindUBO(index);
|
||||||
|
@ -270,7 +292,7 @@ void FGLRenderState::ApplyLightIndex(int index)
|
||||||
//
|
//
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
void FGLRenderState::SetMaterial(FMaterial *mat, int clampmode, int translation, int overrideshader, bool alphatexture)
|
void FGLRenderState::ApplyMaterial(FMaterial *mat, int clampmode, int translation, int overrideshader)
|
||||||
{
|
{
|
||||||
if (mat->tex->bHasCanvas)
|
if (mat->tex->bHasCanvas)
|
||||||
{
|
{
|
||||||
|
|
|
@ -99,7 +99,7 @@ public:
|
||||||
lastMaterial = nullptr;
|
lastMaterial = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetMaterial(FMaterial *mat, int clampmode, int translation, int overrideshader, bool alphatexture);
|
void ApplyMaterial(FMaterial *mat, int clampmode, int translation, int overrideshader);
|
||||||
|
|
||||||
void Apply();
|
void Apply();
|
||||||
void ApplyLightIndex(int index);
|
void ApplyLightIndex(int index);
|
||||||
|
@ -233,14 +233,6 @@ public:
|
||||||
return mPassType == GBUFFER_PASS ? 3 : 1;
|
return mPassType == GBUFFER_PASS ? 3 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplyMaterial()
|
|
||||||
{
|
|
||||||
if (mMaterial.mChanged)
|
|
||||||
{
|
|
||||||
SetMaterial(mMaterial.mMaterial, mMaterial.mClampMode, mMaterial.mTranslation, mMaterial.mOverrideShader, false);
|
|
||||||
mMaterial.mChanged = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern FGLRenderState gl_RenderState;
|
extern FGLRenderState gl_RenderState;
|
||||||
|
|
|
@ -280,8 +280,8 @@ void FDrawInfo::Draw(EDrawType dt, FRenderState &state, int index, int count, bo
|
||||||
assert(&state == &gl_RenderState);
|
assert(&state == &gl_RenderState);
|
||||||
if (apply)
|
if (apply)
|
||||||
{
|
{
|
||||||
gl_RenderState.ApplyMaterial();
|
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
|
gl_RenderState.ApplyLightIndex(-2);
|
||||||
}
|
}
|
||||||
drawcalls.Clock();
|
drawcalls.Clock();
|
||||||
glDrawArrays(dt2gl[dt], index, count);
|
glDrawArrays(dt2gl[dt], index, count);
|
||||||
|
@ -293,8 +293,8 @@ void FDrawInfo::DrawIndexed(EDrawType dt, FRenderState &state, int index, int co
|
||||||
assert(&state == &gl_RenderState);
|
assert(&state == &gl_RenderState);
|
||||||
if (apply)
|
if (apply)
|
||||||
{
|
{
|
||||||
gl_RenderState.ApplyMaterial();
|
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
|
gl_RenderState.ApplyLightIndex(-2);
|
||||||
}
|
}
|
||||||
drawcalls.Clock();
|
drawcalls.Clock();
|
||||||
glDrawElements(dt2gl[dt], count, GL_UNSIGNED_INT, GLRenderer->mVBO->GetIndexPointer() + index);
|
glDrawElements(dt2gl[dt], count, GL_UNSIGNED_INT, GLRenderer->mVBO->GetIndexPointer() + index);
|
||||||
|
|
|
@ -123,15 +123,11 @@ void FDrawInfo::DrawSubsectors(GLFlat *flat, int pass, bool istrans)
|
||||||
|
|
||||||
// Push bleeding floor/ceiling textures back a little in the z-buffer
|
// Push bleeding floor/ceiling textures back a little in the z-buffer
|
||||||
// so they don't interfere with overlapping mid textures.
|
// so they don't interfere with overlapping mid textures.
|
||||||
glEnable(GL_POLYGON_OFFSET_FILL);
|
gl_RenderState.SetDepthBias(1, 128);
|
||||||
glPolygonOffset(1.0f, 128.0f);
|
|
||||||
|
|
||||||
SetupFloodStencil(fnode->vertexindex);
|
SetupFloodStencil(fnode->vertexindex);
|
||||||
Draw(DT_TriangleFan, gl_RenderState, fnode->vertexindex + 4, 4);
|
Draw(DT_TriangleFan, gl_RenderState, fnode->vertexindex + 4, 4);
|
||||||
ClearFloodStencil(fnode->vertexindex);
|
ClearFloodStencil(fnode->vertexindex);
|
||||||
|
gl_RenderState.SetDepthBias(0, 0);
|
||||||
glPolygonOffset(0.0f, 0.0f);
|
|
||||||
glDisable(GL_POLYGON_OFFSET_FILL);
|
|
||||||
|
|
||||||
fnode = fnode->next;
|
fnode = fnode->next;
|
||||||
}
|
}
|
||||||
|
@ -203,16 +199,16 @@ void FDrawInfo::DrawFlat(GLFlat *flat, int pass, bool trans) // trans only has m
|
||||||
gl_RenderState.SetObjectColor(flat->FlatColor | 0xff000000);
|
gl_RenderState.SetObjectColor(flat->FlatColor | 0xff000000);
|
||||||
if (flat->sector->special != GLSector_Skybox)
|
if (flat->sector->special != GLSector_Skybox)
|
||||||
{
|
{
|
||||||
gl_RenderState.SetMaterial(flat->gltexture, CLAMP_NONE, 0, -1, false);
|
gl_RenderState.ApplyMaterial(flat->gltexture, CLAMP_NONE, 0, -1);
|
||||||
gl_RenderState.SetPlaneTextureRotation(&plane, flat->gltexture);
|
gl_RenderState.SetPlaneTextureRotation(&plane, flat->gltexture);
|
||||||
DrawSubsectors(flat, pass, false);
|
DrawSubsectors(flat, pass, false);
|
||||||
gl_RenderState.EnableTextureMatrix(false);
|
gl_RenderState.EnableTextureMatrix(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gl_RenderState.SetMaterial(flat->gltexture, CLAMP_XY, 0, -1, false);
|
gl_RenderState.ApplyMaterial(flat->gltexture, CLAMP_XY, 0, -1);
|
||||||
gl_RenderState.ApplyLightIndex(flat->dynlightindex);
|
gl_RenderState.SetLightIndex(flat->dynlightindex);
|
||||||
glDrawArrays(GL_TRIANGLE_FAN, flat->iboindex, 4);
|
Draw(DT_TriangleFan, gl_RenderState, flat->iboindex, 4);
|
||||||
flatvertices += 4;
|
flatvertices += 4;
|
||||||
flatprimitives++;
|
flatprimitives++;
|
||||||
}
|
}
|
||||||
|
@ -236,7 +232,7 @@ void FDrawInfo::DrawFlat(GLFlat *flat, int pass, bool trans) // trans only has m
|
||||||
{
|
{
|
||||||
if (!flat->gltexture->tex->GetTranslucency()) gl_RenderState.AlphaFunc(Alpha_GEqual, gl_mask_threshold);
|
if (!flat->gltexture->tex->GetTranslucency()) gl_RenderState.AlphaFunc(Alpha_GEqual, gl_mask_threshold);
|
||||||
else gl_RenderState.AlphaFunc(Alpha_GEqual, 0.f);
|
else gl_RenderState.AlphaFunc(Alpha_GEqual, 0.f);
|
||||||
gl_RenderState.SetMaterial(flat->gltexture, CLAMP_NONE, 0, -1, false);
|
gl_RenderState.ApplyMaterial(flat->gltexture, CLAMP_NONE, 0, -1);
|
||||||
gl_RenderState.SetPlaneTextureRotation(&plane, flat->gltexture);
|
gl_RenderState.SetPlaneTextureRotation(&plane, flat->gltexture);
|
||||||
DrawSubsectors(flat, pass, true);
|
DrawSubsectors(flat, pass, true);
|
||||||
gl_RenderState.EnableTextureMatrix(false);
|
gl_RenderState.EnableTextureMatrix(false);
|
||||||
|
|
|
@ -426,7 +426,7 @@ void GLHorizonPortal::DrawContents(HWDrawInfo *hwdi)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
gl_RenderState.SetMaterial(gltexture, CLAMP_NONE, 0, -1, false);
|
gl_RenderState.ApplyMaterial(gltexture, CLAMP_NONE, 0, -1);
|
||||||
gl_RenderState.SetObjectColor(origin->specialcolor);
|
gl_RenderState.SetObjectColor(origin->specialcolor);
|
||||||
|
|
||||||
gl_RenderState.SetPlaneTextureRotation(sp, gltexture);
|
gl_RenderState.SetPlaneTextureRotation(sp, gltexture);
|
||||||
|
|
|
@ -120,7 +120,7 @@ void RenderDome(FMaterial * tex, float x_offset, float y_offset, bool mirror, in
|
||||||
{
|
{
|
||||||
if (tex)
|
if (tex)
|
||||||
{
|
{
|
||||||
gl_RenderState.SetMaterial(tex, CLAMP_NONE, 0, -1, false);
|
gl_RenderState.ApplyMaterial(tex, CLAMP_NONE, 0, -1);
|
||||||
gl_RenderState.EnableModelMatrix(true);
|
gl_RenderState.EnableModelMatrix(true);
|
||||||
gl_RenderState.EnableTextureMatrix(true);
|
gl_RenderState.EnableTextureMatrix(true);
|
||||||
|
|
||||||
|
@ -159,25 +159,25 @@ static void RenderBox(FTextureID texno, FMaterial * gltex, float x_offset, bool
|
||||||
|
|
||||||
// north
|
// north
|
||||||
tex = FMaterial::ValidateTexture(sb->faces[0], false);
|
tex = FMaterial::ValidateTexture(sb->faces[0], false);
|
||||||
gl_RenderState.SetMaterial(tex, CLAMP_XY, 0, -1, false);
|
gl_RenderState.ApplyMaterial(tex, CLAMP_XY, 0, -1);
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(0), 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(0), 4);
|
||||||
|
|
||||||
// east
|
// east
|
||||||
tex = FMaterial::ValidateTexture(sb->faces[1], false);
|
tex = FMaterial::ValidateTexture(sb->faces[1], false);
|
||||||
gl_RenderState.SetMaterial(tex, CLAMP_XY, 0, -1, false);
|
gl_RenderState.ApplyMaterial(tex, CLAMP_XY, 0, -1);
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(1), 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(1), 4);
|
||||||
|
|
||||||
// south
|
// south
|
||||||
tex = FMaterial::ValidateTexture(sb->faces[2], false);
|
tex = FMaterial::ValidateTexture(sb->faces[2], false);
|
||||||
gl_RenderState.SetMaterial(tex, CLAMP_XY, 0, -1, false);
|
gl_RenderState.ApplyMaterial(tex, CLAMP_XY, 0, -1);
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(2), 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(2), 4);
|
||||||
|
|
||||||
// west
|
// west
|
||||||
tex = FMaterial::ValidateTexture(sb->faces[3], false);
|
tex = FMaterial::ValidateTexture(sb->faces[3], false);
|
||||||
gl_RenderState.SetMaterial(tex, CLAMP_XY, 0, -1, false);
|
gl_RenderState.ApplyMaterial(tex, CLAMP_XY, 0, -1);
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(3), 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(3), 4);
|
||||||
}
|
}
|
||||||
|
@ -185,20 +185,20 @@ static void RenderBox(FTextureID texno, FMaterial * gltex, float x_offset, bool
|
||||||
{
|
{
|
||||||
faces=1;
|
faces=1;
|
||||||
tex = FMaterial::ValidateTexture(sb->faces[0], false);
|
tex = FMaterial::ValidateTexture(sb->faces[0], false);
|
||||||
gl_RenderState.SetMaterial(tex, CLAMP_XY, 0, -1, false);
|
gl_RenderState.ApplyMaterial(tex, CLAMP_XY, 0, -1);
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(-1), 10);
|
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(-1), 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
// top
|
// top
|
||||||
tex = FMaterial::ValidateTexture(sb->faces[faces], false);
|
tex = FMaterial::ValidateTexture(sb->faces[faces], false);
|
||||||
gl_RenderState.SetMaterial(tex, CLAMP_XY, 0, -1, false);
|
gl_RenderState.ApplyMaterial(tex, CLAMP_XY, 0, -1);
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(sb->fliptop? 6:5), 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(sb->fliptop? 6:5), 4);
|
||||||
|
|
||||||
// bottom
|
// bottom
|
||||||
tex = FMaterial::ValidateTexture(sb->faces[faces+1], false);
|
tex = FMaterial::ValidateTexture(sb->faces[faces+1], false);
|
||||||
gl_RenderState.SetMaterial(tex, CLAMP_XY, 0, -1, false);
|
gl_RenderState.ApplyMaterial(tex, CLAMP_XY, 0, -1);
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(4), 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, GLRenderer->mSkyVBO->FaceStart(4), 4);
|
||||||
|
|
||||||
|
|
|
@ -195,7 +195,7 @@ void FDrawInfo::DrawSprite(GLSprite *sprite, int pass)
|
||||||
gl_RenderState.SetFog(0, 0);
|
gl_RenderState.SetFog(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sprite->gltexture) gl_RenderState.SetMaterial(sprite->gltexture, CLAMP_XY, sprite->translation, sprite->OverrideShader, !!(RenderStyle.Flags & STYLEF_RedIsAlpha));
|
if (sprite->gltexture) gl_RenderState.ApplyMaterial(sprite->gltexture, CLAMP_XY, sprite->translation, sprite->OverrideShader);
|
||||||
else if (!sprite->modelframe) gl_RenderState.EnableTexture(false);
|
else if (!sprite->modelframe) gl_RenderState.EnableTexture(false);
|
||||||
|
|
||||||
//SetColor(lightlevel, rel, Colormap, trans);
|
//SetColor(lightlevel, rel, Colormap, trans);
|
||||||
|
|
|
@ -104,7 +104,7 @@ void FDrawInfo::RenderMirrorSurface(GLWall *wall)
|
||||||
glDepthFunc(GL_LEQUAL);
|
glDepthFunc(GL_LEQUAL);
|
||||||
|
|
||||||
FMaterial * pat=FMaterial::ValidateTexture(TexMan.mirrorTexture, false, false);
|
FMaterial * pat=FMaterial::ValidateTexture(TexMan.mirrorTexture, false, false);
|
||||||
gl_RenderState.SetMaterial(pat, CLAMP_NONE, 0, -1, false);
|
gl_RenderState.ApplyMaterial(pat, CLAMP_NONE, 0, -1);
|
||||||
|
|
||||||
wall->flags &= ~GLWall::GLWF_GLOW;
|
wall->flags &= ~GLWall::GLWF_GLOW;
|
||||||
RenderWall(wall, GLWall::RWF_BLANK);
|
RenderWall(wall, GLWall::RWF_BLANK);
|
||||||
|
@ -151,7 +151,7 @@ void FDrawInfo::RenderTexturedWall(GLWall *wall, int rflags)
|
||||||
gl_RenderState.SetGlowParams(wall->topglowcolor, wall->bottomglowcolor);
|
gl_RenderState.SetGlowParams(wall->topglowcolor, wall->bottomglowcolor);
|
||||||
}
|
}
|
||||||
gl_RenderState.SetGlowPlanes(wall->topplane, wall->bottomplane);
|
gl_RenderState.SetGlowPlanes(wall->topplane, wall->bottomplane);
|
||||||
gl_RenderState.SetMaterial(wall->gltexture, wall->flags & 3, 0, -1, false);
|
gl_RenderState.ApplyMaterial(wall->gltexture, wall->flags & 3, 0, -1);
|
||||||
|
|
||||||
if (wall->type == RENDERWALL_M2SNF)
|
if (wall->type == RENDERWALL_M2SNF)
|
||||||
{
|
{
|
||||||
|
@ -468,7 +468,7 @@ void FDrawInfo::DrawDecal(GLDecal *gldecal)
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_SetRenderStyle(decal->RenderStyle, false, false);
|
gl_SetRenderStyle(decal->RenderStyle, false, false);
|
||||||
gl_RenderState.SetMaterial(tex, CLAMP_XY, decal->Translation, 0, !!(decal->RenderStyle.Flags & STYLEF_RedIsAlpha));
|
gl_RenderState.ApplyMaterial(tex, CLAMP_XY, decal->Translation, -1);
|
||||||
|
|
||||||
|
|
||||||
// If srcalpha is one it looks better with a higher alpha threshold
|
// If srcalpha is one it looks better with a higher alpha threshold
|
||||||
|
|
|
@ -71,7 +71,7 @@ void FDrawInfo::DrawPSprite (HUDSprite *huds)
|
||||||
{
|
{
|
||||||
float thresh = (huds->tex->tex->GetTranslucency() || huds->OverrideShader != -1) ? 0.f : gl_mask_sprite_threshold;
|
float thresh = (huds->tex->tex->GetTranslucency() || huds->OverrideShader != -1) ? 0.f : gl_mask_sprite_threshold;
|
||||||
gl_RenderState.AlphaFunc(Alpha_GEqual, thresh);
|
gl_RenderState.AlphaFunc(Alpha_GEqual, thresh);
|
||||||
gl_RenderState.SetMaterial(huds->tex, CLAMP_XY_NOMIP, 0, huds->OverrideShader, !!(huds->RenderStyle.Flags & STYLEF_RedIsAlpha));
|
gl_RenderState.ApplyMaterial(huds->tex, CLAMP_XY_NOMIP, 0, huds->OverrideShader);
|
||||||
gl_RenderState.Apply();
|
gl_RenderState.Apply();
|
||||||
GLRenderer->mVBO->RenderArray(GL_TRIANGLE_STRIP, huds->mx, 4);
|
GLRenderer->mVBO->RenderArray(GL_TRIANGLE_STRIP, huds->mx, 4);
|
||||||
}
|
}
|
||||||
|
|
|
@ -343,7 +343,7 @@ IHardwareTexture *OpenGLFrameBuffer::CreateHardwareTexture(FTexture *tex)
|
||||||
|
|
||||||
void OpenGLFrameBuffer::PrecacheMaterial(FMaterial *mat, int translation)
|
void OpenGLFrameBuffer::PrecacheMaterial(FMaterial *mat, int translation)
|
||||||
{
|
{
|
||||||
gl_RenderState.SetMaterial(mat, CLAMP_NONE, translation, false, false);
|
gl_RenderState.ApplyMaterial(mat, CLAMP_NONE, translation, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
FModelRenderer *OpenGLFrameBuffer::CreateModelRenderer(int mli)
|
FModelRenderer *OpenGLFrameBuffer::CreateModelRenderer(int mli)
|
||||||
|
|
|
@ -87,6 +87,20 @@ struct FStencilState
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct FDepthBiasState
|
||||||
|
{
|
||||||
|
float mFactor;
|
||||||
|
float mUnits;
|
||||||
|
bool mChanged;
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
mFactor = 0;
|
||||||
|
mUnits = 0;
|
||||||
|
mChanged = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class FRenderState
|
class FRenderState
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
@ -118,10 +132,7 @@ protected:
|
||||||
|
|
||||||
FMaterialState mMaterial;
|
FMaterialState mMaterial;
|
||||||
FStencilState mStencil;
|
FStencilState mStencil;
|
||||||
|
FDepthBiasState mBias;
|
||||||
// fixed function state
|
|
||||||
float mBias[2];
|
|
||||||
bool mBiasOn;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
VSMatrix mModelMatrix;
|
VSMatrix mModelMatrix;
|
||||||
|
@ -146,8 +157,9 @@ public:
|
||||||
mLightParms[3] = -1.f;
|
mLightParms[3] = -1.f;
|
||||||
mSpecialEffect = EFF_NONE;
|
mSpecialEffect = EFF_NONE;
|
||||||
mLightIndex = -1;
|
mLightIndex = -1;
|
||||||
mBiasOn = false;
|
|
||||||
mMaterial.Reset();
|
mMaterial.Reset();
|
||||||
|
mStencil.Reset();
|
||||||
|
mBias.Reset();
|
||||||
|
|
||||||
mColor.Set(1.0f, 1.0f, 1.0f, 1.0f);
|
mColor.Set(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
mGlowTop.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
mGlowTop.Set(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
@ -324,16 +336,16 @@ public:
|
||||||
|
|
||||||
void SetDepthBias(float a, float b)
|
void SetDepthBias(float a, float b)
|
||||||
{
|
{
|
||||||
mBias[0] = a;
|
mBias.mFactor = a;
|
||||||
mBias[1] = b;
|
mBias.mUnits = b;
|
||||||
mBiasOn = true;
|
mBias.mChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClearDepthBias()
|
void ClearDepthBias()
|
||||||
{
|
{
|
||||||
mBias[0] = 0;
|
mBias.mFactor = 0;
|
||||||
mBias[1] = 0;
|
mBias.mUnits = 0;
|
||||||
mBiasOn = false;
|
mBias.mChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetMaterial(FMaterial *mat, int clampmode, int translation, int overrideshader)
|
void SetMaterial(FMaterial *mat, int clampmode, int translation, int overrideshader)
|
||||||
|
|
Loading…
Reference in a new issue