mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-28 18:45:54 -05:00
Moved x11 window creation into examples/common.
This commit is contained in:
parent
b9e9fb77cc
commit
174524dde4
5 changed files with 260 additions and 201 deletions
|
@ -7,10 +7,94 @@
|
||||||
|
|
||||||
#if BX_PLATFORM_LINUX
|
#if BX_PLATFORM_LINUX
|
||||||
|
|
||||||
|
#include "bgfxplatform.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <bx/thread.h>
|
||||||
|
#include <bx/os.h>
|
||||||
|
|
||||||
|
#undef None
|
||||||
#include "entry.h"
|
#include "entry.h"
|
||||||
|
|
||||||
|
#define DEFAULT_WIDTH 1280
|
||||||
|
#define DEFAULT_HEIGHT 720
|
||||||
|
|
||||||
|
extern int _main_(int _argc, char** _argv);
|
||||||
|
|
||||||
namespace entry
|
namespace entry
|
||||||
{
|
{
|
||||||
|
struct MainThreadEntry
|
||||||
|
{
|
||||||
|
int m_argc;
|
||||||
|
char** m_argv;
|
||||||
|
|
||||||
|
static int32_t threadFunc(void* _userData)
|
||||||
|
{
|
||||||
|
MainThreadEntry* self = (MainThreadEntry*)_userData;
|
||||||
|
return _main_(self->m_argc, self->m_argv);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Context
|
||||||
|
{
|
||||||
|
int32_t run(int _argc, char** _argv)
|
||||||
|
{
|
||||||
|
m_display = XOpenDisplay(0);
|
||||||
|
|
||||||
|
XLockDisplay(m_display);
|
||||||
|
|
||||||
|
int32_t screen = DefaultScreen(m_display);
|
||||||
|
int32_t depth = DefaultDepth(m_display, screen);
|
||||||
|
Visual* visual = DefaultVisual(m_display, screen);
|
||||||
|
Window root = RootWindow(m_display, screen);
|
||||||
|
|
||||||
|
XSetWindowAttributes windowAttrs;
|
||||||
|
windowAttrs.colormap =
|
||||||
|
XCreateColormap(m_display
|
||||||
|
, root
|
||||||
|
, visual
|
||||||
|
, AllocNone
|
||||||
|
);
|
||||||
|
windowAttrs.background_pixmap = 0;
|
||||||
|
windowAttrs.border_pixel = 0;
|
||||||
|
|
||||||
|
m_window = XCreateWindow(m_display
|
||||||
|
, root
|
||||||
|
, 0, 0
|
||||||
|
, DEFAULT_WIDTH, DEFAULT_HEIGHT, 0, depth
|
||||||
|
, InputOutput
|
||||||
|
, visual
|
||||||
|
, CWBorderPixel|CWColormap
|
||||||
|
, &windowAttrs
|
||||||
|
);
|
||||||
|
|
||||||
|
XMapRaised(m_display, m_window);
|
||||||
|
XFlush(m_display);
|
||||||
|
|
||||||
|
XUnlockDisplay(m_display);
|
||||||
|
|
||||||
|
// XResizeWindow(s_display, s_window, _width, _height);
|
||||||
|
|
||||||
|
bgfx::x11SetDisplayWindow(m_display, m_window);
|
||||||
|
|
||||||
|
MainThreadEntry mte;
|
||||||
|
mte.m_argc = _argc;
|
||||||
|
mte.m_argv = _argv;
|
||||||
|
|
||||||
|
bx::Thread thread;
|
||||||
|
thread.init(mte.threadFunc, &mte);
|
||||||
|
|
||||||
|
thread.shutdown();
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
Display* m_display;
|
||||||
|
Window m_window;
|
||||||
|
};
|
||||||
|
|
||||||
|
static Context s_ctx;
|
||||||
|
|
||||||
Event::Enum poll()
|
Event::Enum poll()
|
||||||
{
|
{
|
||||||
return Event::Nop;
|
return Event::Nop;
|
||||||
|
@ -18,11 +102,10 @@ namespace entry
|
||||||
|
|
||||||
} // namespace entry
|
} // namespace entry
|
||||||
|
|
||||||
extern int _main_(int _argc, char** _argv);
|
|
||||||
|
|
||||||
int main(int _argc, char** _argv)
|
int main(int _argc, char** _argv)
|
||||||
{
|
{
|
||||||
return _main_(_argc, _argv);
|
using namespace entry;
|
||||||
|
return s_ctx.run(_argc, _argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // BX_PLATFORM_LINUX
|
#endif // BX_PLATFORM_LINUX
|
||||||
|
|
|
@ -1,38 +1,38 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2011-2013 Branimir Karadzic. All rights reserved.
|
* Copyright 2011-2013 Branimir Karadzic. All rights reserved.
|
||||||
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <bx/bx.h>
|
#include <bx/bx.h>
|
||||||
|
|
||||||
#if BX_PLATFORM_WINDOWS
|
#if BX_PLATFORM_WINDOWS
|
||||||
|
|
||||||
#include <bgfxplatform.h>
|
#include <bgfxplatform.h>
|
||||||
#include <bx/uint32_t.h>
|
#include <bx/uint32_t.h>
|
||||||
#include <bx/thread.h>
|
#include <bx/thread.h>
|
||||||
|
|
||||||
#include "entry.h"
|
#include "entry.h"
|
||||||
#include "dbg.h"
|
#include "dbg.h"
|
||||||
|
|
||||||
#define DEFAULT_WIDTH 1280
|
#define DEFAULT_WIDTH 1280
|
||||||
#define DEFAULT_HEIGHT 720
|
#define DEFAULT_HEIGHT 720
|
||||||
|
|
||||||
extern int _main_(int _argc, char** _argv);
|
extern int _main_(int _argc, char** _argv);
|
||||||
|
|
||||||
namespace entry
|
namespace entry
|
||||||
{
|
{
|
||||||
struct MainThreadEntry
|
struct MainThreadEntry
|
||||||
{
|
{
|
||||||
int m_argc;
|
int m_argc;
|
||||||
char** m_argv;
|
char** m_argv;
|
||||||
|
|
||||||
static int32_t threadFunc(void* _userData)
|
static int32_t threadFunc(void* _userData)
|
||||||
{
|
{
|
||||||
MainThreadEntry* self = (MainThreadEntry*)_userData;
|
MainThreadEntry* self = (MainThreadEntry*)_userData;
|
||||||
return _main_(self->m_argc, self->m_argv);
|
return _main_(self->m_argc, self->m_argv);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Context
|
struct Context
|
||||||
{
|
{
|
||||||
Context()
|
Context()
|
||||||
|
@ -330,23 +330,23 @@ namespace entry
|
||||||
};
|
};
|
||||||
|
|
||||||
static Context s_ctx;
|
static Context s_ctx;
|
||||||
|
|
||||||
LRESULT CALLBACK Context::wndProc(HWND _hwnd, UINT _id, WPARAM _wparam, LPARAM _lparam)
|
LRESULT CALLBACK Context::wndProc(HWND _hwnd, UINT _id, WPARAM _wparam, LPARAM _lparam)
|
||||||
{
|
{
|
||||||
return s_ctx.process(_hwnd, _id, _wparam, _lparam);
|
return s_ctx.process(_hwnd, _id, _wparam, _lparam);
|
||||||
}
|
}
|
||||||
|
|
||||||
Event::Enum poll()
|
Event::Enum poll()
|
||||||
{
|
{
|
||||||
return Event::Nop;
|
return Event::Nop;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace entry
|
} // namespace entry
|
||||||
|
|
||||||
int main(int _argc, char** _argv)
|
int main(int _argc, char** _argv)
|
||||||
{
|
{
|
||||||
using namespace entry;
|
using namespace entry;
|
||||||
return s_ctx.main(_argc, _argv);
|
return s_ctx.main(_argc, _argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // BX_PLATFORM_WINDOWS
|
#endif // BX_PLATFORM_WINDOWS
|
||||||
|
|
|
@ -1,31 +1,39 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2011-2013 Branimir Karadzic. All rights reserved.
|
* Copyright 2011-2013 Branimir Karadzic. All rights reserved.
|
||||||
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __BGFXPLATFORM_H__
|
#ifndef __BGFXPLATFORM_H__
|
||||||
#define __BGFXPLATFORM_H__
|
#define __BGFXPLATFORM_H__
|
||||||
|
|
||||||
#include <bx/bx.h>
|
#include <bx/bx.h>
|
||||||
|
|
||||||
#if BX_PLATFORM_NACL
|
#if BX_PLATFORM_LINUX
|
||||||
# include <ppapi/c/ppb_graphics_3d.h>
|
# include <X11/Xlib.h>
|
||||||
# include <ppapi/c/ppb_instance.h>
|
|
||||||
|
namespace bgfx
|
||||||
namespace bgfx
|
{
|
||||||
{
|
void x11SetDisplayWindow(::Display* _display, ::Window _window);
|
||||||
typedef void (*PostSwapBuffersFn)(uint32_t _width, uint32_t _height);
|
} // namespace bgfx
|
||||||
void naclSetIntefraces(PP_Instance, const PPB_Instance*, const PPB_Graphics3D*, PostSwapBuffersFn);
|
|
||||||
} // namespace bgfx
|
#elif BX_PLATFORM_NACL
|
||||||
|
# include <ppapi/c/ppb_graphics_3d.h>
|
||||||
#elif BX_PLATFORM_WINDOWS
|
# include <ppapi/c/ppb_instance.h>
|
||||||
# include <windows.h>
|
|
||||||
|
namespace bgfx
|
||||||
namespace bgfx
|
{
|
||||||
{
|
typedef void (*PostSwapBuffersFn)(uint32_t _width, uint32_t _height);
|
||||||
void setHwnd(HWND _hwnd);
|
void naclSetIntefraces(::PP_Instance, const ::PPB_Instance*, const ::PPB_Graphics3D*, PostSwapBuffersFn);
|
||||||
} // namespace bgfx
|
} // namespace bgfx
|
||||||
|
|
||||||
#endif // BX_PLATFORM_
|
#elif BX_PLATFORM_WINDOWS
|
||||||
|
# include <windows.h>
|
||||||
#endif // __BGFXPLATFORM_H__
|
|
||||||
|
namespace bgfx
|
||||||
|
{
|
||||||
|
void setHwnd(::HWND _hwnd);
|
||||||
|
} // namespace bgfx
|
||||||
|
|
||||||
|
#endif // BX_PLATFORM_
|
||||||
|
|
||||||
|
#endif // __BGFXPLATFORM_H__
|
||||||
|
|
88
src/bgfx.cpp
88
src/bgfx.cpp
|
@ -38,10 +38,10 @@ namespace bgfx
|
||||||
#endif // BGFX_CONFIG_MULTITHREADED
|
#endif // BGFX_CONFIG_MULTITHREADED
|
||||||
|
|
||||||
#if BX_PLATFORM_WINDOWS
|
#if BX_PLATFORM_WINDOWS
|
||||||
void setHwnd(HWND _hwnd)
|
void setHwnd(::HWND _hwnd)
|
||||||
{
|
{
|
||||||
g_bgfxHwnd = _hwnd;
|
g_bgfxHwnd = _hwnd;
|
||||||
}
|
}
|
||||||
#endif // BX_PLATFORM_WINDOWS
|
#endif // BX_PLATFORM_WINDOWS
|
||||||
|
|
||||||
struct CallbackStub : public CallbackI
|
struct CallbackStub : public CallbackI
|
||||||
|
@ -1035,7 +1035,7 @@ namespace bgfx
|
||||||
|
|
||||||
return s_ctx.createTexture(mem, _flags, NULL);
|
return s_ctx.createTexture(mem, _flags, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
TextureHandle createTextureCube(uint16_t _sides, uint16_t _width, uint8_t _numMips, TextureFormat::Enum _format, uint32_t _flags, const Memory* _mem)
|
TextureHandle createTextureCube(uint16_t _sides, uint16_t _width, uint8_t _numMips, TextureFormat::Enum _format, uint32_t _flags, const Memory* _mem)
|
||||||
{
|
{
|
||||||
BGFX_CHECK_MAIN_THREAD();
|
BGFX_CHECK_MAIN_THREAD();
|
||||||
|
@ -1081,52 +1081,52 @@ namespace bgfx
|
||||||
s_ctx.destroyTexture(_handle);
|
s_ctx.destroyTexture(_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateTexture2D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem)
|
void updateTexture2D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem)
|
||||||
{
|
{
|
||||||
BGFX_CHECK_MAIN_THREAD();
|
BGFX_CHECK_MAIN_THREAD();
|
||||||
BX_CHECK(NULL != _mem, "_mem can't be NULL");
|
BX_CHECK(NULL != _mem, "_mem can't be NULL");
|
||||||
if (_width == 0
|
if (_width == 0
|
||||||
|| _height == 0)
|
|| _height == 0)
|
||||||
{
|
{
|
||||||
release(_mem);
|
release(_mem);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s_ctx.updateTexture(_handle, 0, _mip, _x, _y, 0, _width, _height, 1, _mem);
|
s_ctx.updateTexture(_handle, 0, _mip, _x, _y, 0, _width, _height, 1, _mem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateTexture3D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _z, uint16_t _width, uint16_t _height, uint16_t _depth, const Memory* _mem)
|
void updateTexture3D(TextureHandle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _z, uint16_t _width, uint16_t _height, uint16_t _depth, const Memory* _mem)
|
||||||
{
|
{
|
||||||
BGFX_CHECK_MAIN_THREAD();
|
BGFX_CHECK_MAIN_THREAD();
|
||||||
BX_CHECK(NULL != _mem, "_mem can't be NULL");
|
BX_CHECK(NULL != _mem, "_mem can't be NULL");
|
||||||
if (_width == 0
|
if (_width == 0
|
||||||
|| _height == 0
|
|| _height == 0
|
||||||
|| _depth == 0)
|
|| _depth == 0)
|
||||||
{
|
{
|
||||||
release(_mem);
|
release(_mem);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s_ctx.updateTexture(_handle, 0, _mip, _x, _y, _z, _width, _height, _depth, _mem);
|
s_ctx.updateTexture(_handle, 0, _mip, _x, _y, _z, _width, _height, _depth, _mem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateTextureCube(TextureHandle _handle, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem)
|
void updateTextureCube(TextureHandle _handle, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem)
|
||||||
{
|
{
|
||||||
BGFX_CHECK_MAIN_THREAD();
|
BGFX_CHECK_MAIN_THREAD();
|
||||||
BX_CHECK(NULL != _mem, "_mem can't be NULL");
|
BX_CHECK(NULL != _mem, "_mem can't be NULL");
|
||||||
BX_CHECK(_side >= 0 && _side <= 5, "Invalid side %d.", _side);
|
BX_CHECK(_side >= 0 && _side <= 5, "Invalid side %d.", _side);
|
||||||
if (_width == 0
|
if (_width == 0
|
||||||
|| _height == 0)
|
|| _height == 0)
|
||||||
{
|
{
|
||||||
release(_mem);
|
release(_mem);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s_ctx.updateTexture(_handle, _side, _mip, _x, _y, 0, _width, _height, 1, _mem);
|
s_ctx.updateTexture(_handle, _side, _mip, _x, _y, 0, _width, _height, 1, _mem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderTargetHandle createRenderTarget(uint16_t _width, uint16_t _height, uint32_t _flags, uint32_t _textureFlags)
|
RenderTargetHandle createRenderTarget(uint16_t _width, uint16_t _height, uint32_t _flags, uint32_t _textureFlags)
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,6 +12,17 @@
|
||||||
|
|
||||||
namespace bgfx
|
namespace bgfx
|
||||||
{
|
{
|
||||||
|
#if BX_PLATFORM_LINUX
|
||||||
|
static ::Display* s_display;
|
||||||
|
static ::Window s_window;
|
||||||
|
|
||||||
|
void x11SetDisplayWindow(::Display* _display, ::Window _window)
|
||||||
|
{
|
||||||
|
s_display = _display;
|
||||||
|
s_window = _window;
|
||||||
|
}
|
||||||
|
#endif // BX_PLATFORM_LINUX
|
||||||
|
|
||||||
struct Extension
|
struct Extension
|
||||||
{
|
{
|
||||||
enum Enum
|
enum Enum
|
||||||
|
@ -196,8 +207,6 @@ namespace bgfx
|
||||||
, m_surface(NULL)
|
, m_surface(NULL)
|
||||||
#elif BX_PLATFORM_LINUX
|
#elif BX_PLATFORM_LINUX
|
||||||
, m_context(0)
|
, m_context(0)
|
||||||
, m_window(0)
|
|
||||||
, m_display(NULL)
|
|
||||||
#endif // BX_PLATFORM_
|
#endif // BX_PLATFORM_
|
||||||
{
|
{
|
||||||
memset(&m_resolution, 0, sizeof(m_resolution) );
|
memset(&m_resolution, 0, sizeof(m_resolution) );
|
||||||
|
@ -334,15 +343,12 @@ namespace bgfx
|
||||||
}
|
}
|
||||||
#elif BX_PLATFORM_LINUX
|
#elif BX_PLATFORM_LINUX
|
||||||
|
|
||||||
if (0 == m_display)
|
if (0 == m_context)
|
||||||
{
|
{
|
||||||
Display* display = XOpenDisplay(0);
|
XLockDisplay(s_display);
|
||||||
BGFX_FATAL(display, Fatal::UnableToInitialize, "Failed to open X display (0).");
|
|
||||||
|
|
||||||
XLockDisplay(display);
|
|
||||||
|
|
||||||
int major, minor;
|
int major, minor;
|
||||||
bool version = glXQueryVersion(display, &major, &minor);
|
bool version = glXQueryVersion(s_display, &major, &minor);
|
||||||
BGFX_FATAL(version, Fatal::UnableToInitialize, "Failed to query GLX version");
|
BGFX_FATAL(version, Fatal::UnableToInitialize, "Failed to query GLX version");
|
||||||
BGFX_FATAL( (major == 1 && minor >= 3) || major > 1
|
BGFX_FATAL( (major == 1 && minor >= 3) || major > 1
|
||||||
, Fatal::UnableToInitialize
|
, Fatal::UnableToInitialize
|
||||||
|
@ -369,14 +375,14 @@ namespace bgfx
|
||||||
GLXFBConfig bestConfig = NULL;
|
GLXFBConfig bestConfig = NULL;
|
||||||
|
|
||||||
int numConfigs;
|
int numConfigs;
|
||||||
GLXFBConfig* configs = glXChooseFBConfig(display, DefaultScreen(display), attrsGlx, &numConfigs);
|
GLXFBConfig* configs = glXChooseFBConfig(s_display, DefaultScreen(s_display), attrsGlx, &numConfigs);
|
||||||
|
|
||||||
BX_TRACE("glX num configs %d", numConfigs);
|
BX_TRACE("glX num configs %d", numConfigs);
|
||||||
|
|
||||||
XVisualInfo* visualInfo = 0;
|
XVisualInfo* visualInfo = 0;
|
||||||
for (int ii = 0; ii < numConfigs; ++ii)
|
for (int ii = 0; ii < numConfigs; ++ii)
|
||||||
{
|
{
|
||||||
visualInfo = glXGetVisualFromFBConfig(display, configs[ii]);
|
visualInfo = glXGetVisualFromFBConfig(s_display, configs[ii]);
|
||||||
if (NULL != visualInfo)
|
if (NULL != visualInfo)
|
||||||
{
|
{
|
||||||
BX_TRACE("---");
|
BX_TRACE("---");
|
||||||
|
@ -384,7 +390,7 @@ namespace bgfx
|
||||||
for (uint32_t attr = 6; attr < countof(attrsGlx)-1 && attrsGlx[attr] != None; attr += 2)
|
for (uint32_t attr = 6; attr < countof(attrsGlx)-1 && attrsGlx[attr] != None; attr += 2)
|
||||||
{
|
{
|
||||||
int value;
|
int value;
|
||||||
glXGetFBConfigAttrib(display, configs[ii], attrsGlx[attr], &value);
|
glXGetFBConfigAttrib(s_display, configs[ii], attrsGlx[attr], &value);
|
||||||
BX_TRACE("glX %d/%d %2d: %4x, %8x (%8x%s)"
|
BX_TRACE("glX %d/%d %2d: %4x, %8x (%8x%s)"
|
||||||
, ii
|
, ii
|
||||||
, numConfigs
|
, numConfigs
|
||||||
|
@ -418,29 +424,8 @@ namespace bgfx
|
||||||
XFree(configs);
|
XFree(configs);
|
||||||
BGFX_FATAL(visualInfo, Fatal::UnableToInitialize, "Failed to find a suitable X11 display configuration.");
|
BGFX_FATAL(visualInfo, Fatal::UnableToInitialize, "Failed to find a suitable X11 display configuration.");
|
||||||
|
|
||||||
// Generate colormaps
|
|
||||||
XSetWindowAttributes windowAttrs;
|
|
||||||
windowAttrs.colormap = XCreateColormap(display, RootWindow(display, visualInfo->screen), visualInfo->visual, AllocNone);
|
|
||||||
windowAttrs.background_pixmap = None;
|
|
||||||
windowAttrs.border_pixel = 0;
|
|
||||||
|
|
||||||
Window window = XCreateWindow(
|
|
||||||
display
|
|
||||||
, RootWindow(display, visualInfo->screen)
|
|
||||||
, 0, 0
|
|
||||||
, _width, _height, 0, visualInfo->depth
|
|
||||||
, InputOutput
|
|
||||||
, visualInfo->visual
|
|
||||||
, CWBorderPixel|CWColormap
|
|
||||||
, &windowAttrs
|
|
||||||
);
|
|
||||||
BGFX_FATAL(window, Fatal::UnableToInitialize, "Failed to create X11 window.");
|
|
||||||
|
|
||||||
XMapRaised(display, window);
|
|
||||||
XFlush(display);
|
|
||||||
|
|
||||||
BX_TRACE("Create GL 2.1 context.");
|
BX_TRACE("Create GL 2.1 context.");
|
||||||
m_context = glXCreateContext(display, visualInfo, 0, GL_TRUE);
|
m_context = glXCreateContext(s_display, visualInfo, 0, GL_TRUE);
|
||||||
BGFX_FATAL(NULL != m_context, Fatal::UnableToInitialize, "Failed to create GL 2.1 context.");
|
BGFX_FATAL(NULL != m_context, Fatal::UnableToInitialize, "Failed to create GL 2.1 context.");
|
||||||
|
|
||||||
XFree(visualInfo);
|
XFree(visualInfo);
|
||||||
|
@ -457,16 +442,16 @@ namespace bgfx
|
||||||
None,
|
None,
|
||||||
};
|
};
|
||||||
|
|
||||||
GLXContext context = glXCreateContextAttribsARB(display, bestConfig, 0, true, contextAttrs);
|
GLXContext context = glXCreateContextAttribsARB(s_display, bestConfig, 0, true, contextAttrs);
|
||||||
|
|
||||||
if (NULL != context)
|
if (NULL != context)
|
||||||
{
|
{
|
||||||
glXDestroyContext(display, m_context);
|
glXDestroyContext(s_display, m_context);
|
||||||
m_context = context;
|
m_context = context;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glXMakeCurrent(display, window, m_context);
|
glXMakeCurrent(s_display, s_window, m_context);
|
||||||
|
|
||||||
# define GL_IMPORT(_optional, _proto, _func) \
|
# define GL_IMPORT(_optional, _proto, _func) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -477,15 +462,12 @@ namespace bgfx
|
||||||
# undef GL_IMPORT
|
# undef GL_IMPORT
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
glXSwapBuffers(display, window);
|
glXSwapBuffers(s_display, s_window);
|
||||||
|
|
||||||
m_display = display;
|
XUnlockDisplay(s_display);
|
||||||
m_window = window;
|
|
||||||
XUnlockDisplay(display);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
XResizeWindow(m_display, m_window, _width, _height);
|
|
||||||
}
|
}
|
||||||
#elif BGFX_USE_EGL
|
#elif BGFX_USE_EGL
|
||||||
if (NULL == m_context)
|
if (NULL == m_context)
|
||||||
|
@ -558,23 +540,6 @@ namespace bgfx
|
||||||
#endif // BX_PLATFORM_
|
#endif // BX_PLATFORM_
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !BGFX_CONFIG_RENDERER_OPENGLES3
|
|
||||||
if (NULL != glVertexAttribDivisor
|
|
||||||
&& NULL != glDrawArraysInstanced
|
|
||||||
&& NULL != glDrawElementsInstanced)
|
|
||||||
{
|
|
||||||
s_vertexAttribDivisor = glVertexAttribDivisor;
|
|
||||||
s_drawArraysInstanced = glDrawArraysInstanced;
|
|
||||||
s_drawElementsInstanced = glDrawElementsInstanced;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s_vertexAttribDivisor = stubVertexAttribDivisor;
|
|
||||||
s_drawArraysInstanced = stubDrawArraysInstanced;
|
|
||||||
s_drawElementsInstanced = stubDrawElementsInstanced;
|
|
||||||
}
|
|
||||||
#endif // !BGFX_CONFIG_RENDERER_OPENGLES3
|
|
||||||
|
|
||||||
m_flip = true;
|
m_flip = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -592,7 +557,7 @@ namespace bgfx
|
||||||
eglMakeCurrent(m_display, m_surface, m_surface, m_context);
|
eglMakeCurrent(m_display, m_surface, m_surface, m_context);
|
||||||
eglSwapBuffers(m_display, m_surface);
|
eglSwapBuffers(m_display, m_surface);
|
||||||
#elif BX_PLATFORM_LINUX
|
#elif BX_PLATFORM_LINUX
|
||||||
glXSwapBuffers(m_display, m_window);
|
glXSwapBuffers(s_display, s_window);
|
||||||
#endif // BX_PLATFORM_
|
#endif // BX_PLATFORM_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -760,8 +725,6 @@ namespace bgfx
|
||||||
EGLSurface m_surface;
|
EGLSurface m_surface;
|
||||||
#elif BX_PLATFORM_LINUX
|
#elif BX_PLATFORM_LINUX
|
||||||
GLXContext m_context;
|
GLXContext m_context;
|
||||||
Window m_window;
|
|
||||||
Display* m_display;
|
|
||||||
#endif // BX_PLATFORM_NACL
|
#endif // BX_PLATFORM_NACL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -804,18 +767,6 @@ namespace bgfx
|
||||||
{
|
{
|
||||||
renderFrame();
|
renderFrame();
|
||||||
}
|
}
|
||||||
#elif BX_PLATFORM_LINUX
|
|
||||||
bool linuxGetDisplay(Display** _display, Window* _window)
|
|
||||||
{
|
|
||||||
if (!s_renderCtx.m_display)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
*_display = s_renderCtx.m_display;
|
|
||||||
*_window = s_renderCtx.m_window;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif // BX_PLATFORM_
|
#endif // BX_PLATFORM_
|
||||||
|
|
||||||
static const GLenum s_primType[] =
|
static const GLenum s_primType[] =
|
||||||
|
@ -2252,6 +2203,23 @@ namespace bgfx
|
||||||
s_textureFormat[TextureFormat::BGRX8].m_fmt = GL_BGRA_EXT;
|
s_textureFormat[TextureFormat::BGRX8].m_fmt = GL_BGRA_EXT;
|
||||||
s_textureFormat[TextureFormat::BGRA8].m_fmt = GL_BGRA_EXT;
|
s_textureFormat[TextureFormat::BGRA8].m_fmt = GL_BGRA_EXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !BGFX_CONFIG_RENDERER_OPENGLES3
|
||||||
|
if (NULL != glVertexAttribDivisor
|
||||||
|
&& NULL != glDrawArraysInstanced
|
||||||
|
&& NULL != glDrawElementsInstanced)
|
||||||
|
{
|
||||||
|
s_vertexAttribDivisor = glVertexAttribDivisor;
|
||||||
|
s_drawArraysInstanced = glDrawArraysInstanced;
|
||||||
|
s_drawElementsInstanced = glDrawElementsInstanced;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_vertexAttribDivisor = stubVertexAttribDivisor;
|
||||||
|
s_drawArraysInstanced = stubDrawArraysInstanced;
|
||||||
|
s_drawElementsInstanced = stubDrawElementsInstanced;
|
||||||
|
}
|
||||||
|
#endif // !BGFX_CONFIG_RENDERER_OPENGLES3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue