Commit cd0a4575 by Corentin Wallez Committed by Nicolas Capens

Port to OSX.

Change-Id: I31fdb6a1e403831feb6040ea756f2c144ac79a5b Reviewed-on: https://swiftshader-review.googlesource.com/4383Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent bc5a17a0
cmake_minimum_required(VERSION 2.8) cmake_minimum_required(VERSION 3.0)
project(SwiftShaders CXX) project(SwiftShader C CXX)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The type of build: Debug Release RelWithDebInfo." ) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The type of build: Debug Release RelWithDebInfo." )
...@@ -98,6 +98,7 @@ set(OPENGL_DIR ${SOURCE_DIR}/OpenGL) ...@@ -98,6 +98,7 @@ set(OPENGL_DIR ${SOURCE_DIR}/OpenGL)
set(OPENGL_COMPILER_DIR ${OPENGL_DIR}/compiler) set(OPENGL_COMPILER_DIR ${OPENGL_DIR}/compiler)
set(LLVM_DIR ${SOURCE_DIR}/LLVM) set(LLVM_DIR ${SOURCE_DIR}/LLVM)
set(TESTS_DIR ${CMAKE_SOURCE_DIR}/tests) set(TESTS_DIR ${CMAKE_SOURCE_DIR}/tests)
set(HELLO2_DIR ${TESTS_DIR}/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2)
########################################################### ###########################################################
# Compile flags # Compile flags
...@@ -170,13 +171,12 @@ endif() ...@@ -170,13 +171,12 @@ endif()
########################################################### ###########################################################
# We want the code for all of LLVM except the code for non-X86 targets # We want the code for all of LLVM except the code for non-X86 targets
file(GLOB_RECURSE LLVM_LIST ${LLVM_DIR}/lib/*.cpp) file(GLOB_RECURSE LLVM_LIST ${LLVM_DIR}/lib/*.cpp ${LLVM_DIR}/lib/*.c)
file(GLOB_RECURSE LLVM_ALL_TARGET_LIST ${LLVM_DIR}/lib/Target/*.cpp) file(GLOB_RECURSE LLVM_ALL_TARGET_LIST ${LLVM_DIR}/lib/Target/*.cpp ${LLVM_DIR}/lib/Target/*.c)
file(GLOB_RECURSE LLVM_X86_TARGET_LIST ${LLVM_DIR}/lib/Target/X86/*.cpp) file(GLOB_RECURSE LLVM_X86_TARGET_LIST ${LLVM_DIR}/lib/Target/X86/*.cpp ${LLVM_DIR}/lib/Target/X86/*.c)
list(REMOVE_ITEM LLVM_LIST ${LLVM_ALL_TARGET_LIST}) list(REMOVE_ITEM LLVM_LIST ${LLVM_ALL_TARGET_LIST})
list(APPEND LLVM_LIST ${LLVM_X86_TARGET_LIST}) list(APPEND LLVM_LIST ${LLVM_X86_TARGET_LIST})
list(REMOVE_ITEM LLVM_LIST "${LLVM_DIR}/lib/Target/X86/X86MCInstLower.cpp")
list(APPEND LLVM_LIST list(APPEND LLVM_LIST
${LLVM_DIR}/lib/Target/Mangler.cpp ${LLVM_DIR}/lib/Target/Mangler.cpp
${LLVM_DIR}/lib/Target/TargetData.cpp ${LLVM_DIR}/lib/Target/TargetData.cpp
...@@ -200,10 +200,11 @@ list(APPEND LLVM_INCLUDE_DIR ...@@ -200,10 +200,11 @@ list(APPEND LLVM_INCLUDE_DIR
${LLVM_DIR}/include ${LLVM_DIR}/include
${LLVM_DIR}/lib/Target/X86 ${LLVM_DIR}/lib/Target/X86
) )
add_library(llvm STATIC ${LLVM_LIST}) add_library(llvm SHARED ${LLVM_LIST})
set_target_properties(llvm PROPERTIES set_target_properties(llvm PROPERTIES
POSITION_INDEPENDENT_CODE 1 POSITION_INDEPENDENT_CODE 1
INCLUDE_DIRECTORIES "${LLVM_INCLUDE_DIR}" INCLUDE_DIRECTORIES "${LLVM_INCLUDE_DIR}"
COMPILE_DEFINITIONS "__STDC_CONSTANT_MACROS;__STDC_LIMIT_MACROS"
FOLDER "LLVM" FOLDER "LLVM"
) )
...@@ -218,11 +219,11 @@ set(COMMON_INCLUDE_DIR ...@@ -218,11 +219,11 @@ set(COMMON_INCLUDE_DIR
${SOURCE_DIR}/Reactor ${SOURCE_DIR}/Reactor
${SOURCE_DIR}/Renderer ${SOURCE_DIR}/Renderer
${SOURCE_DIR}/Shader ${SOURCE_DIR}/Shader
${OPENGL_DIR}/include
${LLVM_INCLUDE_DIR} ${LLVM_INCLUDE_DIR}
) )
set(OPENGL_INCLUDE_DIR set(OPENGL_INCLUDE_DIR
${OPENGL_DIR} ${OPENGL_DIR}
${OPENGL_DIR}/include
${COMMON_INCLUDE_DIR} ${COMMON_INCLUDE_DIR}
) )
...@@ -359,6 +360,10 @@ elseif(APPLE) ...@@ -359,6 +360,10 @@ elseif(APPLE)
${SOURCE_DIR}/Main/FrameBufferOSX.mm ${SOURCE_DIR}/Main/FrameBufferOSX.mm
${SOURCE_DIR}/Main/FrameBufferOSX.hpp ${SOURCE_DIR}/Main/FrameBufferOSX.hpp
) )
list(APPEND EGL_LIST
${OPENGL_DIR}/libEGL/OSXUtils.mm
${OPENGL_DIR}/libEGL/OSXUtils.hpp
)
list(APPEND OPENGL_COMPILER_LIST list(APPEND OPENGL_COMPILER_LIST
${OPENGL_COMPILER_DIR}/ossource_posix.cpp ${OPENGL_COMPILER_DIR}/ossource_posix.cpp
) )
...@@ -368,6 +373,10 @@ if(WIN32) ...@@ -368,6 +373,10 @@ if(WIN32)
set(OS_LIBS odbc32 odbccp32 WS2_32 dxguid) set(OS_LIBS odbc32 odbccp32 WS2_32 dxguid)
elseif(LINUX) elseif(LINUX)
set(OS_LIBS dl X11 Xext pthread) set(OS_LIBS dl X11 Xext pthread)
elseif(APPLE)
find_library(COCOA_FRAMEWORK Cocoa)
find_library(QUARTZ_FRAMEWORK Quartz)
set(OS_LIBS "${COCOA_FRAMEWORK}" "${QUARTZ_FRAMEWORK}")
endif() endif()
########################################################### ###########################################################
...@@ -458,7 +467,21 @@ endif() ...@@ -458,7 +467,21 @@ endif()
# Extra programs # Extra programs
########################################################### ###########################################################
if (LINUX) if(LINUX)
add_executable(OGLES2HelloAPI tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/OGLES2HelloAPI_LinuxX11.cpp) add_executable(OGLES2HelloAPI HELLO2_DIR/OGLES2HelloAPI_LinuxX11.cpp)
target_link_libraries(OGLES2HelloAPI dl X11 EGL GLESv2) target_link_libraries(OGLES2HelloAPI dl X11 EGL GLESv2)
elseif(APPLE)
add_executable(OGLES2HelloAPI MACOSX_BUNDLE
${HELLO2_DIR}/OGLES2HelloAPI_OSX.mm
${HELLO2_DIR}/Build/OSX/en.lproj/MainMenu.xib
)
set_target_properties(OGLES2HelloAPI PROPERTIES
INCLUDE_DIRECTORIES "${OPENGL_DIR}/include"
COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES"
MACOSX_BUNDLE_INFO_PLIST "${HELLO2_DIR}/Build/OSX/Info.plist"
)
target_link_libraries(OGLES2HelloAPI libEGL libGLESv2 ${OS_LIBS})
set_source_files_properties(${HELLO2_DIR}/Build/OSX/en.lproj/MainMenu.xib PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources"
)
endif() endif()
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
#include "Main/FrameBuffer.hpp" #include "Main/FrameBuffer.hpp"
#import <Cocoa/Cocoa.h>
@class CALayer; @class CALayer;
namespace sw namespace sw
...@@ -10,15 +12,23 @@ namespace sw ...@@ -10,15 +12,23 @@ namespace sw
class FrameBufferOSX : public FrameBuffer class FrameBufferOSX : public FrameBuffer
{ {
public: public:
FrameBufferOSX(CALayer *window, int width, int height) : FrameBuffer(width, height, false, false) {}; FrameBufferOSX(CALayer *layer, int width, int height);
~FrameBufferOSX() override;
~FrameBufferOSX() override {};
void flip(void *source, Format sourceFormat, size_t sourceStride) override; void flip(void *source, Format sourceFormat, size_t sourceStride) override;
void blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride) override {}; void blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride) override;
void *lock() override;
void unlock() override;
void *lock() override {return nullptr;}; private:
void unlock() override {}; int width;
int height;
CALayer *layer;
uint8_t *buffer;
CGDataProviderRef provider;
CGColorSpaceRef colorspace;
CGImageRef currentImage;
}; };
} }
......
#include "FrameBufferOSX.hpp" #include "FrameBufferOSX.hpp"
namespace sw #include "Common/Debug.hpp"
{
#include <EGL/egl.h>
#import <QuartzCore/QuartzCore.h>
namespace sw {
FrameBufferOSX::FrameBufferOSX(CALayer* layer, int width, int height)
: FrameBuffer(width, height, false, false), width(width), height(height),
layer(layer), buffer(nullptr), provider(nullptr), currentImage(nullptr)
{
destFormat = sw::FORMAT_X8B8G8R8;
int bufferSize = width * height * 4 * sizeof(uint8_t);
buffer = new uint8_t[bufferSize];
provider = CGDataProviderCreateWithData(nullptr, buffer, bufferSize, nullptr);
colorspace = CGColorSpaceCreateDeviceRGB();
}
FrameBufferOSX::~FrameBufferOSX()
{
//[CATransaction begin];
//[layer setContents:nullptr];
//[CATransaction commit];
CGImageRelease(currentImage);
CGColorSpaceRelease(colorspace);
CGDataProviderRelease(provider);
delete[] buffer;
}
void FrameBufferOSX::flip(void *source, Format sourceFormat, size_t sourceStride) void FrameBufferOSX::flip(void *source, Format sourceFormat, size_t sourceStride)
{ {
blit(source, 0, 0, sourceFormat, sourceStride); blit(source, nullptr, nullptr, sourceFormat, sourceStride);
} }
void FrameBufferOSX::blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride)
{
copy(source, sourceFormat, sourceStride);
int bytesPerRow = width * 4 * sizeof(uint8_t);
CGImageRef image = CGImageCreate(width, height, 8, 32, bytesPerRow, colorspace, kCGBitmapByteOrder32Big, provider, nullptr, false, kCGRenderingIntentDefault);
[CATransaction begin];
[layer setContents:(id)image];
[CATransaction commit];
[CATransaction flush];
if(currentImage)
{
CGImageRelease(currentImage);
}
currentImage = image;
}
void *FrameBufferOSX::lock()
{
stride = width * 4 * sizeof(uint8_t);
locked = buffer;
return locked;
};
void FrameBufferOSX::unlock()
{
locked = nullptr;
};
} }
sw::FrameBuffer *createFrameBuffer(void *display, CALayer *layer, int width, int height) sw::FrameBuffer *createFrameBuffer(void *display, EGLNativeWindowType nativeWindow, int width, int height)
{ {
NSObject *window = reinterpret_cast<NSObject*>(nativeWindow);
CALayer *layer = nullptr;
if([window isKindOfClass:[NSView class]])
{
NSView *view = reinterpret_cast<NSView*>(window);
[view setWantsLayer:YES];
layer = [view layer];
}
else if([window isKindOfClass:[CALayer class]])
{
layer = reinterpret_cast<CALayer*>(window);
}
else ASSERT(0);
return new sw::FrameBufferOSX(layer, width, height); return new sw::FrameBufferOSX(layer, width, height);
} }
...@@ -32,6 +32,10 @@ ...@@ -32,6 +32,10 @@
#include <fcntl.h> #include <fcntl.h>
#endif #endif
#if defined(__APPLE__)
#include "OSXUtils.hpp"
#endif
#include <algorithm> #include <algorithm>
#include <vector> #include <vector>
#include <map> #include <map>
...@@ -553,7 +557,7 @@ bool Display::isValidWindow(EGLNativeWindowType window) ...@@ -553,7 +557,7 @@ bool Display::isValidWindow(EGLNativeWindowType window)
return status == True; return status == True;
} }
#elif defined(__APPLE__) #elif defined(__APPLE__)
return true; return sw::OSX::IsValidWindow(window);
#else #else
#error "Display::isValidWindow unimplemented for this platform" #error "Display::isValidWindow unimplemented for this platform"
#endif #endif
...@@ -688,7 +692,7 @@ sw::Format Display::getDisplayFormat() const ...@@ -688,7 +692,7 @@ sw::Format Display::getDisplayFormat() const
} }
else UNREACHABLE(platform); else UNREACHABLE(platform);
#elif defined(__APPLE__) #elif defined(__APPLE__)
return sw::FORMAT_X8R8G8B8; return sw::FORMAT_A8B8G8R8;
#else #else
#error "Display::isValidWindow unimplemented for this platform" #error "Display::isValidWindow unimplemented for this platform"
#endif #endif
......
#ifndef sw_OSXUtils_hpp
#define sw_OSXUtils_hpp
#include <EGL/egl.h>
namespace sw
{
namespace OSX
{
bool IsValidWindow(EGLNativeWindowType window);
void GetNativeWindowSize(EGLNativeWindowType window, int &width, int &height);
}
}
#endif // sw_OSXUtils_hpp
#include "OSXUtils.hpp"
#include "common/debug.h"
#import <Cocoa/Cocoa.h>
namespace sw
{
namespace OSX
{
bool IsValidWindow(EGLNativeWindowType window)
{
NSObject *object = reinterpret_cast<NSObject*>(window);
return window && ([object isKindOfClass:[NSView class]] || [object isKindOfClass:[CALayer class]]);
}
void GetNativeWindowSize(EGLNativeWindowType window, int &width, int &height)
{
NSObject *object = reinterpret_cast<NSObject*>(window);
if([object isKindOfClass:[NSView class]])
{
NSView *view = reinterpret_cast<NSView*>(object);
width = [view bounds].size.width;
height = [view bounds].size.height;
}
else if([object isKindOfClass:[CALayer class]])
{
CALayer *layer = reinterpret_cast<CALayer*>(object);
width = CGRectGetWidth([layer frame]);
height = CGRectGetHeight([layer frame]);
}
else UNREACHABLE(0);
}
}
}
...@@ -31,6 +31,10 @@ ...@@ -31,6 +31,10 @@
#include <tchar.h> #include <tchar.h>
#endif #endif
#if defined(__APPLE__)
#include "OSXUtils.hpp"
#endif
#include <algorithm> #include <algorithm>
namespace egl namespace egl
...@@ -250,7 +254,11 @@ bool WindowSurface::initialize() ...@@ -250,7 +254,11 @@ bool WindowSurface::initialize()
return reset(windowAttributes.width, windowAttributes.height); return reset(windowAttributes.width, windowAttributes.height);
#elif defined(__APPLE__) #elif defined(__APPLE__)
return true; int width;
int height;
sw::OSX::GetNativeWindowSize(window, width, height);
return reset(width, height);
#else #else
#error "WindowSurface::initialize unimplemented for this platform" #error "WindowSurface::initialize unimplemented for this platform"
#endif #endif
...@@ -295,8 +303,9 @@ bool WindowSurface::checkForResize() ...@@ -295,8 +303,9 @@ bool WindowSurface::checkForResize()
int clientWidth = windowAttributes.width; int clientWidth = windowAttributes.width;
int clientHeight = windowAttributes.height; int clientHeight = windowAttributes.height;
#elif defined(__APPLE__) #elif defined(__APPLE__)
int clientWidth = 0; int clientWidth;
int clientHeight = 0; int clientHeight;
sw::OSX::GetNativeWindowSize(window, clientWidth, clientHeight);
return true; return true;
#else #else
#error "WindowSurface::checkForResize unimplemented for this platform" #error "WindowSurface::checkForResize unimplemented for this platform"
......
...@@ -82,17 +82,31 @@ private: ...@@ -82,17 +82,31 @@ private:
if(!libEGL) if(!libEGL)
{ {
#if defined(_WIN32) #if defined(_WIN32)
const char *libEGL_lib[] = {"libEGL.dll", "libEGL_translator.dll"}; #if defined(__LP64__)
const char *libEGL_lib[] = {"libEGL.dll", "lib64EGL_translator.dll"};
#else
const char *libEGL_lib[] = {"libEGL.dll", "libEGL_translator.dll"};
#endif
#elif defined(__ANDROID__) #elif defined(__ANDROID__)
#if defined(__LP64__) #if defined(__LP64__)
const char *libEGL_lib[] = {"/vendor/lib64/egl/libEGL_swiftshader.so"}; const char *libEGL_lib[] = {"/vendor/lib64/egl/libEGL_swiftshader.so"};
#else
const char *libEGL_lib[] = {"/vendor/lib/egl/libEGL_swiftshader.so"};
#endif
#elif defined(__linux__)
#if defined(__LP64__)
const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};
#else
const char *libEGL_lib[] = {"libEGL_translator.so", "libEGL.so.1", "libEGL.so"};
#endif
#elif defined(__APPLE__)
#if defined(__LP64__)
const char *libEGL_lib[] = {"lib64EGL_translator.dylib", "libEGL.so", "libEGL.dylib"};
#else
const char *libEGL_lib[] = {"libEGL_translator.dylib", "libEGL.so", "libEGL.dylib"};
#endif
#else #else
const char *libEGL_lib[] = {"/vendor/lib/egl/libEGL_swiftshader.so"}; #error "libEGL::loadExports unimplemented for this platform"
#endif
#elif defined(__LP64__)
const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};
#else
const char *libEGL_lib[] = {"libEGL_translator.so", "libEGL.so.1", "libEGL.so"};
#endif #endif
libEGL = loadLibrary(libEGL_lib, "libEGL_swiftshader"); libEGL = loadLibrary(libEGL_lib, "libEGL_swiftshader");
......
...@@ -241,17 +241,31 @@ private: ...@@ -241,17 +241,31 @@ private:
if(!libGLES_CM) if(!libGLES_CM)
{ {
#if defined(_WIN32) #if defined(_WIN32)
const char *libGLES_CM_lib[] = {"libGLES_CM.dll", "libGLES_CM_translator.dll"}; #if defined(__LP64__)
const char *libGLES_CM_lib[] = {"libGLES_CM.dll", "libGLES_CM_translator.dll"};
#else
const char *libGLES_CM_lib[] = {"libGLES_CM.dll", "lib64GLES_CM_translator.dll"};
#endif
#elif defined(__ANDROID__) #elif defined(__ANDROID__)
#if defined(__LP64__) #if defined(__LP64__)
const char *libGLES_CM_lib[] = {"/vendor/lib64/egl/libGLESv1_CM_swiftshader.so"}; const char *libGLES_CM_lib[] = {"/vendor/lib64/egl/libGLESv1_CM_swiftshader.so"};
#else
const char *libGLES_CM_lib[] = {"/vendor/lib/egl/libGLESv1_CM_swiftshader.so"};
#endif
#elif defined(__linux__)
#if defined(__LP64__)
const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
#else
const char *libGLES_CM_lib[] = {"libGLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
#endif
#elif defined(__APPLE__)
#if defined(__LP64__)
const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.dylib", "libGLES_CM.dylib"};
#else
const char *libGLES_CM_lib[] = {"libGLES_CM_translator.dylib", "libGLES_CM.dylib"};
#endif
#else #else
const char *libGLES_CM_lib[] = {"/vendor/lib/egl/libGLESv1_CM_swiftshader.so"}; #error "libGLES_CM::loadExports unimplemented for this platform"
#endif
#elif defined(__LP64__)
const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
#else
const char *libGLES_CM_lib[] = {"libGLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
#endif #endif
libGLES_CM = loadLibrary(libGLES_CM_lib, "libGLES_CM_swiftshader"); libGLES_CM = loadLibrary(libGLES_CM_lib, "libGLES_CM_swiftshader");
......
...@@ -209,20 +209,20 @@ public: ...@@ -209,20 +209,20 @@ public:
void (*glFramebufferTexture3DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); void (*glFramebufferTexture3DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
void (*glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image); void (*glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image);
void (*glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image); void (*glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image);
GLboolean (*glIsRenderbufferOES)(GLuint renderbuffer); GLboolean (*glIsRenderbufferOES)(GLuint renderbuffer);
void (*glBindRenderbufferOES)(GLenum target, GLuint renderbuffer); void (*glBindRenderbufferOES)(GLenum target, GLuint renderbuffer);
void (*glDeleteRenderbuffersOES)(GLsizei n, const GLuint* renderbuffers); void (*glDeleteRenderbuffersOES)(GLsizei n, const GLuint* renderbuffers);
void (*glGenRenderbuffersOES)(GLsizei n, GLuint* renderbuffers); void (*glGenRenderbuffersOES)(GLsizei n, GLuint* renderbuffers);
void (*glRenderbufferStorageOES)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); void (*glRenderbufferStorageOES)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
void (*glGetRenderbufferParameterivOES)(GLenum target, GLenum pname, GLint* params); void (*glGetRenderbufferParameterivOES)(GLenum target, GLenum pname, GLint* params);
GLboolean (*glIsFramebufferOES)(GLuint framebuffer); GLboolean (*glIsFramebufferOES)(GLuint framebuffer);
void (*glBindFramebufferOES)(GLenum target, GLuint framebuffer); void (*glBindFramebufferOES)(GLenum target, GLuint framebuffer);
void (*glDeleteFramebuffersOES)(GLsizei n, const GLuint* framebuffers); void (*glDeleteFramebuffersOES)(GLsizei n, const GLuint* framebuffers);
void (*glGenFramebuffersOES)(GLsizei n, GLuint* framebuffers); void (*glGenFramebuffersOES)(GLsizei n, GLuint* framebuffers);
GLenum (*glCheckFramebufferStatusOES)(GLenum target); GLenum (*glCheckFramebufferStatusOES)(GLenum target);
void (*glFramebufferRenderbufferOES)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); void (*glFramebufferRenderbufferOES)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
void (*glFramebufferTexture2DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); void (*glFramebufferTexture2DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
void (*glGetFramebufferAttachmentParameterivOES)(GLenum target, GLenum attachment, GLenum pname, GLint* params); void (*glGetFramebufferAttachmentParameterivOES)(GLenum target, GLenum attachment, GLenum pname, GLint* params);
void (*glGenerateMipmapOES)(GLenum target); void (*glGenerateMipmapOES)(GLenum target);
egl::Context *(*es2CreateContext)(const egl::Config *config, const egl::Context *shareContext, int clientVersion); egl::Context *(*es2CreateContext)(const egl::Config *config, const egl::Context *shareContext, int clientVersion);
...@@ -262,17 +262,31 @@ private: ...@@ -262,17 +262,31 @@ private:
if(!libGLESv2) if(!libGLESv2)
{ {
#if defined(_WIN32) #if defined(_WIN32)
const char *libGLESv2_lib[] = {"libGLESv2.dll", "libGLES_V2_translator.dll"}; #if defined(__LP64__)
const char *libGLESv2_lib[] = {"libGLESv2.dll", "lib64GLES_V2_translator.dll"};
#else
const char *libGLESv2_lib[] = {"libGLESv2.dll", "libGLES_V2_translator.dll"};
#endif
#elif defined(__ANDROID__) #elif defined(__ANDROID__)
#if defined(__LP64__) #if defined(__LP64__)
const char *libGLESv2_lib[] = {"/vendor/lib64/egl/libGLESv2_swiftshader.so"}; const char *libGLESv2_lib[] = {"/vendor/lib64/egl/libGLESv2_swiftshader.so"};
#else
const char *libGLESv2_lib[] = {"/vendor/lib/egl/libGLESv2_swiftshader.so"};
#endif
#elif defined(__linux__)
#if 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
#elif defined(__APPLE__)
#if defined(__LP64__)
const char *libGLESv2_lib[] = {"lib64GLES_V2_translator.dylib", "libGLESv2.dylib"};
#else
const char *libGLESv2_lib[] = {"libGLES_V2_translator.dylib", "libGLESv2.dylib"};
#endif
#else #else
const char *libGLESv2_lib[] = {"/vendor/lib/egl/libGLESv2_swiftshader.so"}; #error "libGLESv2::loadExports unimplemented for this platform"
#endif
#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 #endif
libGLESv2 = loadLibrary(libGLESv2_lib, "libGLESv2_swiftshader"); libGLESv2 = loadLibrary(libGLESv2_lib, "libGLESv2_swiftshader");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment