/*
 *  Copyright (C) 2017-2018 Team Kodi
 *  This file is part of Kodi - https://kodi.tv
 *
 *  SPDX-License-Identifier: GPL-2.0-or-later
 *  See LICENSES/README.md for more information.
 */

#pragma once

#include "cores/RetroPlayer/buffers/BaseRenderBuffer.h"
#include "cores/GameSettings.h"
#include "guilib/Texture.h"
#include "guilib/TextureFormats.h"

#include <memory>

namespace KODI
{
namespace RETRO
{
  class CRenderBufferGuiTexture : public CBaseRenderBuffer
  {
  public:
    CRenderBufferGuiTexture(SCALINGMETHOD scalingMethod);
    virtual ~CRenderBufferGuiTexture() = default;

    // implementation of IRenderBuffer via CBaseRenderBuffer
    bool Allocate(AVPixelFormat format, unsigned int width, unsigned int height) override;
    size_t GetFrameSize() const override;
    uint8_t *GetMemory() override;
    bool UploadTexture() override;
    void BindToUnit(unsigned int unit) override;

    // GUI texture interface
    CTexture *GetTexture() { return m_texture.get(); }

  protected:
    AVPixelFormat TranslateFormat(unsigned int textureFormat);
    TEXTURE_SCALING TranslateScalingMethod(SCALINGMETHOD scalingMethod);

    // Texture parameters
    SCALINGMETHOD m_scalingMethod;
    unsigned int m_textureFormat = XB_FMT_UNKNOWN;
    std::unique_ptr<CTexture> m_texture;
  };

}
}
