| /* | |
| * 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; | |
| } | |
| } |