Kanzi 4.1.0
kanzi::platform::EglGraphicsContext Class Reference

EGL implementation of GlGraphicsContext. More...

#include <kanzi/platform/platform/gl/graphics_context/egl/egl_graphics_context.hpp>

Inheritance diagram for kanzi::platform::EglGraphicsContext:
[legend]

Classes

struct  ContextData
 Context-specific data. More...
 
struct  EglExtensionFlags
 Represents support for EGL extensions. More...
 
struct  EglInfo
 EGL information. More...
 
struct  SurfaceData
 Surface-specific data. More...
 
struct  ThreadData
 Thread-specific data. More...
 

Public Member Functions

SurfaceHandle createSurface (NativeSurfaceHandle windowHandle, const SurfaceProperties &properties) override
 GlGraphicsContext::createSurface() implementation.
 
ThreadContextHandle createThreadContext () override
 GlGraphicsContext::createThreadContext() implementation.
 
bool destroySurface (SurfaceHandle surface) override
 GlGraphicsContext::destroySurface() implementation.
 
void destroyThreadContext (ThreadContextHandle context) override
 GlGraphicsContext::destroyThreadContext() implementation.
 
 EglGraphicsContext (PlatformContext &platformContext, InitializationInfo &&info)
 Constructor.
 
KZ_NO_DISCARD ApiBackendBasicInfo getApiBackendBasicInfo () const noexcept
 Provides basic information about current API backend.
 
SurfaceContextHandle getCurrentSurfaceContext () override
 GlGraphicsContext::getCurrentSurfaceContext() implementation.
 
voidgetGLProcAddress (const char *pName) override
 GlGraphicsContext::getGLProcAddress() implementation.
 
SurfaceContextHandle getSurfaceGLContext (SurfaceHandle surface) override
 GlGraphicsContext::getSurfaceGLContext() implementation.
 
SurfaceProperties getSurfaceProperties (SurfaceHandle surface) override
 GlGraphicsContext::getSurfaceProperties() implementation.
 
vector< SurfaceHandlegetSurfaces (SurfaceContextHandle context) override
 GlGraphicsContext::getSurfaces() implementation.
 
bool initialize () override
 GlGraphicsContext::initialize() implementation.
 
bool isFeatureEnabled (PlatformFeatureId feature) const override
 GlGraphicsContext::isFeatureEnabled() implementation.
 
void makeSurfaceCurrent (SurfaceHandle surface) override
 GlGraphicsContext::makeSurfaceCurrent() implementation.
 
void makeThreadCurrent (ThreadContextHandle context) override
 GlGraphicsContext::makeThreadCurrent() implementation.
 
void shutdown () override
 GlGraphicsContext::shutdown() implementation.
 
bool swapBuffers (SurfaceHandle surface) override
 GlGraphicsContext::swapBuffers() implementation.
 
virtual ~EglGraphicsContext ()=default
 Destructor.
 
- Public Member Functions inherited from kanzi::platform::GlGraphicsContext
template<typename Return , typename... Args>
bool getGLProcAddressInto (function_ptr< Return, Args... > &proc, const char *pName)
 Dynamically loads a GL function pointer into specified location.
 
virtual ~GlGraphicsContext ()=default
 Destructor.
 

Protected Types

using ContextContainer
 
using ContextNodePtr
 
using SurfaceContainer
 
using SurfaceNodePtr
 
using ThreadContainer
 
using ThreadNodePtr
 

Protected Member Functions

KZ_NO_DISCARD PresentMode clampToSupportedPresentMode (PresentMode mode) noexcept
 Clamps provided PresentMode to a supported subset.
 
virtual KZ_NO_DISCARD unique_ptr< AbstractWindowSurfacecreateDummySurface (EGLPBufferSurface &&pbuffer) noexcept
 Creates the dummy surface wrapper used for surfaceless context fallback.
 
virtual KZ_NO_DISCARD ContextNodePtr createEGLContext (const EGLConfig &config, ::EGLContext parentContext) noexcept
 Creates a new suitable context for provided config.
 
virtual KZ_NO_DISCARD unique_ptr< AbstractWindowSurfacecreateWindowSurface (NativeSurfaceHandle windowHandle, const EGLConfig &config, SurfaceColorSpace colorSpace) noexcept
 Factory function to create window surface.
 
virtual bool destroySurfaceInternal (SurfaceNodePtr surfaceNode) noexcept
 Destroys EGL surface.
 
KZ_NO_DISCARD ContextNodePtr ensureEGLContext (const EGLConfig &config, ::EGLContext parentContext) noexcept
 Finds suitable context for provided config or creates a new one.
 
