C

Qt Quick Ultralite traveo_t2g_effects Example

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial

#include "cygfx.h"

#include <platforminterface/log.h>

namespace CyGfx {

CYGFX_SM_FORMAT convertFormat(Qul::PixelFormat format)
{
    CYGFX_SM_FORMAT result = CYGFX_SM_FORMAT_A8R8G8B8;
    switch (format) {
    case Qul::PixelFormat_ARGB32:
    case Qul::PixelFormat_ARGB32_Premultiplied:
        result = CYGFX_SM_FORMAT_A8R8G8B8;
        break;
    case Qul::PixelFormat_RGB32:
        result = CYGFX_SM_FORMAT_X8R8G8B8;
        break;
    case Qul::PixelFormat_RGB888:
        result = CYGFX_SM_FORMAT_R8G8B8;
        break;
    case Qul::PixelFormat_RGB16:
        result = CYGFX_SM_FORMAT_R5G6B5;
        break;
    case Qul::PixelFormat_Alpha8:
        result = CYGFX_SM_FORMAT_A8;
        break;
    default:
        Qul::PlatformInterface::log("[%s] Unsupported Format! (%d)\n\r", __PRETTY_FUNCTION__, format);
    }
    return result;
}

void loadSurface(CSurface<1> *surface, const Qul::PlatformInterface::Texture &texture)
{
    CYGFX_ERROR ret = CYGFX_OK;
    if (texture.format() >= Qul::PixelFormat_Custom) {
        UTIL_SUCCESS(ret, surface->SurfLoadBitmap(texture.data(), false));
    } else {
        UTIL_SUCCESS(ret,
                     CyGfx_SmAssignBuffer(*surface,
                                          texture.width(),
                                          texture.height(),
                                          convertFormat(texture.format()),
                                          const_cast<unsigned char *>(texture.data()),
                                          0));

        UTIL_SUCCESS(ret, CyGfx_SmSetAttribute(*surface, CYGFX_SM_ATTR_STRIDE, texture.bytesPerLine()));
        UTIL_SUCCESS(ret, CyGfx_SmSetAttribute(*surface, CYGFX_SM_ATTR_BITPERPIXEL, texture.bitsPerPixel()));
    }
}

} // namespace CyGfx