mirror of
https://github.com/leozide/leocad
synced 2025-01-18 22:26:44 +01:00
Translucent step fade.
This commit is contained in:
parent
5a76f4c870
commit
4e6306a649
6 changed files with 121 additions and 32 deletions
|
@ -14,6 +14,7 @@ lcVector4 gInterfaceColors[LC_NUM_INTERFACECOLORS] = // todo: make the colors co
|
||||||
lcVector4(0.898f, 0.298f, 0.400f, 1.000f), // LC_COLOR_SELECTED
|
lcVector4(0.898f, 0.298f, 0.400f, 1.000f), // LC_COLOR_SELECTED
|
||||||
lcVector4(0.400f, 0.298f, 0.898f, 1.000f), // LC_COLOR_FOCUSED
|
lcVector4(0.400f, 0.298f, 0.898f, 1.000f), // LC_COLOR_FOCUSED
|
||||||
lcVector4(0.800f, 0.800f, 0.800f, 1.000f), // LC_COLOR_DISABLED
|
lcVector4(0.800f, 0.800f, 0.800f, 1.000f), // LC_COLOR_DISABLED
|
||||||
|
lcVector4(0.500f, 0.500f, 0.500f, 0.500f), // LC_COLOR_DISABLED_TRANSLUCENT
|
||||||
lcVector4(0.500f, 0.800f, 0.500f, 1.000f), // LC_COLOR_CAMERA
|
lcVector4(0.500f, 0.800f, 0.500f, 1.000f), // LC_COLOR_CAMERA
|
||||||
lcVector4(0.500f, 0.800f, 0.500f, 1.000f), // LC_COLOR_LIGHT
|
lcVector4(0.500f, 0.800f, 0.500f, 1.000f), // LC_COLOR_LIGHT
|
||||||
lcVector4(0.500f, 0.800f, 0.500f, 0.500f), // LC_COLOR_CONTROL_POINT
|
lcVector4(0.500f, 0.800f, 0.500f, 0.500f), // LC_COLOR_CONTROL_POINT
|
||||||
|
|
|
@ -35,6 +35,7 @@ enum lcInterfaceColor
|
||||||
LC_COLOR_SELECTED,
|
LC_COLOR_SELECTED,
|
||||||
LC_COLOR_FOCUSED,
|
LC_COLOR_FOCUSED,
|
||||||
LC_COLOR_DISABLED,
|
LC_COLOR_DISABLED,
|
||||||
|
LC_COLOR_DISABLED_TRANSLUCENT,
|
||||||
LC_COLOR_CAMERA,
|
LC_COLOR_CAMERA,
|
||||||
LC_COLOR_LIGHT,
|
LC_COLOR_LIGHT,
|
||||||
LC_COLOR_CONTROL_POINT,
|
LC_COLOR_CONTROL_POINT,
|
||||||
|
|
|
@ -509,11 +509,29 @@ void lcContext::SetColorIndexTinted(int ColorIndex, lcInterfaceColor InterfaceCo
|
||||||
SetColor(lcVector4(Color, gColorList[ColorIndex].Value.w));
|
SetColor(lcVector4(Color, gColorList[ColorIndex].Value.w));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lcContext::SetColorIndexTintedAlpha(int ColorIndex, lcInterfaceColor InterfaceColor, float Weight)
|
||||||
|
{
|
||||||
|
const lcVector3 Color(gColorList[ColorIndex].Value * Weight + gInterfaceColors[InterfaceColor] * (1.0f - Weight));
|
||||||
|
SetColor(lcVector4(Color, gColorList[ColorIndex].Value.w * gInterfaceColors[InterfaceColor].w));
|
||||||
|
}
|
||||||
|
|
||||||
void lcContext::SetEdgeColorIndex(int ColorIndex)
|
void lcContext::SetEdgeColorIndex(int ColorIndex)
|
||||||
{
|
{
|
||||||
SetColor(gColorList[ColorIndex].Edge);
|
SetColor(gColorList[ColorIndex].Edge);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lcContext::SetEdgeColorIndexTinted(int ColorIndex, lcInterfaceColor InterfaceColor, float Weight)
|
||||||
|
{
|
||||||
|
const lcVector3 Color(gColorList[ColorIndex].Edge * Weight + gInterfaceColors[InterfaceColor] * (1.0f - Weight));
|
||||||
|
SetColor(lcVector4(Color, gColorList[ColorIndex].Edge.w));
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcContext::SetEdgeColorIndexTintedAlpha(int ColorIndex, lcInterfaceColor InterfaceColor, float Weight)
|
||||||
|
{
|
||||||
|
const lcVector3 Color(gColorList[ColorIndex].Edge * Weight + gInterfaceColors[InterfaceColor] * (1.0f - Weight));
|
||||||
|
SetColor(lcVector4(Color, gColorList[ColorIndex].Edge.w * gInterfaceColors[InterfaceColor].w));
|
||||||
|
}
|
||||||
|
|
||||||
void lcContext::SetInterfaceColor(lcInterfaceColor InterfaceColor)
|
void lcContext::SetInterfaceColor(lcInterfaceColor InterfaceColor)
|
||||||
{
|
{
|
||||||
SetColor(gInterfaceColors[InterfaceColor]);
|
SetColor(gInterfaceColors[InterfaceColor]);
|
||||||
|
|
|
@ -174,7 +174,10 @@ public:
|
||||||
void SetColor(float Red, float Green, float Blue, float Alpha);
|
void SetColor(float Red, float Green, float Blue, float Alpha);
|
||||||
void SetColorIndex(int ColorIndex);
|
void SetColorIndex(int ColorIndex);
|
||||||
void SetColorIndexTinted(int ColorIndex, lcInterfaceColor InterfaceColor, float Weight);
|
void SetColorIndexTinted(int ColorIndex, lcInterfaceColor InterfaceColor, float Weight);
|
||||||
|
void SetColorIndexTintedAlpha(int ColorIndex, lcInterfaceColor InterfaceColor, float Weight);
|
||||||
void SetEdgeColorIndex(int ColorIndex);
|
void SetEdgeColorIndex(int ColorIndex);
|
||||||
|
void SetEdgeColorIndexTinted(int ColorIndex, lcInterfaceColor InterfaceColor, float Weight);
|
||||||
|
void SetEdgeColorIndexTintedAlpha(int ColorIndex, lcInterfaceColor InterfaceColor, float Weight);
|
||||||
void SetInterfaceColor(lcInterfaceColor InterfaceColor);
|
void SetInterfaceColor(lcInterfaceColor InterfaceColor);
|
||||||
|
|
||||||
void ClearFramebuffer();
|
void ClearFramebuffer();
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
#include "lc_application.h"
|
#include "lc_application.h"
|
||||||
#include "object.h"
|
#include "object.h"
|
||||||
|
|
||||||
|
bool gTranslucentFade = true; // todo: move to preferences
|
||||||
|
|
||||||
lcScene::lcScene()
|
lcScene::lcScene()
|
||||||
: mRenderMeshes(0, 1024), mOpaqueMeshes(0, 1024), mTranslucentMeshes(0, 1024), mInterfaceObjects(0, 1024)
|
: mRenderMeshes(0, 1024), mOpaqueMeshes(0, 1024), mTranslucentMeshes(0, 1024), mInterfaceObjects(0, 1024)
|
||||||
{
|
{
|
||||||
|
@ -65,7 +67,8 @@ void lcScene::AddMesh(lcMesh* Mesh, const lcMatrix44& WorldMatrix, int ColorInde
|
||||||
const float Distance = fabsf(lcMul31(WorldMatrix[3], mViewMatrix).z);
|
const float Distance = fabsf(lcMul31(WorldMatrix[3], mViewMatrix).z);
|
||||||
RenderMesh.LodIndex = mAllowLOD ? RenderMesh.Mesh->GetLodIndex(Distance) : LC_MESH_LOD_HIGH;
|
RenderMesh.LodIndex = mAllowLOD ? RenderMesh.Mesh->GetLodIndex(Distance) : LC_MESH_LOD_HIGH;
|
||||||
|
|
||||||
const bool Translucent = lcIsColorTranslucent(ColorIndex);
|
const bool ForceTranslucent = (gTranslucentFade && State == lcRenderMeshState::Faded);
|
||||||
|
const bool Translucent = lcIsColorTranslucent(ColorIndex) || ForceTranslucent;
|
||||||
const lcMeshFlags Flags = Mesh->mFlags;
|
const lcMeshFlags Flags = Mesh->mFlags;
|
||||||
|
|
||||||
if ((Flags & (lcMeshFlag::HasSolid | lcMeshFlag::HasLines)) || ((Flags & lcMeshFlag::HasDefault) && !Translucent))
|
if ((Flags & (lcMeshFlag::HasSolid | lcMeshFlag::HasLines)) || ((Flags & lcMeshFlag::HasDefault) && !Translucent))
|
||||||
|
@ -87,7 +90,7 @@ void lcScene::AddMesh(lcMesh* Mesh, const lcMatrix44& WorldMatrix, int ColorInde
|
||||||
if (SectionColorIndex == gDefaultColor)
|
if (SectionColorIndex == gDefaultColor)
|
||||||
SectionColorIndex = RenderMesh.ColorIndex;
|
SectionColorIndex = RenderMesh.ColorIndex;
|
||||||
|
|
||||||
if (!lcIsColorTranslucent(SectionColorIndex))
|
if (!lcIsColorTranslucent(SectionColorIndex) && !ForceTranslucent)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const lcVector3 Center = (Section->BoundingBox.Min + Section->BoundingBox.Max) / 2;
|
const lcVector3 Center = (Section->BoundingBox.Min + Section->BoundingBox.Max) / 2;
|
||||||
|
@ -118,7 +121,7 @@ void lcScene::DrawDebugNormals(lcContext* Context, const lcMesh* Mesh) const
|
||||||
free(Vertices);
|
free(Vertices);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcScene::DrawOpaqueMeshes(lcContext* Context, bool DrawLit, int PrimitiveTypes) const
|
void lcScene::DrawOpaqueMeshes(lcContext* Context, bool DrawLit, int PrimitiveTypes, bool DrawFaded, bool DrawNonFaded) const
|
||||||
{
|
{
|
||||||
if (mOpaqueMeshes.IsEmpty())
|
if (mOpaqueMeshes.IsEmpty())
|
||||||
return;
|
return;
|
||||||
|
@ -144,6 +147,12 @@ void lcScene::DrawOpaqueMeshes(lcContext* Context, bool DrawLit, int PrimitiveTy
|
||||||
const lcMesh* Mesh = RenderMesh.Mesh;
|
const lcMesh* Mesh = RenderMesh.Mesh;
|
||||||
const int LodIndex = RenderMesh.LodIndex;
|
const int LodIndex = RenderMesh.LodIndex;
|
||||||
|
|
||||||
|
if (!DrawFaded && RenderMesh.State == lcRenderMeshState::Faded)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!DrawNonFaded && RenderMesh.State != lcRenderMeshState::Faded)
|
||||||
|
continue;
|
||||||
|
|
||||||
Context->BindMesh(Mesh);
|
Context->BindMesh(Mesh);
|
||||||
Context->SetWorldMatrix(RenderMesh.WorldMatrix);
|
Context->SetWorldMatrix(RenderMesh.WorldMatrix);
|
||||||
|
|
||||||
|
@ -180,6 +189,8 @@ void lcScene::DrawOpaqueMeshes(lcContext* Context, bool DrawLit, int PrimitiveTy
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case lcRenderMeshState::Faded:
|
case lcRenderMeshState::Faded:
|
||||||
|
if (gTranslucentFade)
|
||||||
|
continue;
|
||||||
Context->SetColorIndexTinted(ColorIndex, LC_COLOR_DISABLED, 0.25f);
|
Context->SetColorIndexTinted(ColorIndex, LC_COLOR_DISABLED, 0.25f);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -208,7 +219,10 @@ void lcScene::DrawOpaqueMeshes(lcContext* Context, bool DrawLit, int PrimitiveTy
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case lcRenderMeshState::Faded:
|
case lcRenderMeshState::Faded:
|
||||||
Context->SetInterfaceColor(LC_COLOR_DISABLED);
|
if (gTranslucentFade)
|
||||||
|
Context->SetEdgeColorIndexTintedAlpha(ColorIndex, LC_COLOR_DISABLED_TRANSLUCENT, 0.25f);
|
||||||
|
else
|
||||||
|
Context->SetEdgeColorIndexTinted(ColorIndex, LC_COLOR_DISABLED, 0.25f);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -285,7 +299,7 @@ void lcScene::DrawOpaqueMeshes(lcContext* Context, bool DrawLit, int PrimitiveTy
|
||||||
Context->SetPolygonOffset(lcPolygonOffset::None);
|
Context->SetPolygonOffset(lcPolygonOffset::None);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcScene::DrawTranslucentMeshes(lcContext* Context, bool DrawLit) const
|
void lcScene::DrawTranslucentMeshes(lcContext* Context, bool DrawLit, bool DrawFadePrepass, bool DrawFaded, bool DrawNonFaded) const
|
||||||
{
|
{
|
||||||
if (mTranslucentMeshes.IsEmpty())
|
if (mTranslucentMeshes.IsEmpty())
|
||||||
return;
|
return;
|
||||||
|
@ -303,8 +317,14 @@ void lcScene::DrawTranslucentMeshes(lcContext* Context, bool DrawLit) const
|
||||||
TexturedMaterial = lcMaterialType::UnlitTextureDecal;
|
TexturedMaterial = lcMaterialType::UnlitTextureDecal;
|
||||||
}
|
}
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
if (!DrawFadePrepass)
|
||||||
Context->SetDepthWrite(false);
|
{
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
Context->SetDepthWrite(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
|
||||||
|
|
||||||
Context->SetPolygonOffset(lcPolygonOffset::Translucent);
|
Context->SetPolygonOffset(lcPolygonOffset::Translucent);
|
||||||
|
|
||||||
for (const lcTranslucentMeshInstance& MeshInstance : mTranslucentMeshes)
|
for (const lcTranslucentMeshInstance& MeshInstance : mTranslucentMeshes)
|
||||||
|
@ -312,6 +332,12 @@ void lcScene::DrawTranslucentMeshes(lcContext* Context, bool DrawLit) const
|
||||||
const lcRenderMesh& RenderMesh = mRenderMeshes[MeshInstance.RenderMeshIndex];
|
const lcRenderMesh& RenderMesh = mRenderMeshes[MeshInstance.RenderMeshIndex];
|
||||||
const lcMesh* Mesh = RenderMesh.Mesh;
|
const lcMesh* Mesh = RenderMesh.Mesh;
|
||||||
|
|
||||||
|
if (!DrawFaded && RenderMesh.State == lcRenderMeshState::Faded)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!DrawNonFaded && RenderMesh.State != lcRenderMeshState::Faded)
|
||||||
|
continue;
|
||||||
|
|
||||||
Context->BindMesh(Mesh);
|
Context->BindMesh(Mesh);
|
||||||
Context->SetWorldMatrix(RenderMesh.WorldMatrix);
|
Context->SetWorldMatrix(RenderMesh.WorldMatrix);
|
||||||
|
|
||||||
|
@ -338,7 +364,10 @@ void lcScene::DrawTranslucentMeshes(lcContext* Context, bool DrawLit) const
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case lcRenderMeshState::Faded:
|
case lcRenderMeshState::Faded:
|
||||||
Context->SetColorIndexTinted(ColorIndex, LC_COLOR_DISABLED, 0.25f);
|
if (gTranslucentFade)
|
||||||
|
Context->SetColorIndexTintedAlpha(ColorIndex, LC_COLOR_DISABLED_TRANSLUCENT, 0.25f);
|
||||||
|
else
|
||||||
|
Context->SetColorIndexTinted(ColorIndex, LC_COLOR_DISABLED, 0.25f);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,8 +399,13 @@ void lcScene::DrawTranslucentMeshes(lcContext* Context, bool DrawLit) const
|
||||||
Context->BindTexture2D(0);
|
Context->BindTexture2D(0);
|
||||||
Context->SetPolygonOffset(lcPolygonOffset::None);
|
Context->SetPolygonOffset(lcPolygonOffset::None);
|
||||||
|
|
||||||
Context->SetDepthWrite(true);
|
if (!DrawFadePrepass)
|
||||||
glDisable(GL_BLEND);
|
{
|
||||||
|
Context->SetDepthWrite(true);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcScene::Draw(lcContext* Context) const
|
void lcScene::Draw(lcContext* Context) const
|
||||||
|
@ -396,7 +430,7 @@ void lcScene::Draw(lcContext* Context) const
|
||||||
if (DrawConditional)
|
if (DrawConditional)
|
||||||
PrimitiveTypes |= LC_MESH_CONDITIONAL_LINES;
|
PrimitiveTypes |= LC_MESH_CONDITIONAL_LINES;
|
||||||
|
|
||||||
DrawOpaqueMeshes(Context, false, PrimitiveTypes);
|
DrawOpaqueMeshes(Context, false, PrimitiveTypes, true, true);
|
||||||
|
|
||||||
if (mPreTranslucentCallback)
|
if (mPreTranslucentCallback)
|
||||||
mPreTranslucentCallback();
|
mPreTranslucentCallback();
|
||||||
|
@ -405,43 +439,75 @@ void lcScene::Draw(lcContext* Context) const
|
||||||
{
|
{
|
||||||
const bool DrawLines = Preferences.mDrawEdgeLines && Preferences.mLineWidth != 0.0f;
|
const bool DrawLines = Preferences.mDrawEdgeLines && Preferences.mLineWidth != 0.0f;
|
||||||
|
|
||||||
int PrimitiveTypes = LC_MESH_TRIANGLES | LC_MESH_TEXTURED_TRIANGLES;
|
int LinePrimitiveTypes = LC_MESH_LINES;
|
||||||
|
|
||||||
if (DrawLines)
|
if (DrawConditional)
|
||||||
|
LinePrimitiveTypes |= LC_MESH_CONDITIONAL_LINES;
|
||||||
|
|
||||||
|
const int SolidPrimitiveTypes = LC_MESH_TRIANGLES | LC_MESH_TEXTURED_TRIANGLES;
|
||||||
|
|
||||||
|
if (gTranslucentFade)
|
||||||
{
|
{
|
||||||
PrimitiveTypes |= LC_MESH_LINES;
|
DrawOpaqueMeshes(Context, false, SolidPrimitiveTypes | LinePrimitiveTypes, false, true);
|
||||||
|
|
||||||
if (DrawConditional)
|
if (mPreTranslucentCallback)
|
||||||
PrimitiveTypes |= LC_MESH_CONDITIONAL_LINES;
|
mPreTranslucentCallback();
|
||||||
|
|
||||||
|
DrawTranslucentMeshes(Context, false, true, true, false);
|
||||||
|
|
||||||
|
if (DrawLines)
|
||||||
|
DrawOpaqueMeshes(Context, false, LinePrimitiveTypes, true, false);
|
||||||
|
|
||||||
|
DrawTranslucentMeshes(Context, true, false, true, true);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DrawOpaqueMeshes(Context, false, SolidPrimitiveTypes | LinePrimitiveTypes, true, true);
|
||||||
|
|
||||||
DrawOpaqueMeshes(Context, false, PrimitiveTypes);
|
if (mPreTranslucentCallback)
|
||||||
|
mPreTranslucentCallback();
|
||||||
|
|
||||||
if (mPreTranslucentCallback)
|
DrawTranslucentMeshes(Context, true, false, true, true);
|
||||||
mPreTranslucentCallback();
|
}
|
||||||
|
|
||||||
DrawTranslucentMeshes(Context, false);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const bool DrawLines = Preferences.mDrawEdgeLines && Preferences.mLineWidth != 0.0f;
|
const bool DrawLines = Preferences.mDrawEdgeLines && Preferences.mLineWidth != 0.0f;
|
||||||
|
|
||||||
if (DrawLines)
|
int LinePrimitiveTypes = LC_MESH_LINES;
|
||||||
|
|
||||||
|
if (DrawConditional)
|
||||||
|
LinePrimitiveTypes |= LC_MESH_CONDITIONAL_LINES;
|
||||||
|
|
||||||
|
if (gTranslucentFade)
|
||||||
{
|
{
|
||||||
int PrimitiveTypes = LC_MESH_LINES;
|
DrawOpaqueMeshes(Context, true, LC_MESH_TRIANGLES | LC_MESH_TEXTURED_TRIANGLES, false, true);
|
||||||
|
|
||||||
if (DrawConditional)
|
if (DrawLines)
|
||||||
PrimitiveTypes |= LC_MESH_CONDITIONAL_LINES;
|
DrawOpaqueMeshes(Context, false, LinePrimitiveTypes, false, true);
|
||||||
|
|
||||||
DrawOpaqueMeshes(Context, false, PrimitiveTypes);
|
if (mPreTranslucentCallback)
|
||||||
|
mPreTranslucentCallback();
|
||||||
|
|
||||||
|
DrawTranslucentMeshes(Context, false, true, true, false);
|
||||||
|
|
||||||
|
if (DrawLines)
|
||||||
|
DrawOpaqueMeshes(Context, false, LinePrimitiveTypes, true, false);
|
||||||
|
|
||||||
|
DrawTranslucentMeshes(Context, true, false, true, true);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (DrawLines)
|
||||||
|
DrawOpaqueMeshes(Context, false, LinePrimitiveTypes, true, true);
|
||||||
|
|
||||||
DrawOpaqueMeshes(Context, true, LC_MESH_TRIANGLES | LC_MESH_TEXTURED_TRIANGLES);
|
DrawOpaqueMeshes(Context, true, LC_MESH_TRIANGLES | LC_MESH_TEXTURED_TRIANGLES, true, true);
|
||||||
|
|
||||||
if (mPreTranslucentCallback)
|
if (mPreTranslucentCallback)
|
||||||
mPreTranslucentCallback();
|
mPreTranslucentCallback();
|
||||||
|
|
||||||
DrawTranslucentMeshes(Context, true);
|
DrawTranslucentMeshes(Context, true, false, true, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,8 +92,8 @@ public:
|
||||||
void DrawInterfaceObjects(lcContext* Context) const;
|
void DrawInterfaceObjects(lcContext* Context) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void DrawOpaqueMeshes(lcContext* Context, bool DrawLit, int PrimitiveTypes) const;
|
void DrawOpaqueMeshes(lcContext* Context, bool DrawLit, int PrimitiveTypes, bool DrawFaded, bool DrawNonFaded) const;
|
||||||
void DrawTranslucentMeshes(lcContext* Context, bool DrawLit) const;
|
void DrawTranslucentMeshes(lcContext* Context, bool DrawLit, bool DrawFadePrepass, bool DrawFaded, bool DrawNonFaded) const;
|
||||||
void DrawDebugNormals(lcContext* Context, const lcMesh* Mesh) const;
|
void DrawDebugNormals(lcContext* Context, const lcMesh* Mesh) const;
|
||||||
|
|
||||||
lcMatrix44 mViewMatrix;
|
lcMatrix44 mViewMatrix;
|
||||||
|
|
Loading…
Reference in a new issue