Sunshine latest
Self-hosted game stream host for Moonlight.
graphics.cpp File Reference

Definitions for graphics related functions. More...

#include <fcntl.h>
#include "graphics.h"
#include "src/file_handler.h"
#include "src/logging.h"
#include "src/video.h"
#include <libavutil/pixdesc.h>
Include dependency graph for graphics.cpp:

Classes

struct  egl::plane_attr_t
 

Macros

#define DRM_FORMAT_MOD_INVALID   fourcc_mod_code(0, ((1ULL << 56) - 1))
 
#define fourcc_code(a, b, c, d)   ((std::uint32_t)(a) | ((std::uint32_t)(b) << 8) | ((std::uint32_t)(c) << 16) | ((std::uint32_t)(d) << 24))
 
#define fourcc_mod_code(vendor, val)   ((((uint64_t) vendor) << 56) | ((val) & 0x00ffffffffffffffULL))
 
#define SUNSHINE_SHADERS_DIR   SUNSHINE_ASSETS_DIR "/shaders/opengl"
 

Functions

rgb_t egl::create_blank (platf::img_t &img)
 Create a black RGB texture of the specified image size.
 
std::optional< nv12_t > egl::create_target (int width, int height, AVPixelFormat format)
 Create biplanar YUV textures to render into.
 
void gl::drain_errors (const std::string_view &prefix)
 
bool egl::fail ()
 
void free_frame (AVFrame *frame)
 
plane_attr_t egl::get_plane (std::uint32_t plane_indice)
 
std::optional< rgb_t > egl::import_source (display_t::pointer egl_display, const surface_descriptor_t &xrgb)
 
std::optional< nv12_t > egl::import_target (display_t::pointer egl_display, std::array< file_t, nv12_img_t::num_fds > &&fds, const surface_descriptor_t &y, const surface_descriptor_t &uv)
 
int gbm::init ()
 
std::optional< ctx_t > egl::make_ctx (display_t::pointer display)
 
std::vector< EGLAttrib > egl::surface_descriptor_to_egl_attribs (const surface_descriptor_t &surface)
 Get EGL attributes for eglCreateImage() to import the provided surface.
 

Variables

create_device_fn gbm::create_device
 
GladGLContext gl::ctx
 
device_destroy_fn gbm::device_destroy
 
constexpr auto egl::EGL_DMA_BUF_PLANE0_FD_EXT = 0x3272
 
constexpr auto egl::EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT = 0x3444
 
constexpr auto egl::EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT = 0x3443
 
constexpr auto egl::EGL_DMA_BUF_PLANE0_OFFSET_EXT = 0x3273
 
constexpr auto egl::EGL_DMA_BUF_PLANE0_PITCH_EXT = 0x3274
 
constexpr auto egl::EGL_DMA_BUF_PLANE1_FD_EXT = 0x3275
 
constexpr auto egl::EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT = 0x3446
 
constexpr auto egl::EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT = 0x3445
 
constexpr auto egl::EGL_DMA_BUF_PLANE1_OFFSET_EXT = 0x3276
 
constexpr auto egl::EGL_DMA_BUF_PLANE1_PITCH_EXT = 0x3277
 
constexpr auto egl::EGL_DMA_BUF_PLANE2_FD_EXT = 0x3278
 
constexpr auto egl::EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT = 0x3448
 
constexpr auto egl::EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT = 0x3447
 
constexpr auto egl::EGL_DMA_BUF_PLANE2_OFFSET_EXT = 0x3279
 
constexpr auto egl::EGL_DMA_BUF_PLANE2_PITCH_EXT = 0x327A
 
constexpr auto egl::EGL_DMA_BUF_PLANE3_FD_EXT = 0x3440
 
constexpr auto egl::EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT = 0x344A
 
constexpr auto egl::EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT = 0x3449
 
constexpr auto egl::EGL_DMA_BUF_PLANE3_OFFSET_EXT = 0x3441
 
constexpr auto egl::EGL_DMA_BUF_PLANE3_PITCH_EXT = 0x3442
 
constexpr auto egl::EGL_LINUX_DMA_BUF_EXT = 0x3270
 
constexpr auto egl::EGL_LINUX_DRM_FOURCC_EXT = 0x3271
 

Detailed Description

Definitions for graphics related functions.

Function Documentation

◆ create_blank()

rgb_t egl::create_blank ( platf::img_t & img)

Create a black RGB texture of the specified image size.

Parameters
imgThe image to use for texture sizing.
Returns
The new RGB texture.

◆ create_target()

std::optional< nv12_t > egl::create_target ( int width,
int height,
AVPixelFormat format )

Create biplanar YUV textures to render into.

Creates biplanar YUV textures to render into.

Parameters
widthWidth of the target frame.
heightHeight of the target frame.
formatFormat of the target frame.
Returns
The new RGB texture.

◆ surface_descriptor_to_egl_attribs()

std::vector< EGLAttrib > egl::surface_descriptor_to_egl_attribs ( const surface_descriptor_t & surface)

Get EGL attributes for eglCreateImage() to import the provided surface.

Parameters
surfaceThe surface descriptor.
Returns
Vector of EGL attributes.