virtual KZ_NO_DISCARD ::EGLNativeDisplayType fetchNativeDisplay (PlatformContext &platformContext)
 Gets a native EGL display.
 
KZ_NO_DISCARD ContextNodePtr findLastUsedContext (thread::id threadId) noexcept
 Finds last context that was used on a specified thread.
 
KZ_NO_DISCARD const EGLDisplaygetDisplay () const noexcept
 Gets EGL display.
 
KZ_NO_DISCARD const GLFunctionPointersgetGlFunctionPointers () const noexcept
 Gets GL function pointers struct.
 
virtual KZ_NO_DISCARD flat_set< string_view > getUndiscoverableEglExtensions () noexcept
 Gets extensions that platform does not report support for, but are nevertheless supported.
 
virtual KZ_NO_DISCARD GLFunctionPointers loadGlFunctions () noexcept
 Loads required GL function pointers.
 
virtual bool makeCurrentInternal (ContextNodePtr contextNode, SurfaceNodePtr surfaceNode) noexcept
 Makes provided context and surface current on this thread.
 
KZ_NO_DISCARD flat_set< string_view > queryEglExtensions () const noexcept
 Queries supported EGL extensions.
 
KZ_NO_DISCARD flat_set< string_view > queryGlExtensions () const noexcept
 Queries supported GL extensions.
 
virtual KZ_NO_DISCARD EGLConfig selectEGLConfig (const SurfaceProperties &properties) noexcept
 Selects EGL config based on provided surface properties.
 
KZ_NO_DISCARD SurfaceColorSpace selectSuitableColorSpace (const SurfaceProperties &properties) noexcept
 Selects suitable colorspace for specified surface properties.
 
void setSwapInterval (SurfaceNodePtr surfaceNode, ContextNodePtr contextNode, ContextNodePtr lastUsedContextNode, PresentMode presentMode) noexcept
 Sets swap interval for a specified surface, while preserving current EGL context and surface.
 
virtual bool setSwapIntervalForCurrentSurface (PresentMode mode) noexcept
 Sets swap interval for current surface based on present mode.
 
KZ_NO_DISCARD vector< EGLintsurfaceColorSpaceToAttributes (SurfaceColorSpace colorSpace) noexcept
 Constructs EGL attributes for a specified SurfaceColorSpace.
 

Detailed Description

EGL implementation of GlGraphicsContext.

Since
Kanzi 4.0.0
Kanzi 4.1.0 renamed from EglContextApi.
Attention
This feature is experimental and is likely to change in future releases.

Member Typedef Documentation

◆ ThreadContainer

◆ ContextContainer

◆ SurfaceContainer

◆ ThreadNodePtr

◆ ContextNodePtr

◆ SurfaceNodePtr

Constructor & Destructor Documentation

◆ EglGraphicsContext()

kanzi::platform::EglGraphicsContext::EglGraphicsContext ( PlatformContext & platformContext,
InitializationInfo && info )
explicit

Constructor.

Parameters
platformPlatform to use.
infoInitialization info struct.

◆ ~EglGraphicsContext()

virtual kanzi::platform::EglGraphicsContext::~EglGraphicsContext ( )
virtualdefault

Destructor.

Member Function Documentation

◆ initialize()

bool kanzi::platform::EglGraphicsContext::initialize ( )
overridevirtual

◆ shutdown()

void kanzi::platform::EglGraphicsContext::shutdown ( )
overridevirtual

◆ swapBuffers()

bool kanzi::platform::EglGraphicsContext::swapBuffers ( SurfaceHandle surface)
overridevirtual

◆ createThreadContext()

ThreadContextHandle kanzi::platform::EglGraphicsContext::createThreadContext ( )
overridevirtual

◆ destroyThreadContext()

void kanzi::platform::EglGraphicsContext::destroyThreadContext ( ThreadContextHandle context)
overridevirtual

◆ createSurface()

SurfaceHandle kanzi::platform::EglGraphicsContext::createSurface ( NativeSurfaceHandle windowHandle,
const SurfaceProperties & properties )
overridevirtual

◆ destroySurface()

bool kanzi::platform::EglGraphicsContext::destroySurface ( SurfaceHandle surface)
overridevirtual

◆ getSurfaceProperties()

SurfaceProperties kanzi::platform::EglGraphicsContext::getSurfaceProperties ( SurfaceHandle surface)
overridevirtual

◆ getSurfaceGLContext()

SurfaceContextHandle kanzi::platform::EglGraphicsContext::getSurfaceGLContext ( SurfaceHandle surface)
overridevirtual

◆ makeSurfaceCurrent()

