blob: 00a19264bde53a887b8b9cd357953cc15fb5ff87 [file] [log] [blame]
#ifndef libGLESv2_hpp
#define libGLESv2_hpp
#define GL_API
#include <GLES/gl.h>
#define GL_GLEXT_PROTOTYPES
#include <GLES/glext.h>
#define EGLAPI
#include <EGL/egl.h>
#include "Common/SharedLibrary.hpp"
namespace sw
{
class FrameBuffer;
enum Format : unsigned char;
}
namespace egl
{
class Context;
class Image;
class Config;
}
class LibGLESv2exports
{
public:
LibGLESv2exports();
egl::Context *(*es2CreateContext)(const egl::Config *config, const egl::Context *shareContext, int clientVersion);
__eglMustCastToProperFunctionPointerType (*es2GetProcAddress)(const char *procname);
egl::Image *(*createBackBuffer)(int width, int height, const egl::Config *config);
egl::Image *(*createDepthStencil)(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard);
sw::FrameBuffer *(*createFrameBuffer)(EGLNativeDisplayType display, EGLNativeWindowType window, int width, int height);
};
class LibGLESv2
{
public:
LibGLESv2()
{
libGLESv2 = nullptr;
libGLESv2exports = nullptr;
}
~LibGLESv2()
{
freeLibrary(libGLESv2);
}
operator bool()
{
return loadExports();
}
LibGLESv2exports *operator->()
{
return loadExports();
}
private:
LibGLESv2exports *loadExports()
{
if(!libGLESv2)
{
#if defined(_WIN32)
const char *libGLESv2_lib[] = {"libGLESv2.dll", "libGLES_V2_translator.dll"};
#elif defined(__ANDROID__)
const char *libGLESv2_lib[] = {"/vendor/lib/egl/libGLESv2_swiftshader.so"};
#elif defined(__LP64__)
const char *libGLESv2_lib[] = {"lib64GLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};
#else
const char *libGLESv2_lib[] = {"libGLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};
#endif
libGLESv2 = loadLibrary(libGLESv2_lib, "libGLESv2_swiftshader");
if(libGLESv2)
{
auto libGLESv2_swiftshader = (LibGLESv2exports *(*)())getProcAddress(libGLESv2, "libGLESv2_swiftshader");
libGLESv2exports = libGLESv2_swiftshader();
}
}
return libGLESv2exports;
}
void *libGLESv2;
LibGLESv2exports *libGLESv2exports;
};
#endif // libGLESv2_hpp