mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-02-22 03:51:11 +00:00
- allow FORCEBACKCULLFACES to work with hud models
This commit is contained in:
parent
70e4dd17b7
commit
6d1ebf5f27
4 changed files with 10 additions and 10 deletions
|
@ -17,8 +17,8 @@ public:
|
||||||
|
|
||||||
virtual VSMatrix GetViewToWorldMatrix() = 0;
|
virtual VSMatrix GetViewToWorldMatrix() = 0;
|
||||||
|
|
||||||
virtual void BeginDrawHUDModel(FRenderStyle style, const VSMatrix &objectToWorldMatrix, bool mirrored) = 0;
|
virtual void BeginDrawHUDModel(FRenderStyle style, const VSMatrix &objectToWorldMatrix, bool mirrored, FSpriteModelFrame *smf) = 0;
|
||||||
virtual void EndDrawHUDModel(FRenderStyle style) = 0;
|
virtual void EndDrawHUDModel(FRenderStyle style, FSpriteModelFrame *smf) = 0;
|
||||||
|
|
||||||
virtual void SetInterpolation(double interpolation) = 0;
|
virtual void SetInterpolation(double interpolation) = 0;
|
||||||
virtual void SetMaterial(FGameTexture *skin, bool clampNoFilter, int translation) = 0;
|
virtual void SetMaterial(FGameTexture *skin, bool clampNoFilter, int translation) = 0;
|
||||||
|
|
|
@ -244,11 +244,11 @@ void RenderHUDModel(FModelRenderer *renderer, DPSprite *psp, FVector3 translatio
|
||||||
|
|
||||||
float orientation = smf->xscale * smf->yscale * smf->zscale;
|
float orientation = smf->xscale * smf->yscale * smf->zscale;
|
||||||
|
|
||||||
renderer->BeginDrawHUDModel(playermo->RenderStyle, objectToWorldMatrix, orientation < 0);
|
renderer->BeginDrawHUDModel(playermo->RenderStyle, objectToWorldMatrix, orientation < 0, smf);
|
||||||
uint32_t trans = psp->GetTranslation() != 0 ? psp->GetTranslation() : 0;
|
uint32_t trans = psp->GetTranslation() != 0 ? psp->GetTranslation() : 0;
|
||||||
if ((psp->Flags & PSPF_PLAYERTRANSLATED)) trans = psp->Owner->mo->Translation;
|
if ((psp->Flags & PSPF_PLAYERTRANSLATED)) trans = psp->Owner->mo->Translation;
|
||||||
RenderFrameModels(renderer, playermo->Level, smf, psp->GetState(), psp->GetTics(), psp->Caller->modelData != nullptr ? psp->Caller->modelData->modelDef != NAME_None ? PClass::FindActor(psp->Caller->modelData->modelDef) : psp->Caller->GetClass() : psp->Caller->GetClass(), trans, psp->Caller);
|
RenderFrameModels(renderer, playermo->Level, smf, psp->GetState(), psp->GetTics(), psp->Caller->modelData != nullptr ? psp->Caller->modelData->modelDef != NAME_None ? PClass::FindActor(psp->Caller->modelData->modelDef) : psp->Caller->GetClass() : psp->Caller->GetClass(), trans, psp->Caller);
|
||||||
renderer->EndDrawHUDModel(playermo->RenderStyle);
|
renderer->EndDrawHUDModel(playermo->RenderStyle, smf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderFrameModels(FModelRenderer *renderer, FLevelLocals *Level, const FSpriteModelFrame *smf, const FState *curState, const int curTics, const PClass *ti, int translation, AActor* actor)
|
void RenderFrameModels(FModelRenderer *renderer, FLevelLocals *Level, const FSpriteModelFrame *smf, const FState *curState, const int curTics, const PClass *ti, int translation, AActor* actor)
|
||||||
|
|
|
@ -79,7 +79,7 @@ void FHWModelRenderer::EndDrawModel(FRenderStyle style, FSpriteModelFrame *smf)
|
||||||
state.SetCulling(Cull_None);
|
state.SetCulling(Cull_None);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FHWModelRenderer::BeginDrawHUDModel(FRenderStyle style, const VSMatrix &objectToWorldMatrix, bool mirrored)
|
void FHWModelRenderer::BeginDrawHUDModel(FRenderStyle style, const VSMatrix &objectToWorldMatrix, bool mirrored, FSpriteModelFrame *smf)
|
||||||
{
|
{
|
||||||
state.SetDepthFunc(DF_LEqual);
|
state.SetDepthFunc(DF_LEqual);
|
||||||
state.SetDepthClamp(true);
|
state.SetDepthClamp(true);
|
||||||
|
@ -87,7 +87,7 @@ void FHWModelRenderer::BeginDrawHUDModel(FRenderStyle style, const VSMatrix &obj
|
||||||
// [BB] In case the model should be rendered translucent, do back face culling.
|
// [BB] In case the model should be rendered translucent, do back face culling.
|
||||||
// This solves a few of the problems caused by the lack of depth sorting.
|
// This solves a few of the problems caused by the lack of depth sorting.
|
||||||
// TO-DO: Implement proper depth sorting.
|
// TO-DO: Implement proper depth sorting.
|
||||||
if (!(style == DefaultRenderStyle()))
|
if (!(style == DefaultRenderStyle()) || (smf->flags & MDL_FORCECULLBACKFACES))
|
||||||
{
|
{
|
||||||
state.SetCulling((mirrored ^ portalState.isMirrored()) ? Cull_CW : Cull_CCW);
|
state.SetCulling((mirrored ^ portalState.isMirrored()) ? Cull_CW : Cull_CCW);
|
||||||
}
|
}
|
||||||
|
@ -96,13 +96,13 @@ void FHWModelRenderer::BeginDrawHUDModel(FRenderStyle style, const VSMatrix &obj
|
||||||
state.EnableModelMatrix(true);
|
state.EnableModelMatrix(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FHWModelRenderer::EndDrawHUDModel(FRenderStyle style)
|
void FHWModelRenderer::EndDrawHUDModel(FRenderStyle style, FSpriteModelFrame *smf)
|
||||||
{
|
{
|
||||||
state.SetBoneIndexBase(-1);
|
state.SetBoneIndexBase(-1);
|
||||||
state.EnableModelMatrix(false);
|
state.EnableModelMatrix(false);
|
||||||
|
|
||||||
state.SetDepthFunc(DF_Less);
|
state.SetDepthFunc(DF_Less);
|
||||||
if (!(style == DefaultRenderStyle()))
|
if (!(style == DefaultRenderStyle()) || (smf->flags & MDL_FORCECULLBACKFACES))
|
||||||
state.SetCulling(Cull_None);
|
state.SetCulling(Cull_None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,8 @@ public:
|
||||||
void EndDrawModel(FRenderStyle style, FSpriteModelFrame *smf) override;
|
void EndDrawModel(FRenderStyle style, FSpriteModelFrame *smf) override;
|
||||||
IModelVertexBuffer *CreateVertexBuffer(bool needindex, bool singleframe) override;
|
IModelVertexBuffer *CreateVertexBuffer(bool needindex, bool singleframe) override;
|
||||||
VSMatrix GetViewToWorldMatrix() override;
|
VSMatrix GetViewToWorldMatrix() override;
|
||||||
void BeginDrawHUDModel(FRenderStyle style, const VSMatrix &objectToWorldMatrix, bool mirrored) override;
|
void BeginDrawHUDModel(FRenderStyle style, const VSMatrix &objectToWorldMatrix, bool mirrored, FSpriteModelFrame *smf) override;
|
||||||
void EndDrawHUDModel(FRenderStyle style) override;
|
void EndDrawHUDModel(FRenderStyle style, FSpriteModelFrame *smf) override;
|
||||||
void SetInterpolation(double interpolation) override;
|
void SetInterpolation(double interpolation) override;
|
||||||
void SetMaterial(FGameTexture *skin, bool clampNoFilter, int translation) override;
|
void SetMaterial(FGameTexture *skin, bool clampNoFilter, int translation) override;
|
||||||
void DrawArrays(int start, int count) override;
|
void DrawArrays(int start, int count) override;
|
||||||
|
|
Loading…
Reference in a new issue