void kanzi::platform::EglGraphicsContext::makeSurfaceCurrent ( SurfaceHandle surface)
overridevirtual

◆ getCurrentSurfaceContext()

SurfaceContextHandle kanzi::platform::EglGraphicsContext::getCurrentSurfaceContext ( )
overridevirtual

◆ getSurfaces()

vector< SurfaceHandle > kanzi::platform::EglGraphicsContext::getSurfaces ( SurfaceContextHandle context)
overridevirtual

◆ getGLProcAddress()

void * kanzi::platform::EglGraphicsContext::getGLProcAddress ( const char * pName)
overridevirtual

◆ makeThreadCurrent()

void kanzi::platform::EglGraphicsContext::makeThreadCurrent ( ThreadContextHandle context)
overridevirtual

◆ isFeatureEnabled()

bool kanzi::platform::EglGraphicsContext::isFeatureEnabled ( PlatformFeatureId feature) const
overridevirtual

◆ getApiBackendBasicInfo()

KZ_NO_DISCARD ApiBackendBasicInfo kanzi::platform::EglGraphicsContext::getApiBackendBasicInfo ( ) const
noexcept

Provides basic information about current API backend.

Returns
Basic information about current API backend.

◆ clampToSupportedPresentMode()

KZ_NO_DISCARD PresentMode kanzi::platform::EglGraphicsContext::clampToSupportedPresentMode ( PresentMode mode)
protectednoexcept

Clamps provided PresentMode to a supported subset.

Parameters
modePresent mode to clamp.
Returns
PresentMode from a supported subset.

◆ setSwapIntervalForCurrentSurface()

virtual bool kanzi::platform::EglGraphicsContext::setSwapIntervalForCurrentSurface ( PresentMode mode)
protectedvirtualnoexcept

Sets swap interval for current surface based on present mode.

Parameters
modePresent mode.
Returns
On success, true, otherwise false.

Reimplemented in kanzi::platform::EglEmscriptenGraphicsContext.

◆ ensureEGLContext()

KZ_NO_DISCARD ContextNodePtr kanzi::platform::EglGraphicsContext::ensureEGLContext ( const EGLConfig & config,
::EGLContext parentContext )
protectednoexcept

Finds suitable context for provided config or creates a new one.

Parameters
configEGL config.
parentContextContext to share data with.
Returns
Suitable context.

◆ createEGLContext()

virtual KZ_NO_DISCARD ContextNodePtr kanzi::platform::EglGraphicsContext::createEGLContext ( const EGLConfig & config,
::EGLContext parentContext )
protectedvirtualnoexcept

Creates a new suitable context for provided config.

Parameters
configEGL config.
parentContextContext to share data with.
Returns
Suitable context.

◆ destroySurfaceInternal()

virtual bool kanzi::platform::EglGraphicsContext::destroySurfaceInternal ( SurfaceNodePtr surfaceNode)
protectedvirtualnoexcept

Destroys EGL surface.

Parameters
surfaceNodeSurface node to destroy.
Precondition
surfaceNode is a valid node.
Returns
On success true, otherwise false.

◆ makeCurrentInternal()

virtual bool kanzi::platform::EglGraphicsContext::makeCurrentInternal ( ContextNodePtr contextNode,
SurfaceNodePtr surfaceNode )
protectedvirtualnoexcept

Makes provided context and surface current on this thread.

No effect if context and surface are already current on this thread.

Parameters
contextNodeContext node.
surfaceNodeSurface node.
Precondition
contextNode is a valid node.
Returns
On success true, otherwise false.

◆ selectSuitableColorSpace()

KZ_NO_DISCARD SurfaceColorSpace kanzi::platform::EglGraphicsContext::selectSuitableColorSpace ( const SurfaceProperties & properties)
protectednoexcept

Selects suitable colorspace for specified surface properties.

Parameters
propertiesSurface properties.
Returns
SurfaceColorSpace suitable for specified properties.

◆ findLastUsedContext()

KZ_NO_DISCARD ContextNodePtr kanzi::platform::EglGraphicsContext::findLastUsedContext ( thread::id threadId)
protectednoexcept

Finds last context that was used on a specified thread.

Parameters
threadIdThread ID.
Returns
Pointer to the context node.

◆ surfaceColorSpaceToAttributes()

KZ_NO_DISCARD vector< EGLint > kanzi::platform::EglGraphicsContext::surfaceColorSpaceToAttributes ( SurfaceColorSpace colorSpace)
protectednoexcept

Constructs EGL attributes for a specified SurfaceColorSpace.

Parameters
colorSpaceSurface color space.
Returns
EGL attributes.

