mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-11 13:48:30 +09:00
[Feat] (MG_Backend/DirectGLES): implement glTexImage3D in the ES backend
This commit is contained in:
@@ -449,7 +449,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
|||||||
auto target = textureObject->GetTarget();
|
auto target = textureObject->GetTarget();
|
||||||
if (target == TextureTarget::Texture1D || target == TextureTarget::TextureRectangle ||
|
if (target == TextureTarget::Texture1D || target == TextureTarget::TextureRectangle ||
|
||||||
target == TextureTarget::Texture2DMultisampleArray || target == TextureTarget::Texture1DArray ||
|
target == TextureTarget::Texture2DMultisampleArray || target == TextureTarget::Texture1DArray ||
|
||||||
target == TextureTarget::Texture3D || target == TextureTarget::Texture2DMultisample ||
|
target == TextureTarget::Texture2DMultisample ||
|
||||||
target == TextureTarget::Texture2DArray) {
|
target == TextureTarget::Texture2DArray) {
|
||||||
MGLOG_D(" Texture target %s is not supported, skipping.",
|
MGLOG_D(" Texture target %s is not supported, skipping.",
|
||||||
MG_Util::ConvertTextureTargetToString(target).c_str());
|
MG_Util::ConvertTextureTargetToString(target).c_str());
|
||||||
|
|||||||
@@ -314,9 +314,10 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
|||||||
auto targetInternal = stateTextureObject->GetTarget();
|
auto targetInternal = stateTextureObject->GetTarget();
|
||||||
MGLOG_D(" Texture target for syncing is %s",
|
MGLOG_D(" Texture target for syncing is %s",
|
||||||
MG_Util::ConvertTextureTargetToString(targetInternal).c_str());
|
MG_Util::ConvertTextureTargetToString(targetInternal).c_str());
|
||||||
if (targetInternal == TextureTarget::Texture1D || targetInternal == TextureTarget::TextureRectangle ||
|
if (targetInternal == TextureTarget::Texture1D ||
|
||||||
|
targetInternal == TextureTarget::TextureRectangle ||
|
||||||
targetInternal == TextureTarget::Texture2DMultisampleArray ||
|
targetInternal == TextureTarget::Texture2DMultisampleArray ||
|
||||||
targetInternal == TextureTarget::Texture1DArray || targetInternal == TextureTarget::Texture3D ||
|
targetInternal == TextureTarget::Texture1DArray ||
|
||||||
targetInternal == TextureTarget::Texture2DMultisample ||
|
targetInternal == TextureTarget::Texture2DMultisample ||
|
||||||
targetInternal == TextureTarget::Texture2DArray) {
|
targetInternal == TextureTarget::Texture2DArray) {
|
||||||
MGLOG_E(" Texture target %s is not supported, skipping.",
|
MGLOG_E(" Texture target %s is not supported, skipping.",
|
||||||
@@ -385,13 +386,35 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
|||||||
|
|
||||||
errorLopper.Clear();
|
errorLopper.Clear();
|
||||||
MG_External::GLES::glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
MG_External::GLES::glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||||
MG_External::GLES::glTexImage2D(glUploadTarget, static_cast<GLint>(level), glInternalFormat,
|
// TODO: handle more texture types
|
||||||
|
switch (uploadTarget) {
|
||||||
|
case TextureUploadTarget::Texture2D:
|
||||||
|
case TextureUploadTarget::CubeMapPositiveX:
|
||||||
|
case TextureUploadTarget::CubeMapNegativeX:
|
||||||
|
case TextureUploadTarget::CubeMapPositiveY:
|
||||||
|
case TextureUploadTarget::CubeMapNegativeY:
|
||||||
|
case TextureUploadTarget::CubeMapPositiveZ:
|
||||||
|
case TextureUploadTarget::CubeMapNegativeZ:
|
||||||
|
{
|
||||||
|
MG_External::GLES::glTexImage2D(glUploadTarget, static_cast<GLint>(level), glInternalFormat,
|
||||||
static_cast<GLsizei>(levelTexelSize.x()),
|
static_cast<GLsizei>(levelTexelSize.x()),
|
||||||
static_cast<GLsizei>(levelTexelSize.y()), 0, glFormat,
|
static_cast<GLsizei>(levelTexelSize.y()), 0, glFormat,
|
||||||
glType, pData);
|
glType, pData);
|
||||||
|
break;
|
||||||
// TODO: handle more texture types
|
}
|
||||||
|
case TextureUploadTarget::Texture3D: {
|
||||||
|
MG_External::GLES::glTexImage3D(glUploadTarget, static_cast<GLint>(level), glInternalFormat,
|
||||||
|
static_cast<GLsizei>(levelTexelSize.x()),
|
||||||
|
static_cast<GLsizei>(levelTexelSize.y()),
|
||||||
|
static_cast<GLsizei>(levelTexelSize.z()),
|
||||||
|
0, glFormat,
|
||||||
|
glType, pData);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
MGLOG_E("Unhandled texture upload target %s", MG_Util::ConvertTextureUploadTargetToString(uploadTarget).c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
MGLOG_D("Regenerated mipmap level %d for texture with ID: %u", level, m_backendTextureId);
|
MGLOG_D("Regenerated mipmap level %d for texture with ID: %u", level, m_backendTextureId);
|
||||||
textureMipmapObject->MarkStorageDirty(uploadTarget, level, false);
|
textureMipmapObject->MarkStorageDirty(uploadTarget, level, false);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user