Added OGLES2 support for FB device. Thanks to @glemercier for patch.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@4777 dfc29bdd-3216-0410-991c-e03cc46cb475
master
nadro 2014-04-17 18:22:01 +00:00
parent 3e104521a0
commit 1319f4a7d6
6 changed files with 65 additions and 28 deletions

View File

@ -79,35 +79,39 @@ struct SExposedVideoData
void* X11Context;
unsigned long X11Window;
} OpenGLLinux;
struct
struct
{
//! The NSOpenGLContext object.
void* Context;
//! The NSWindow object.
//! The EGLNativeWindowType object.
void* Window;
} OpenGLFB;
struct
{
//! The NSOpenGLContext object.
void* Context;
//! The NSWindow object.
void* Window;
} OpenGLOSX;
struct
struct
{
//! The UIApplicationDelegate object.
void* AppDelegate;
//! The EAGLContext object.
void* Context;
//! The subview UIView object where the drawing happens.
void* View;
void* View;
} OGLESIPhone;
struct
{
//! The ANativeWindow object.
void* Window;
} OGLESAndroid;
struct
{
//! The ANativeWindow object.
void* Window;
} OGLESAndroid;
};
};

View File

@ -48,7 +48,10 @@ bool CEGLManager::initialize(const SIrrlichtCreationParameters& params, const SE
EglDisplay = eglGetDisplay((NativeDisplayType)Data.OpenGLLinux.X11Display);
#elif defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
EglWindow = (ANativeWindow*)Data.OGLESAndroid.Window;
EglDisplay = eglGetDisplay((NativeDisplayType) EGL_DEFAULT_DISPLAY);
EglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
#elif defined(_IRR_COMPILE_WITH_FB_DEVICE_)
EglWindow = (NativeWindowType)Data.OpenGLFB.Window;
EglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
#endif
// We must check if EGL display is valid.

View File

@ -9,7 +9,7 @@
#ifdef _IRR_COMPILE_WITH_EGL_MANAGER_
#if defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#if defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(_IRR_COMPILE_WITH_FB_DEVICE_)
#include <EGL/egl.h>
#else
#include <GLES/egl.h>

View File

@ -27,9 +27,19 @@
#include "COSOperator.h"
#include "CColorConverter.h"
#include "SIrrCreationParameters.h"
#include "CEGLManager.h"
#include <linux/input.h>
namespace irr
{
namespace video
{
IVideoDriver* createOGLES2Driver(const SIrrlichtCreationParameters& params,
io::IFileSystem* io, video::IContextManager* contextManager);
}
}
namespace irr
{
@ -206,6 +216,25 @@ void CIrrDeviceFB::createDriver()
#endif
break;
case video::EDT_OGLES2:
#ifdef _IRR_COMPILE_WITH_OGLES2_
{
video::SExposedVideoData data;
s32 width = 0;
s32 height = 0;
NativeDisplayType display = fbGetDisplay(0);
fbGetDisplayGeometry(display, &width, &height);
data.OpenGLFB.Window = (void*)fbCreateWindow(display, 0, 0, width, height);
ContextManager = new video::CEGLManager();
ContextManager->initialize(CreationParams, data);
VideoDriver = video::createOGLES2Driver(CreationParams, FileSystem, ContextManager);
}
#else
os::Printer::log("No OpenGL-ES2 support compiled in.", ELL_ERROR);
#endif
break;
case video::EDT_OGLES1:
case video::EDT_OPENGL:
case video::EDT_DIRECT3D8:
case video::EDT_DIRECT3D9:

View File

@ -38,7 +38,7 @@ namespace video
COGLES2Driver::COGLES2Driver(const SIrrlichtCreationParameters& params,
io::IFileSystem* io
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(_IRR_COMPILE_WITH_FB_DEVICE_)
, IContextManager* contextManager
#elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_)
, CIrrDeviceIPhone* device
@ -47,7 +47,7 @@ COGLES2Driver::COGLES2Driver(const SIrrlichtCreationParameters& params,
BridgeCalls(0), CurrentRenderMode(ERM_NONE), ResetRenderStates(true),
Transformation3DChanged(true), AntiAlias(params.AntiAlias),
RenderTargetTexture(0), CurrentRendertargetSize(0, 0), ColorFormat(ECF_R8G8B8)
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(_IRR_COMPILE_WITH_FB_DEVICE_)
, ContextManager(contextManager)
#elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_)
, Device(device), ViewFramebuffer(0),
@ -60,7 +60,7 @@ COGLES2Driver::COGLES2Driver(const SIrrlichtCreationParameters& params,
core::dimension2d<u32> WindowSize(0, 0);
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(_IRR_COMPILE_WITH_FB_DEVICE_)
if (!ContextManager)
return;
@ -115,7 +115,7 @@ COGLES2Driver::~COGLES2Driver()
delete BridgeCalls;
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(_IRR_COMPILE_WITH_FB_DEVICE_)
if (ContextManager)
{
ContextManager->destroyContext();
@ -436,7 +436,7 @@ bool COGLES2Driver::endScene()
{
CNullDriver::endScene();
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(_IRR_COMPILE_WITH_FB_DEVICE_)
if (ContextManager)
ContextManager->swapBuffers();
#elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_)
@ -2902,7 +2902,7 @@ class IContextManager;
IVideoDriver* createOGLES2Driver(const SIrrlichtCreationParameters& params,
io::IFileSystem* io
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(_IRR_COMPILE_WITH_FB_DEVICE_)
, IContextManager* contextManager
#elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_)
, CIrrDeviceIPhone* device
@ -2911,7 +2911,7 @@ IVideoDriver* createOGLES2Driver(const SIrrlichtCreationParameters& params,
{
#ifdef _IRR_COMPILE_WITH_OGLES2_
return new COGLES2Driver(params, io
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(_IRR_COMPILE_WITH_FB_DEVICE_)
, contextManager
#elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_)
, device

View File

@ -30,8 +30,9 @@
#include "IMaterialRendererServices.h"
#include "EDriverFeatures.h"
#include "fast_atof.h"
#include "COGLES2ExtensionHandler.h"
#include "IContextManager.h"
#ifdef _MSC_VER
#pragma comment(lib, "libGLESv2.lib")
#endif
@ -56,7 +57,7 @@ namespace video
//! constructor
COGLES2Driver(const SIrrlichtCreationParameters& params,
io::IFileSystem* io
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#if defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(_IRR_COMPILE_WITH_FB_DEVICE_)
, IContextManager* contextManager
#elif defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_)
, CIrrDeviceIPhone* device
@ -454,7 +455,7 @@ namespace video
GLuint ViewFramebuffer;
GLuint ViewRenderbuffer;
GLuint ViewDepthRenderbuffer;
#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined(_IRR_WINDOWS_API_) || defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(_IRR_COMPILE_WITH_FB_DEVICE_)
IContextManager* ContextManager;
#endif
};