◆ createWindowSurface()

virtual KZ_NO_DISCARD unique_ptr< AbstractWindowSurface > kanzi::platform::EglGraphicsContext::createWindowSurface ( NativeSurfaceHandle windowHandle,
const EGLConfig & config,
SurfaceColorSpace colorSpace )
protectedvirtualnoexcept

Factory function to create window surface.

Parameters
windowHandleOpaque platform specific window handle.
configEGL config.
colorSpaceSurface color space.
Returns
Newly created surface.

Reimplemented in kanzi::platform::EglQnxStreamsGraphicsContext.

◆ createDummySurface()

virtual KZ_NO_DISCARD unique_ptr< AbstractWindowSurface > kanzi::platform::EglGraphicsContext::createDummySurface ( EGLPBufferSurface && pbuffer)
protectedvirtualnoexcept

Creates the dummy surface wrapper used for surfaceless context fallback.

Parameters
pbufferEGL pbuffer surface.

Reimplemented in kanzi::platform::EglEmscriptenGraphicsContext, and kanzi::platform::EglQnxStreamsGraphicsContext.

◆ setSwapInterval()

void kanzi::platform::EglGraphicsContext::setSwapInterval ( SurfaceNodePtr surfaceNode,
ContextNodePtr contextNode,
ContextNodePtr lastUsedContextNode,
PresentMode presentMode )
protectednoexcept

Sets swap interval for a specified surface, while preserving current EGL context and surface.

Parameters
surfaceNodeSurface node.
contextNodeContext node.
lastUsedContextNodeLast used context node.
presentModePresentMode to use.

◆ selectEGLConfig()

virtual KZ_NO_DISCARD EGLConfig kanzi::platform::EglGraphicsContext::selectEGLConfig ( const SurfaceProperties & properties)
protectedvirtualnoexcept

Selects EGL config based on provided surface properties.

Parameters
propertiesSurface properties.
Returns
Suitable EGL config for requested surface properties.

Reimplemented in kanzi::platform::EglEmscriptenGraphicsContext, and kanzi::platform::EglQnxStreamsGraphicsContext.

◆ getUndiscoverableEglExtensions()

virtual KZ_NO_DISCARD flat_set< string_view > kanzi::platform::EglGraphicsContext::getUndiscoverableEglExtensions ( )
protectedvirtualnoexcept

Gets extensions that platform does not report support for, but are nevertheless supported.

Returns
Set of extension strings.

Reimplemented in kanzi::platform::EglEmscriptenGraphicsContext.

◆ loadGlFunctions()

virtual KZ_NO_DISCARD GLFunctionPointers kanzi::platform::EglGraphicsContext::loadGlFunctions ( )
protectedvirtualnoexcept

Loads required GL function pointers.

Returns
GL function pointers struct.

Reimplemented in kanzi::platform::EglOhosGraphicsContext.

◆ fetchNativeDisplay()

virtual KZ_NO_DISCARD ::EGLNativeDisplayType kanzi::platform::EglGraphicsContext::fetchNativeDisplay ( PlatformContext & platformContext)
protectedvirtual

Gets a native EGL display.

Parameters
platformContextPlatform context.
Returns
Native EGL display.
Since
Kanzi 4.1.0

Reimplemented in kanzi::platform::EglWaylandGraphicsContext, and kanzi::platform::EglX11GraphicsContext.

◆ queryEglExtensions()

KZ_NO_DISCARD flat_set< string_view > kanzi::platform::EglGraphicsContext::queryEglExtensions ( ) const
protectednoexcept

Queries supported EGL extensions.

Precondition
m_display is a valid display handle.
Returns
Names of supported extensions.

◆ queryGlExtensions()

KZ_NO_DISCARD flat_set< string_view > kanzi::platform::EglGraphicsContext::queryGlExtensions ( ) const
protectednoexcept

Queries supported GL extensions.

Precondition
m_glPointers.getIntegerv is a valid function pointer.
m_glPointers.getStringi is a valid function pointer.
Returns
Names of supported extensions.

◆ getDisplay()

KZ_NO_DISCARD const EGLDisplay & kanzi::platform::EglGraphicsContext::getDisplay ( ) const
protectednoexcept

Gets EGL display.

Returns
EGL display.

◆ getGlFunctionPointers()

KZ_NO_DISCARD const GLFunctionPointers & kanzi::platform::EglGraphicsContext::getGlFunctionPointers ( ) const
protectednoexcept

Gets GL function pointers struct.

Precondition
loadGlFunctions() has been called before this function.
Returns
GL function pointers struct.

The documentation for this class was generated from the following file: