diff --git a/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp b/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp index 0f1c2b5a..b3c49ad1 100644 --- a/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp +++ b/MobileGL/MG_Backend/DirectGLES/DirectGLES.cpp @@ -297,6 +297,14 @@ namespace MobileGL::MG_Backend::DirectGLES { GLenum target = MG_Util::ConvertTextureTargetToGLEnum(textureObject->GetTarget()); backendTextureIt->second->Bind(target); + + const auto& samplerObj = textureObject->GetSamplerObject(); + const auto minfilter = samplerObj->GetMinFilter(); + MG_External::GLES::glTexParameteri(target, GL_TEXTURE_MIN_FILTER, MG_Util::ConvertSamplerFilterModeToGLEnum(minfilter)); + const auto magfilter = samplerObj->GetMagFilter(); + MG_External::GLES::glTexParameteri(target, GL_TEXTURE_MAG_FILTER, MG_Util::ConvertSamplerFilterModeToGLEnum(magfilter)); + MG_External::GLES::glTexParameterf(target, GL_TEXTURE_MIN_LOD, samplerObj->GetMinLod()); + MG_External::GLES::glTexParameterf(target, GL_TEXTURE_MAX_LOD, samplerObj->GetMaxLod()); } } @@ -387,4 +395,8 @@ namespace MobileGL::MG_Backend::DirectGLES { MG_External::GLES::glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } + + const GLubyte* GetString(GLenum name) { + return MG_External::GLES::glGetString(name); + } } // namespace MobileGL::MG_Backend::DirectGLES diff --git a/MobileGL/MG_Backend/DirectGLES/DirectGLES.h b/MobileGL/MG_Backend/DirectGLES/DirectGLES.h index cf75f742..3b7aeac5 100644 --- a/MobileGL/MG_Backend/DirectGLES/DirectGLES.h +++ b/MobileGL/MG_Backend/DirectGLES/DirectGLES.h @@ -16,4 +16,5 @@ namespace MobileGL::MG_Backend::DirectGLES { GLsizei drawcount, const GLint* basevertex); void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + const GLubyte* GetString(GLenum name); } // namespace MobileGL::MG_Backend::DirectGLES \ No newline at end of file diff --git a/MobileGL/MG_Backend/Init.cpp b/MobileGL/MG_Backend/Init.cpp index 1aeb25ae..6c4585c1 100644 --- a/MobileGL/MG_Backend/Init.cpp +++ b/MobileGL/MG_Backend/Init.cpp @@ -5,7 +5,24 @@ namespace MobileGL { namespace MG_Config { - RendererInfo* RendererInfoPtr = nullptr; + // TODO: tidy this mess up + RendererInfo* RendererInfoPtr = +#if MOBILEGL_BACKEND == MOBILEGL_BACKEND_DILIGENT + switch (MG_Config::Backend::Diligent::SpecificBackend) { + case MG_Backend::Diligent::SpecificBackendType::Vulkan: + MG_Config::RendererInfoPtr = &MG_Backend::Diligent::RendererInfoVulkan; + break; + case MG_Backend::Diligent::SpecificBackendType::Metal: + MG_Config::RendererInfoPtr = &MG_Backend::Diligent::RendererInfoMetal; + break; + default: + throw RuntimeError("Unsupported renderer type"); + } +#elif MOBILEGL_BACKEND == MOBILEGL_BACKEND_TYPE_DIRECT_GLES + &MG_Backend::DirectGLES::RendererInfo; +#else + MG_Config::RendererInfoPtr = &RendererInfoUnknown; +#endif } namespace MG_Backend { @@ -50,25 +67,6 @@ namespace MobileGL { void Init() { MGLOG_D("Initializing MobileGL Backend..."); -#if MOBILEGL_BACKEND == MOBILEGL_BACKEND_DILIGENT - switch (MG_Config::Backend::Diligent::SpecificBackend) { - case MG_Backend::Diligent::SpecificBackendType::Vulkan: - RendererInfo = MG_Backend::Diligent::RendererInfoVulkan; - break; - case MG_Backend::Diligent::SpecificBackendType::Metal: - RendererInfo = MG_Backend::Diligent::RendererInfoMetal; - break; - default: - throw RuntimeError("Unsupported renderer type"); - } -#elif MOBILEGL_BACKEND == MOBILEGL_BACKEND_TYPE_DIRECT_GLES - RendererInfo = MG_Backend::DirectGLES::RendererInfo; -#else - RendererInfo = RendererInfoUnknown; -#endif - - MG_Config::RendererInfoPtr = &RendererInfo; - InitSpecificBackendLibs(); LogBackendInfo(); } diff --git a/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp b/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp index d150fb15..96f60354 100644 --- a/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp +++ b/MobileGL/MG_Impl/GLImpl/Getter/GL_Getter.cpp @@ -4,9 +4,18 @@ #include #include #include +#if MOBILEGL_BACKEND == MOBILEGL_BACKEND_TYPE_DIRECT_GLES +#include +#endif namespace MobileGL { namespace MG_Impl::GLImpl { + const GLubyte* GetString_Backend(GLenum name) { +#if MOBILEGL_BACKEND == MOBILEGL_BACKEND_TYPE_DIRECT_GLES + return MG_Backend::DirectGLES::GetString(name); +#endif + } + /* @INSERTION_POINT:FUNCTION_IMPLEMENTATION@ */ const GLubyte* GetString(GLenum name) { static String vendorString; @@ -39,9 +48,9 @@ namespace MobileGL { case GL_RENDERER: { if (rendererString.empty()) { - String deviceInfo; + const char* backendStr = (const char*)GetString_Backend(GL_RENDER); rendererString = std::format("{} ({}) ({})", MG_Config::RendererInfoPtr->RendererName.c_str(), - MG_Config::CoreName.c_str(), deviceInfo); + MG_Config::CoreName.c_str(), backendStr ? backendStr : ""); } return (const GLubyte*)rendererString.c_str(); } @@ -118,7 +127,9 @@ namespace MobileGL { case GL_MAX_TEXTURE_SIZE: params[0] = 1024 * 64; // TODO: get from backend break; - + case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: + params[0] = 1; // TODO: get from backend + break; // State // TODO