Browse Source

Context class must be instantiated after initializing extensions.

pull/279/head
Vladimír Vondruš 14 years ago
parent
commit
4927be44cf
  1. 5
      src/Contexts/AbstractXWindowContext.cpp
  2. 8
      src/Contexts/AbstractXWindowContext.h
  3. 4
      src/Contexts/EglContext.cpp
  4. 8
      src/Contexts/EglContext.h
  5. 4
      src/Contexts/GlxContext.cpp
  6. 8
      src/Contexts/GlxContext.h

5
src/Contexts/AbstractXWindowContext.cpp

@ -15,6 +15,7 @@
#include "AbstractXWindowContext.h"
#include "Context.h"
#include "ExtensionWrangler.h"
#define None 0L // redef Xlib nonsense
@ -70,9 +71,13 @@ AbstractXWindowContext::AbstractXWindowContext(AbstractContext<Display*, VisualI
/* Initialize extension wrangler */
ExtensionWrangler::initialize(glInterface->experimentalExtensionWranglerFeatures());
c = new Context;
}
AbstractXWindowContext::~AbstractXWindowContext() {
delete c;
/* Shut down the interface */
delete glInterface;

8
src/Contexts/AbstractXWindowContext.h

@ -33,7 +33,11 @@
#include "AbstractWindowContext.h"
#include "AbstractContext.h"
namespace Magnum { namespace Contexts {
namespace Magnum {
class Context;
namespace Contexts {
/** @nosubgrouping
@brief Base for X11-based contexts
@ -279,6 +283,8 @@ class AbstractXWindowContext: public AbstractWindowContext {
AbstractContext<Display*, VisualID, Window>* glInterface;
Context* c;
/** @todo Get this from the created window */
Math::Vector2<GLsizei> viewportSize;

4
src/Contexts/EglContext.cpp

@ -20,8 +20,6 @@
namespace Magnum { namespace Contexts {
EglContext::~EglContext() {
delete c;
eglDestroyContext(display, context);
eglDestroySurface(display, surface);
eglTerminate(display);
@ -85,8 +83,6 @@ void EglContext::createContext(EGLNativeWindowType window) {
}
/** @bug Fixme: On desktop OpenGL and Mesa EGL implementation OpenGL version is 1.0, which is wrong */
context = new Context;
}
}}

8
src/Contexts/EglContext.h

@ -28,11 +28,7 @@
#include "AbstractContext.h"
namespace Magnum {
class Context;
namespace Contexts {
namespace Magnum { namespace Contexts {
#ifndef DOXYGEN_GENERATING_OUTPUT
/* EGL returns visual ID as int, but Xorg expects long unsigned int */
@ -68,8 +64,6 @@ class EglContext: public AbstractContext<EGLNativeDisplayType, VisualId, EGLNati
EGLConfig config;
EGLSurface surface;
EGLContext context;
Context* c;
};
}}

4
src/Contexts/GlxContext.cpp

@ -85,13 +85,9 @@ void GlxContext::createContext(Window nativeWindow) {
Error() << "GlxContext: cannot create context.";
exit(1);
}
c = new Context;
}
GlxContext::~GlxContext() {
delete c;
glXMakeCurrent(display, None, nullptr);
glXDestroyContext(display, context);
}

8
src/Contexts/GlxContext.h

@ -27,11 +27,7 @@
#include "AbstractContext.h"
namespace Magnum {
class Context;
namespace Contexts {
namespace Magnum { namespace Contexts {
/**
@brief GLX interface
@ -66,8 +62,6 @@ class GlxContext: public AbstractContext<Display*, VisualID, Window> {
Window window;
GLXFBConfig* configs;
GLXContext context;
Context* c;
};
}}

Loading…
Cancel
Save