mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-09 04:38:30 +09:00
Implemented: - Advertise Voxy-required DirectVulkan extensions without raising the reported OpenGL version. - Add DirectVulkan compute, indirect draw count, DSA, readback, and buffer state paths needed by Voxy. Fixed: - Enable Vulkan shaderInt64 and drawIndirectFirstInstance so Voxy baseInstance-driven LOD draws address the correct section data. - Fix DirectVulkan synchronization, framebuffer, texture readback, and shader interface handling used by Voxy and Minecraft screenshots. Tests: - Add MG_Test coverage for DirectVulkan extension advertising, DSA buffer/texture/framebuffer/vertex-array behavior, persistent mapped readback, and shader/program paths.
241 lines
9.2 KiB
C++
241 lines
9.2 KiB
C++
// MobileGL - MobileGL/MG_Util/Converters/MGToGL/RenderStateEnumConverter.cpp
|
|
// Copyright (c) 2025-2026 MobileGL-Dev
|
|
// Licensed under the GNU Lesser General Public License v3.0:
|
|
// https://www.gnu.org/licenses/gpl-3.0.txt
|
|
// https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
// SPDX-License-Identifier: LGPL-3.0-only
|
|
// End of Source File Header
|
|
|
|
#include "RenderStateEnumConverter.h"
|
|
|
|
namespace MobileGL {
|
|
namespace MG_Util {
|
|
|
|
GLenum ConvertBlendFactorToGLEnum(BlendFactor v) {
|
|
switch (v) {
|
|
case BlendFactor::Zero:
|
|
return GL_ZERO;
|
|
case BlendFactor::One:
|
|
return GL_ONE;
|
|
case BlendFactor::SrcColor:
|
|
return GL_SRC_COLOR;
|
|
case BlendFactor::OneMinusSrcColor:
|
|
return GL_ONE_MINUS_SRC_COLOR;
|
|
case BlendFactor::DstColor:
|
|
return GL_DST_COLOR;
|
|
case BlendFactor::OneMinusDstColor:
|
|
return GL_ONE_MINUS_DST_COLOR;
|
|
case BlendFactor::SrcAlpha:
|
|
return GL_SRC_ALPHA;
|
|
case BlendFactor::OneMinusSrcAlpha:
|
|
return GL_ONE_MINUS_SRC_ALPHA;
|
|
case BlendFactor::DstAlpha:
|
|
return GL_DST_ALPHA;
|
|
case BlendFactor::OneMinusDstAlpha:
|
|
return GL_ONE_MINUS_DST_ALPHA;
|
|
case BlendFactor::ConstantColor:
|
|
return GL_CONSTANT_COLOR;
|
|
case BlendFactor::OneMinusConstantColor:
|
|
return GL_ONE_MINUS_CONSTANT_COLOR;
|
|
case BlendFactor::ConstantAlpha:
|
|
return GL_CONSTANT_ALPHA;
|
|
case BlendFactor::OneMinusConstantAlpha:
|
|
return GL_ONE_MINUS_CONSTANT_ALPHA;
|
|
default:
|
|
return GL_UNKNOWN_MGL;
|
|
}
|
|
}
|
|
|
|
GLenum ConvertBlendEquationToGLEnum(BlendEquation v) {
|
|
switch (v) {
|
|
case BlendEquation::Add:
|
|
return GL_FUNC_ADD;
|
|
case BlendEquation::Subtract:
|
|
return GL_FUNC_SUBTRACT;
|
|
case BlendEquation::ReverseSubtract:
|
|
return GL_FUNC_REVERSE_SUBTRACT;
|
|
case BlendEquation::Min:
|
|
return GL_MIN;
|
|
case BlendEquation::Max:
|
|
return GL_MAX;
|
|
default:
|
|
return GL_UNKNOWN_MGL;
|
|
}
|
|
}
|
|
|
|
GLenum ConvertDepthTestFuncToGLEnum(DepthTestFunc v) {
|
|
switch (v) {
|
|
case DepthTestFunc::Never:
|
|
return GL_NEVER;
|
|
case DepthTestFunc::Less:
|
|
return GL_LESS;
|
|
case DepthTestFunc::Equal:
|
|
return GL_EQUAL;
|
|
case DepthTestFunc::LessEqual:
|
|
return GL_LEQUAL;
|
|
case DepthTestFunc::Greater:
|
|
return GL_GREATER;
|
|
case DepthTestFunc::NotEqual:
|
|
return GL_NOTEQUAL;
|
|
case DepthTestFunc::GreaterEqual:
|
|
return GL_GEQUAL;
|
|
case DepthTestFunc::Always:
|
|
return GL_ALWAYS;
|
|
default:
|
|
return GL_UNKNOWN_MGL;
|
|
}
|
|
}
|
|
|
|
GLenum ConvertPixelStoreParamToGLEnum(PixelStoreParam v) {
|
|
switch (v) {
|
|
case PixelStoreParam::PackAlignment:
|
|
return GL_PACK_ALIGNMENT;
|
|
case PixelStoreParam::PackRowLength:
|
|
return GL_PACK_ROW_LENGTH;
|
|
case PixelStoreParam::PackImageHeight:
|
|
return GL_PACK_IMAGE_HEIGHT;
|
|
case PixelStoreParam::PackSkipRows:
|
|
return GL_PACK_SKIP_ROWS;
|
|
case PixelStoreParam::PackSkipPixels:
|
|
return GL_PACK_SKIP_PIXELS;
|
|
case PixelStoreParam::PackSkipImages:
|
|
return GL_PACK_SKIP_IMAGES;
|
|
case PixelStoreParam::PackSwapBytes:
|
|
return GL_PACK_SWAP_BYTES;
|
|
case PixelStoreParam::PackLSBFirst:
|
|
return GL_PACK_LSB_FIRST;
|
|
case PixelStoreParam::UnpackAlignment:
|
|
return GL_UNPACK_ALIGNMENT;
|
|
case PixelStoreParam::UnpackRowLength:
|
|
return GL_UNPACK_ROW_LENGTH;
|
|
case PixelStoreParam::UnpackImageHeight:
|
|
return GL_UNPACK_IMAGE_HEIGHT;
|
|
case PixelStoreParam::UnpackSkipRows:
|
|
return GL_UNPACK_SKIP_ROWS;
|
|
case PixelStoreParam::UnpackSkipPixels:
|
|
return GL_UNPACK_SKIP_PIXELS;
|
|
case PixelStoreParam::UnpackSkipImages:
|
|
return GL_UNPACK_SKIP_IMAGES;
|
|
case PixelStoreParam::UnpackSwapBytes:
|
|
return GL_UNPACK_SWAP_BYTES;
|
|
case PixelStoreParam::UnpackLSBFirst:
|
|
return GL_UNPACK_LSB_FIRST;
|
|
default:
|
|
return GL_UNKNOWN_MGL;
|
|
}
|
|
}
|
|
|
|
GLenum ConvertCullFaceModeToGLEnum(CullFaceMode v) {
|
|
switch (v) {
|
|
case CullFaceMode::Front:
|
|
return GL_FRONT;
|
|
case CullFaceMode::Back:
|
|
return GL_BACK;
|
|
case CullFaceMode::FrontAndBack:
|
|
return GL_FRONT_AND_BACK;
|
|
default:
|
|
return GL_UNKNOWN_MGL;
|
|
}
|
|
}
|
|
|
|
GLenum ConvertFrontFaceModeToGLEnum(FrontFaceMode v) {
|
|
switch (v) {
|
|
case FrontFaceMode::CounterClockwise:
|
|
return GL_CCW;
|
|
case FrontFaceMode::Clockwise:
|
|
return GL_CW;
|
|
default:
|
|
return GL_UNKNOWN_MGL;
|
|
}
|
|
}
|
|
|
|
GLenum ConvertProvokingVertexModeToGLEnum(ProvokingVertexMode v) {
|
|
switch (v) {
|
|
case ProvokingVertexMode::FirstVertex:
|
|
return GL_FIRST_VERTEX_CONVENTION;
|
|
case ProvokingVertexMode::LastVertex:
|
|
return GL_LAST_VERTEX_CONVENTION;
|
|
default:
|
|
return GL_UNKNOWN_MGL;
|
|
}
|
|
}
|
|
|
|
GLenum ConvertCapabilityInputToGLEnum(CapabilityInput v) {
|
|
switch (v) {
|
|
case CapabilityInput::Blend:
|
|
return GL_BLEND;
|
|
case CapabilityInput::ClipDistance0:
|
|
return GL_CLIP_DISTANCE0;
|
|
case CapabilityInput::ClipDistance1:
|
|
return GL_CLIP_DISTANCE1;
|
|
case CapabilityInput::ClipDistance2:
|
|
return GL_CLIP_DISTANCE2;
|
|
case CapabilityInput::ClipDistance3:
|
|
return GL_CLIP_DISTANCE3;
|
|
case CapabilityInput::ClipDistance4:
|
|
return GL_CLIP_DISTANCE4;
|
|
case CapabilityInput::ClipDistance5:
|
|
return GL_CLIP_DISTANCE5;
|
|
case CapabilityInput::ClipDistance6:
|
|
return GL_CLIP_DISTANCE6;
|
|
case CapabilityInput::ClipDistance7:
|
|
return GL_CLIP_DISTANCE7;
|
|
case CapabilityInput::ColorLogicOp:
|
|
return GL_COLOR_LOGIC_OP;
|
|
case CapabilityInput::CullFace:
|
|
return GL_CULL_FACE;
|
|
case CapabilityInput::DebugOutput:
|
|
return GL_DEBUG_OUTPUT;
|
|
case CapabilityInput::DebugOutputSynchronous:
|
|
return GL_DEBUG_OUTPUT_SYNCHRONOUS;
|
|
case CapabilityInput::DepthClamp:
|
|
return GL_DEPTH_CLAMP;
|
|
case CapabilityInput::DepthTest:
|
|
return GL_DEPTH_TEST;
|
|
case CapabilityInput::Dither:
|
|
return GL_DITHER;
|
|
case CapabilityInput::FramebufferSrgb:
|
|
return GL_FRAMEBUFFER_SRGB;
|
|
case CapabilityInput::LineSmooth:
|
|
return GL_LINE_SMOOTH;
|
|
case CapabilityInput::Multisample:
|
|
return GL_MULTISAMPLE;
|
|
case CapabilityInput::PolygonOffsetFill:
|
|
return GL_POLYGON_OFFSET_FILL;
|
|
case CapabilityInput::PolygonOffsetLine:
|
|
return GL_POLYGON_OFFSET_LINE;
|
|
case CapabilityInput::PolygonOffsetPoint:
|
|
return GL_POLYGON_OFFSET_POINT;
|
|
case CapabilityInput::PolygonSmooth:
|
|
return GL_POLYGON_SMOOTH;
|
|
case CapabilityInput::PrimitiveRestart:
|
|
return GL_PRIMITIVE_RESTART;
|
|
case CapabilityInput::PrimitiveRestartFixedIndex:
|
|
return GL_PRIMITIVE_RESTART_FIXED_INDEX;
|
|
case CapabilityInput::RasterizerDiscard:
|
|
return GL_RASTERIZER_DISCARD;
|
|
case CapabilityInput::SampleAlphaToCoverage:
|
|
return GL_SAMPLE_ALPHA_TO_COVERAGE;
|
|
case CapabilityInput::SampleAlphaToOne:
|
|
return GL_SAMPLE_ALPHA_TO_ONE;
|
|
case CapabilityInput::SampleCoverage:
|
|
return GL_SAMPLE_COVERAGE;
|
|
case CapabilityInput::SampleShading:
|
|
return GL_SAMPLE_SHADING;
|
|
case CapabilityInput::SampleMask:
|
|
return GL_SAMPLE_MASK;
|
|
case CapabilityInput::ScissorTest:
|
|
return GL_SCISSOR_TEST;
|
|
case CapabilityInput::StencilTest:
|
|
return GL_STENCIL_TEST;
|
|
case CapabilityInput::TextureCubeMapSeamless:
|
|
return GL_TEXTURE_CUBE_MAP_SEAMLESS;
|
|
case CapabilityInput::ProgramPointSize:
|
|
return GL_PROGRAM_POINT_SIZE;
|
|
default:
|
|
return GL_UNKNOWN_MGL;
|
|
}
|
|
}
|
|
} // namespace MG_Util
|
|
} // namespace MobileGL
|