mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-08 04:08:32 +09:00
[Fix] (MG_State/RenderState): track front face mode
This commit is contained in:
@@ -530,6 +530,10 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
const CullFaceMode& cfm = parameters.CullFaceModeSetting;
|
||||
g_GLESFuncs.glCullFace(MG_Util::ConvertCullFaceModeToGLEnum(cfm));
|
||||
}
|
||||
if (parameters.FrontFaceModeSetting != g_syncedRenderStateParameters.FrontFaceModeSetting) {
|
||||
const FrontFaceMode& ffm = parameters.FrontFaceModeSetting;
|
||||
g_GLESFuncs.glFrontFace(MG_Util::ConvertFrontFaceModeToGLEnum(ffm));
|
||||
}
|
||||
}
|
||||
|
||||
{ // Scissor box
|
||||
|
||||
@@ -305,6 +305,9 @@ namespace MobileGL::MG_Impl::GLImpl {
|
||||
case GL_CULL_FACE_MODE:
|
||||
*params = static_cast<GLint>(MG_Util::ConvertCullFaceModeToGLEnum(MG_State::pGLContext->GetCullFaceMode()));
|
||||
break;
|
||||
case GL_FRONT_FACE:
|
||||
*params = static_cast<GLint>(MG_Util::ConvertFrontFaceModeToGLEnum(MG_State::pGLContext->GetFrontFaceMode()));
|
||||
break;
|
||||
case GL_CURRENT_PROGRAM: {
|
||||
const auto& currentProgram = MG_State::pGLContext->GetCurrentProgram();
|
||||
*params = currentProgram ? (GLint)currentProgram->GetExternalIndex() : 0;
|
||||
|
||||
@@ -154,7 +154,18 @@ namespace MobileGL::MG_Impl::GLImpl {
|
||||
}
|
||||
|
||||
void FrontFace_State(GLenum mode) {
|
||||
// TODO: implement
|
||||
FrontFaceMode frontFaceMode = MG_Util::ConvertGLEnumToFrontFaceMode(mode);
|
||||
if (frontFaceMode == FrontFaceMode::Unknown) {
|
||||
MG_State::pGLContext->RecordError(
|
||||
ErrorCode::InvalidEnum,
|
||||
MakeUnique<GenericErrorInfo>("MG_Impl/GLImpl", "FrontFace_State",
|
||||
"Front face mode enum " +
|
||||
MG_Util::ConvertFrontFaceModeToString(frontFaceMode) + "(" +
|
||||
MG_Util::ConvertGLEnumToString(mode) + ") is not supported."));
|
||||
return;
|
||||
}
|
||||
|
||||
MG_State::pGLContext->SetFrontFaceMode(frontFaceMode);
|
||||
}
|
||||
|
||||
void Enable_State(GLenum cap) {
|
||||
|
||||
@@ -405,6 +405,14 @@ namespace MobileGL::MG_State {
|
||||
return m_renderState.GetCullFaceMode();
|
||||
}
|
||||
|
||||
void GLContext::SetFrontFaceMode(FrontFaceMode mode) {
|
||||
m_renderState.SetFrontFaceMode(mode);
|
||||
}
|
||||
|
||||
FrontFaceMode GLContext::GetFrontFaceMode() const {
|
||||
return m_renderState.GetFrontFaceMode();
|
||||
}
|
||||
|
||||
void GLContext::SetScissorBox(IntVec4 box) {
|
||||
m_renderState.SetScissorBox(box);
|
||||
}
|
||||
|
||||
@@ -134,6 +134,8 @@ namespace MobileGL {
|
||||
PixelStoreParameters GetPixelStoreParameters(Bool isUnpack) const;
|
||||
void SetCullFaceMode(CullFaceMode mode);
|
||||
CullFaceMode GetCullFaceMode() const;
|
||||
void SetFrontFaceMode(FrontFaceMode mode);
|
||||
FrontFaceMode GetFrontFaceMode() const;
|
||||
void SetScissorBox(IntVec4 box); // x, y, width, height
|
||||
const IntVec4& GetScissorBox() const; // x, y, width, height
|
||||
|
||||
|
||||
@@ -349,6 +349,17 @@ namespace MobileGL {
|
||||
return m_parameters.CullFaceModeSetting;
|
||||
}
|
||||
|
||||
void RenderState::SetFrontFaceMode(FrontFaceMode mode) {
|
||||
if (m_parameters.FrontFaceModeSetting == mode) return;
|
||||
|
||||
m_parameters.FrontFaceModeSetting = mode;
|
||||
++m_version;
|
||||
}
|
||||
|
||||
FrontFaceMode RenderState::GetFrontFaceMode() const {
|
||||
return m_parameters.FrontFaceModeSetting;
|
||||
}
|
||||
|
||||
// --------------------- Scissor ---------------------
|
||||
void RenderState::SetScissorBox(IntVec4 box) {
|
||||
if (m_parameters.ScissorBox == box) return;
|
||||
|
||||
@@ -87,6 +87,13 @@ namespace MobileGL {
|
||||
Unknown = -1
|
||||
};
|
||||
|
||||
enum class FrontFaceMode {
|
||||
CounterClockwise,
|
||||
Clockwise,
|
||||
FrontFaceModeCount,
|
||||
Unknown = -1
|
||||
};
|
||||
|
||||
enum class CapabilityInput {
|
||||
Blend,
|
||||
ClipDistance0,
|
||||
@@ -171,6 +178,7 @@ namespace MobileGL {
|
||||
// Cull Face
|
||||
Bool CullFaceEnabled = false;
|
||||
CullFaceMode CullFaceModeSetting = CullFaceMode::Back;
|
||||
FrontFaceMode FrontFaceModeSetting = FrontFaceMode::CounterClockwise;
|
||||
|
||||
// Scissor
|
||||
Bool ScissorTestEnabled = false;
|
||||
@@ -235,6 +243,8 @@ namespace MobileGL {
|
||||
// Cull Face
|
||||
void SetCullFaceMode(CullFaceMode mode);
|
||||
CullFaceMode GetCullFaceMode() const;
|
||||
void SetFrontFaceMode(FrontFaceMode mode);
|
||||
FrontFaceMode GetFrontFaceMode() const;
|
||||
|
||||
// Scissor
|
||||
void SetScissorBox(IntVec4 box); // x, y, width, height
|
||||
|
||||
@@ -137,6 +137,17 @@ namespace MobileGL {
|
||||
}
|
||||
}
|
||||
|
||||
FrontFaceMode ConvertGLEnumToFrontFaceMode(GLenum v) {
|
||||
switch (v) {
|
||||
case GL_CCW:
|
||||
return FrontFaceMode::CounterClockwise;
|
||||
case GL_CW:
|
||||
return FrontFaceMode::Clockwise;
|
||||
default:
|
||||
return FrontFaceMode::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
CapabilityInput ConvertGLEnumToCapabilityInput(GLenum v) {
|
||||
switch (v) {
|
||||
case GL_BLEND:
|
||||
|
||||
@@ -17,6 +17,7 @@ namespace MobileGL {
|
||||
DepthTestFunc ConvertGLEnumToDepthTestFunc(GLenum value);
|
||||
PixelStoreParam ConvertGLEnumToPixelStoreParam(GLenum value);
|
||||
CullFaceMode ConvertGLEnumToCullFaceMode(GLenum value);
|
||||
FrontFaceMode ConvertGLEnumToFrontFaceMode(GLenum value);
|
||||
CapabilityInput ConvertGLEnumToCapabilityInput(GLenum value);
|
||||
} // namespace MG_Util
|
||||
} // namespace MobileGL
|
||||
|
||||
@@ -138,6 +138,17 @@ namespace MobileGL {
|
||||
}
|
||||
}
|
||||
|
||||
GLenum ConvertFrontFaceModeToGLEnum(FrontFaceMode v) {
|
||||
switch (v) {
|
||||
case FrontFaceMode::CounterClockwise:
|
||||
return GL_CCW;
|
||||
case FrontFaceMode::Clockwise:
|
||||
return GL_CW;
|
||||
default:
|
||||
return GL_UNKNOWN_MGL;
|
||||
}
|
||||
}
|
||||
|
||||
GLenum ConvertCapabilityInputToGLEnum(CapabilityInput v) {
|
||||
switch (v) {
|
||||
case CapabilityInput::Blend:
|
||||
|
||||
@@ -17,6 +17,7 @@ namespace MobileGL {
|
||||
GLenum ConvertDepthTestFuncToGLEnum(DepthTestFunc value);
|
||||
GLenum ConvertPixelStoreParamToGLEnum(PixelStoreParam value);
|
||||
GLenum ConvertCullFaceModeToGLEnum(CullFaceMode value);
|
||||
GLenum ConvertFrontFaceModeToGLEnum(FrontFaceMode value);
|
||||
GLenum ConvertCapabilityInputToGLEnum(CapabilityInput value);
|
||||
} // namespace MG_Util
|
||||
} // namespace MobileGL
|
||||
|
||||
@@ -120,6 +120,17 @@ namespace MobileGL {
|
||||
}
|
||||
}
|
||||
|
||||
String ConvertFrontFaceModeToString(FrontFaceMode v) {
|
||||
switch (v) {
|
||||
case FrontFaceMode::CounterClockwise:
|
||||
return "CounterClockwise";
|
||||
case FrontFaceMode::Clockwise:
|
||||
return "Clockwise";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
String ConvertCapabilityInputToString(CapabilityInput v) {
|
||||
switch (v) {
|
||||
case CapabilityInput::Blend:
|
||||
@@ -197,4 +208,4 @@ namespace MobileGL {
|
||||
}
|
||||
}
|
||||
} // namespace MG_Util
|
||||
} // namespace MobileGL
|
||||
} // namespace MobileGL
|
||||
|
||||
@@ -16,6 +16,7 @@ namespace MobileGL {
|
||||
String ConvertDepthTestFuncToString(DepthTestFunc value);
|
||||
String ConvertPixelStoreParamToString(PixelStoreParam value);
|
||||
String ConvertCullFaceModeToString(CullFaceMode value);
|
||||
String ConvertFrontFaceModeToString(FrontFaceMode value);
|
||||
String ConvertCapabilityInputToString(CapabilityInput value);
|
||||
} // namespace MG_Util
|
||||
} // namespace MobileGL
|
||||
} // namespace MobileGL
|
||||
|
||||
Reference in New Issue
Block a user