/** * PANDA 3D SOFTWARE * Copyright (c) Carnegie Mellon University. All rights reserved. * * All use of this software is subject to the terms of the revised BSD * license. You should have received a copy of this license along * with this source code in a file named "LICENSE." * * @file eglGraphicsStateGuardian.h * @author rdb * @date 2009-05-21 */ #ifndef EGLGRAPHICSSTATEGUARDIAN_H #define EGLGRAPHICSSTATEGUARDIAN_H #include "pandabase.h" #include "eglGraphicsPipe.h" #include "get_x11.h" /** * A tiny specialization on GLESGraphicsStateGuardian to add some egl-specific * information. */ #ifdef OPENGLES_2 class eglGraphicsStateGuardian : public GLES2GraphicsStateGuardian { #else class eglGraphicsStateGuardian : public GLESGraphicsStateGuardian { #endif public: INLINE const FrameBufferProperties &get_fb_properties() const; void get_properties(FrameBufferProperties &properties, bool &pbuffer_supported, bool &pixmap_supported, bool &slow, EGLConfig config); void choose_pixel_format(const FrameBufferProperties &properties, X11_Display *_display, int _screen, bool need_pbuffer, bool need_pixmap); eglGraphicsStateGuardian(GraphicsEngine *engine, GraphicsPipe *pipe, eglGraphicsStateGuardian *share_with); virtual ~eglGraphicsStateGuardian(); virtual void reset(); bool egl_is_at_least_version(int major_version, int minor_version) const; EGLContext _share_context; EGLContext _context; EGLDisplay _egl_display; X11_Display *_display; int _screen; XVisualInfo *_visual; XVisualInfo *_visuals; EGLConfig _fbconfig; FrameBufferProperties _fbprops; protected: virtual void gl_flush() const; virtual GLenum gl_get_error() const; virtual void query_gl_version(); virtual void get_extra_extensions(); virtual void *do_get_extension_func(const char *name); private: int _egl_version_major, _egl_version_minor; public: static TypeHandle get_class_type() { return _type_handle; } static void init_type() { #ifdef OPENGLES_2 GLES2GraphicsStateGuardian::init_type(); register_type(_type_handle, "eglGraphicsStateGuardian", GLES2GraphicsStateGuardian::get_class_type()); #else GLESGraphicsStateGuardian::init_type(); register_type(_type_handle, "eglGraphicsStateGuardian", GLESGraphicsStateGuardian::get_class_type()); #endif } virtual TypeHandle get_type() const { return get_class_type(); } virtual TypeHandle force_init_type() {init_type(); return get_class_type();} private: static TypeHandle _type_handle; }; #include "eglGraphicsStateGuardian.I" #endif