[Feat] (MG_Backend/DirectGLES, GL_Impl/Getter): hardcode getter, sync some sampler parameters

This commit is contained in:
2025-10-29 16:39:03 +08:00
parent 683d8b35bf
commit b82c481605
4 changed files with 45 additions and 23 deletions
@@ -297,6 +297,14 @@ namespace MobileGL::MG_Backend::DirectGLES {
GLenum target = MG_Util::ConvertTextureTargetToGLEnum(textureObject->GetTarget()); GLenum target = MG_Util::ConvertTextureTargetToGLEnum(textureObject->GetTarget());
backendTextureIt->second->Bind(target); 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, MG_External::GLES::glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0,
dstX1, dstY1, mask, filter); dstX1, dstY1, mask, filter);
} }
const GLubyte* GetString(GLenum name) {
return MG_External::GLES::glGetString(name);
}
} // namespace MobileGL::MG_Backend::DirectGLES } // namespace MobileGL::MG_Backend::DirectGLES
@@ -16,4 +16,5 @@ namespace MobileGL::MG_Backend::DirectGLES {
GLsizei drawcount, const GLint* basevertex); GLsizei drawcount, const GLint* basevertex);
void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0,
GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
const GLubyte* GetString(GLenum name);
} // namespace MobileGL::MG_Backend::DirectGLES } // namespace MobileGL::MG_Backend::DirectGLES
+18 -20
View File
@@ -5,7 +5,24 @@
namespace MobileGL { namespace MobileGL {
namespace MG_Config { 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 { namespace MG_Backend {
@@ -50,25 +67,6 @@ namespace MobileGL {
void Init() { void Init() {
MGLOG_D("Initializing MobileGL Backend..."); 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(); InitSpecificBackendLibs();
LogBackendInfo(); LogBackendInfo();
} }
+14 -3
View File
@@ -4,9 +4,18 @@
#include <MG_Util/Converters/GLToStr/GLEnumConverter.h> #include <MG_Util/Converters/GLToStr/GLEnumConverter.h>
#include <MG_Util/Converters/MGToGL/ErrorCodeConverter.h> #include <MG_Util/Converters/MGToGL/ErrorCodeConverter.h>
#include <MG_Util/Converters/MGToStr/GLExtensionConverter.h> #include <MG_Util/Converters/MGToStr/GLExtensionConverter.h>
#if MOBILEGL_BACKEND == MOBILEGL_BACKEND_TYPE_DIRECT_GLES
#include <MG_Backend/DirectGLES/DirectGLES.h>
#endif
namespace MobileGL { namespace MobileGL {
namespace MG_Impl::GLImpl { 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@ */ /* @INSERTION_POINT:FUNCTION_IMPLEMENTATION@ */
const GLubyte* GetString(GLenum name) { const GLubyte* GetString(GLenum name) {
static String vendorString; static String vendorString;
@@ -39,9 +48,9 @@ namespace MobileGL {
case GL_RENDERER: { case GL_RENDERER: {
if (rendererString.empty()) { if (rendererString.empty()) {
String deviceInfo; const char* backendStr = (const char*)GetString_Backend(GL_RENDER);
rendererString = std::format("{} ({}) ({})", MG_Config::RendererInfoPtr->RendererName.c_str(), rendererString = std::format("{} ({}) ({})", MG_Config::RendererInfoPtr->RendererName.c_str(),
MG_Config::CoreName.c_str(), deviceInfo); MG_Config::CoreName.c_str(), backendStr ? backendStr : "<unknown GPU>");
} }
return (const GLubyte*)rendererString.c_str(); return (const GLubyte*)rendererString.c_str();
} }
@@ -118,7 +127,9 @@ namespace MobileGL {
case GL_MAX_TEXTURE_SIZE: case GL_MAX_TEXTURE_SIZE:
params[0] = 1024 * 64; // TODO: get from backend params[0] = 1024 * 64; // TODO: get from backend
break; break;
case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
params[0] = 1; // TODO: get from backend
break;
// State // State
// TODO // TODO