blob: bab76d7bab3d88fc85cab0ab3ab9fec2f4a22274 [file] [log] [blame]
/*
* Copyright 2023 Rive
*/
#include "rive/pls/gl/gles3.hpp"
#include <EGL/egl.h>
PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC glDrawArraysInstancedBaseInstanceEXT = nullptr;
PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC glDrawElementsInstancedBaseInstanceEXT = nullptr;
PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC
glDrawElementsInstancedBaseVertexBaseInstanceEXT = nullptr;
PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC glFramebufferFetchBarrierQCOM = nullptr;
PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC glFramebufferTexture2DMultisampleEXT = nullptr;
PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glRenderbufferStorageMultisampleEXT = nullptr;
void LoadGLESExtensions(const GLCapabilities& extensions)
{
static GLCapabilities loadedExtensions{};
if (extensions.EXT_base_instance && !loadedExtensions.EXT_base_instance)
{
glDrawArraysInstancedBaseInstanceEXT =
(PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC)eglGetProcAddress(
"glDrawArraysInstancedBaseInstanceEXT");
glDrawElementsInstancedBaseInstanceEXT =
(PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC)eglGetProcAddress(
"glDrawElementsInstancedBaseInstanceEXT");
glDrawElementsInstancedBaseVertexBaseInstanceEXT =
(PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC)eglGetProcAddress(
"glDrawElementsInstancedBaseVertexBaseInstanceEXT");
loadedExtensions.EXT_base_instance = true;
}
if (extensions.QCOM_shader_framebuffer_fetch_noncoherent &&
!loadedExtensions.QCOM_shader_framebuffer_fetch_noncoherent)
{
glFramebufferFetchBarrierQCOM = (PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC)eglGetProcAddress(
"glFramebufferFetchBarrierQCOM");
loadedExtensions.QCOM_shader_framebuffer_fetch_noncoherent = true;
}
if (extensions.EXT_multisampled_render_to_texture &&
!loadedExtensions.EXT_multisampled_render_to_texture)
{
glFramebufferTexture2DMultisampleEXT =
(PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC)eglGetProcAddress(
"glFramebufferTexture2DMultisampleEXT");
glRenderbufferStorageMultisampleEXT =
(PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)eglGetProcAddress(
"glRenderbufferStorageMultisampleEXT");
loadedExtensions.EXT_multisampled_render_to_texture = true;
}
}