00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef EGLGRAPHICSSTATEGUARDIAN_H
00016 #define EGLGRAPHICSSTATEGUARDIAN_H
00017
00018 #include "pandabase.h"
00019 #include "eglGraphicsPipe.h"
00020 #include "get_x11.h"
00021
00022
00023
00024
00025
00026
00027 #ifdef OPENGLES_2
00028 class eglGraphicsStateGuardian : public GLES2GraphicsStateGuardian {
00029 #else
00030 class eglGraphicsStateGuardian : public GLESGraphicsStateGuardian {
00031 #endif
00032 public:
00033 INLINE const FrameBufferProperties &get_fb_properties() const;
00034 void get_properties(FrameBufferProperties &properties,
00035 bool &pbuffer_supported, bool &pixmap_supported,
00036 bool &slow, EGLConfig config);
00037 void choose_pixel_format(const FrameBufferProperties &properties,
00038 X11_Display *_display,
00039 int _screen,
00040 bool need_pbuffer, bool need_pixmap);
00041
00042 eglGraphicsStateGuardian(GraphicsEngine *engine, GraphicsPipe *pipe,
00043 eglGraphicsStateGuardian *share_with);
00044
00045 virtual ~eglGraphicsStateGuardian();
00046
00047 virtual void reset();
00048
00049 bool egl_is_at_least_version(int major_version, int minor_version) const;
00050
00051 EGLContext _share_context;
00052 EGLContext _context;
00053 EGLDisplay _egl_display;
00054 X11_Display *_display;
00055 int _screen;
00056 XVisualInfo *_visual;
00057 XVisualInfo *_visuals;
00058 EGLConfig _fbconfig;
00059 FrameBufferProperties _fbprops;
00060
00061 protected:
00062 virtual void gl_flush() const;
00063 virtual GLenum gl_get_error() const;
00064
00065 virtual void query_gl_version();
00066 virtual void get_extra_extensions();
00067 virtual void *do_get_extension_func(const char *prefix, const char *name);
00068
00069 private:
00070 int _egl_version_major, _egl_version_minor;
00071
00072 public:
00073 static TypeHandle get_class_type() {
00074 return _type_handle;
00075 }
00076 static void init_type() {
00077 #ifdef OPENGLES_2
00078 GLES2GraphicsStateGuardian::init_type();
00079 register_type(_type_handle, "eglGraphicsStateGuardian",
00080 GLES2GraphicsStateGuardian::get_class_type());
00081 #else
00082 GLESGraphicsStateGuardian::init_type();
00083 register_type(_type_handle, "eglGraphicsStateGuardian",
00084 GLESGraphicsStateGuardian::get_class_type());
00085 #endif
00086 }
00087 virtual TypeHandle get_type() const {
00088 return get_class_type();
00089 }
00090 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00091
00092 private:
00093 static TypeHandle _type_handle;
00094 };
00095
00096 #include "eglGraphicsStateGuardian.I"
00097
00098 #endif