mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 06:08:30 +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;
|
const CullFaceMode& cfm = parameters.CullFaceModeSetting;
|
||||||
g_GLESFuncs.glCullFace(MG_Util::ConvertCullFaceModeToGLEnum(cfm));
|
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
|
{ // Scissor box
|
||||||
|
|||||||
@@ -305,6 +305,9 @@ namespace MobileGL::MG_Impl::GLImpl {
|
|||||||
case GL_CULL_FACE_MODE:
|
case GL_CULL_FACE_MODE:
|
||||||
*params = static_cast<GLint>(MG_Util::ConvertCullFaceModeToGLEnum(MG_State::pGLContext->GetCullFaceMode()));
|
*params = static_cast<GLint>(MG_Util::ConvertCullFaceModeToGLEnum(MG_State::pGLContext->GetCullFaceMode()));
|
||||||
break;
|
break;
|
||||||
|
case GL_FRONT_FACE:
|
||||||
|
*params = static_cast<GLint>(MG_Util::ConvertFrontFaceModeToGLEnum(MG_State::pGLContext->GetFrontFaceMode()));
|
||||||
|
break;
|
||||||
case GL_CURRENT_PROGRAM: {
|
case GL_CURRENT_PROGRAM: {
|
||||||
const auto& currentProgram = MG_State::pGLContext->GetCurrentProgram();
|
const auto& currentProgram = MG_State::pGLContext->GetCurrentProgram();
|
||||||
*params = currentProgram ? (GLint)currentProgram->GetExternalIndex() : 0;
|
*params = currentProgram ? (GLint)currentProgram->GetExternalIndex() : 0;
|
||||||
|
|||||||
@@ -154,7 +154,18 @@ namespace MobileGL::MG_Impl::GLImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FrontFace_State(GLenum mode) {
|
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) {
|
void Enable_State(GLenum cap) {
|
||||||
|
|||||||
@@ -405,6 +405,14 @@ namespace MobileGL::MG_State {
|
|||||||
return m_renderState.GetCullFaceMode();
|
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) {
|
void GLContext::SetScissorBox(IntVec4 box) {
|
||||||
m_renderState.SetScissorBox(box);
|
m_renderState.SetScissorBox(box);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,6 +134,8 @@ namespace MobileGL {
|
|||||||
PixelStoreParameters GetPixelStoreParameters(Bool isUnpack) const;
|
PixelStoreParameters GetPixelStoreParameters(Bool isUnpack) const;
|
||||||
void SetCullFaceMode(CullFaceMode mode);
|
void SetCullFaceMode(CullFaceMode mode);
|
||||||
CullFaceMode GetCullFaceMode() const;
|
CullFaceMode GetCullFaceMode() const;
|
||||||
|
void SetFrontFaceMode(FrontFaceMode mode);
|
||||||
|
FrontFaceMode GetFrontFaceMode() const;
|
||||||
void SetScissorBox(IntVec4 box); // x, y, width, height
|
void SetScissorBox(IntVec4 box); // x, y, width, height
|
||||||
const IntVec4& GetScissorBox() const; // x, y, width, height
|
const IntVec4& GetScissorBox() const; // x, y, width, height
|
||||||
|
|
||||||
|
|||||||
@@ -349,6 +349,17 @@ namespace MobileGL {
|
|||||||
return m_parameters.CullFaceModeSetting;
|
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 ---------------------
|
// --------------------- Scissor ---------------------
|
||||||
void RenderState::SetScissorBox(IntVec4 box) {
|
void RenderState::SetScissorBox(IntVec4 box) {
|
||||||
if (m_parameters.ScissorBox == box) return;
|
if (m_parameters.ScissorBox == box) return;
|
||||||
|
|||||||
@@ -87,6 +87,13 @@ namespace MobileGL {
|
|||||||
Unknown = -1
|
Unknown = -1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class FrontFaceMode {
|
||||||
|
CounterClockwise,
|
||||||
|
Clockwise,
|
||||||
|
FrontFaceModeCount,
|
||||||
|
Unknown = -1
|
||||||
|
};
|
||||||
|
|
||||||
enum class CapabilityInput {
|
enum class CapabilityInput {
|
||||||
Blend,
|
Blend,
|
||||||
ClipDistance0,
|
ClipDistance0,
|
||||||
@@ -171,6 +178,7 @@ namespace MobileGL {
|
|||||||
// Cull Face
|
// Cull Face
|
||||||
Bool CullFaceEnabled = false;
|
Bool CullFaceEnabled = false;
|
||||||
CullFaceMode CullFaceModeSetting = CullFaceMode::Back;
|
CullFaceMode CullFaceModeSetting = CullFaceMode::Back;
|
||||||
|
FrontFaceMode FrontFaceModeSetting = FrontFaceMode::CounterClockwise;
|
||||||
|
|
||||||
// Scissor
|
// Scissor
|
||||||
Bool ScissorTestEnabled = false;
|
Bool ScissorTestEnabled = false;
|
||||||
@@ -235,6 +243,8 @@ namespace MobileGL {
|
|||||||
// Cull Face
|
// Cull Face
|
||||||
void SetCullFaceMode(CullFaceMode mode);
|
void SetCullFaceMode(CullFaceMode mode);
|
||||||
CullFaceMode GetCullFaceMode() const;
|
CullFaceMode GetCullFaceMode() const;
|
||||||
|
void SetFrontFaceMode(FrontFaceMode mode);
|
||||||
|
FrontFaceMode GetFrontFaceMode() const;
|
||||||
|
|
||||||
// Scissor
|
// Scissor
|
||||||
void SetScissorBox(IntVec4 box); // x, y, width, height
|
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) {
|
CapabilityInput ConvertGLEnumToCapabilityInput(GLenum v) {
|
||||||
switch (v) {
|
switch (v) {
|
||||||
case GL_BLEND:
|
case GL_BLEND:
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ namespace MobileGL {
|
|||||||
DepthTestFunc ConvertGLEnumToDepthTestFunc(GLenum value);
|
DepthTestFunc ConvertGLEnumToDepthTestFunc(GLenum value);
|
||||||
PixelStoreParam ConvertGLEnumToPixelStoreParam(GLenum value);
|
PixelStoreParam ConvertGLEnumToPixelStoreParam(GLenum value);
|
||||||
CullFaceMode ConvertGLEnumToCullFaceMode(GLenum value);
|
CullFaceMode ConvertGLEnumToCullFaceMode(GLenum value);
|
||||||
|
FrontFaceMode ConvertGLEnumToFrontFaceMode(GLenum value);
|
||||||
CapabilityInput ConvertGLEnumToCapabilityInput(GLenum value);
|
CapabilityInput ConvertGLEnumToCapabilityInput(GLenum value);
|
||||||
} // namespace MG_Util
|
} // namespace MG_Util
|
||||||
} // namespace MobileGL
|
} // 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) {
|
GLenum ConvertCapabilityInputToGLEnum(CapabilityInput v) {
|
||||||
switch (v) {
|
switch (v) {
|
||||||
case CapabilityInput::Blend:
|
case CapabilityInput::Blend:
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ namespace MobileGL {
|
|||||||
GLenum ConvertDepthTestFuncToGLEnum(DepthTestFunc value);
|
GLenum ConvertDepthTestFuncToGLEnum(DepthTestFunc value);
|
||||||
GLenum ConvertPixelStoreParamToGLEnum(PixelStoreParam value);
|
GLenum ConvertPixelStoreParamToGLEnum(PixelStoreParam value);
|
||||||
GLenum ConvertCullFaceModeToGLEnum(CullFaceMode value);
|
GLenum ConvertCullFaceModeToGLEnum(CullFaceMode value);
|
||||||
|
GLenum ConvertFrontFaceModeToGLEnum(FrontFaceMode value);
|
||||||
GLenum ConvertCapabilityInputToGLEnum(CapabilityInput value);
|
GLenum ConvertCapabilityInputToGLEnum(CapabilityInput value);
|
||||||
} // namespace MG_Util
|
} // namespace MG_Util
|
||||||
} // namespace MobileGL
|
} // 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) {
|
String ConvertCapabilityInputToString(CapabilityInput v) {
|
||||||
switch (v) {
|
switch (v) {
|
||||||
case CapabilityInput::Blend:
|
case CapabilityInput::Blend:
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ namespace MobileGL {
|
|||||||
String ConvertDepthTestFuncToString(DepthTestFunc value);
|
String ConvertDepthTestFuncToString(DepthTestFunc value);
|
||||||
String ConvertPixelStoreParamToString(PixelStoreParam value);
|
String ConvertPixelStoreParamToString(PixelStoreParam value);
|
||||||
String ConvertCullFaceModeToString(CullFaceMode value);
|
String ConvertCullFaceModeToString(CullFaceMode value);
|
||||||
|
String ConvertFrontFaceModeToString(FrontFaceMode value);
|
||||||
String ConvertCapabilityInputToString(CapabilityInput value);
|
String ConvertCapabilityInputToString(CapabilityInput value);
|
||||||
} // namespace MG_Util
|
} // namespace MG_Util
|
||||||
} // namespace MobileGL
|
} // namespace MobileGL
|
||||||
Reference in New Issue
Block a user