Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/toolx/sg/gl

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
  2 // See the file tools.license for terms.
  3 
  4 #ifndef toolx_sg_gl
  5 #define toolx_sg_gl
  6 
  7 #include "../OpenGL"
  8 
  9 #include <tools/platform> //for APPLE TargetConditionals.h
 10 #include <tools/img>
 11 
 12 #include <ostream>
 13 #include <sstream>
 14 
 15 namespace toolx {
 16 namespace sg {
 17 //namespace gl : no, problem with g4tools.
 18 
 19 inline void gl_clear_errors() {
 20   GLenum glerror = ::glGetError();
 21   while(glerror!=GL_NO_ERROR) {
 22     glerror = ::glGetError();
 23   }
 24 }
 25 
 26 inline bool gl_dump_if_errors(std::ostream& a_out,const std::string& a_head) {
 27   bool retval = false;
 28   GLenum glerror = ::glGetError();
 29   if(glerror!=GL_NO_ERROR) {
 30     a_out << a_head
 31           << " we have gl errors :"
 32           << std::endl;
 33     retval = true;
 34   }
 35   while(glerror!=GL_NO_ERROR) {
 36     //#define GL_NO_ERROR                       0
 37     //#define GL_INVALID_ENUM                   0x0500
 38     //#define GL_INVALID_VALUE                  0x0501
 39     //#define GL_INVALID_OPERATION              0x0502
 40     //#define GL_STACK_OVERFLOW                 0x0503
 41     //#define GL_STACK_UNDERFLOW                0x0504
 42     //#define GL_OUT_OF_MEMORY                  0x0505
 43 
 44     //#define GL_INVALID_FRAMEBUFFER_OPERATION  0x0506
 45 
 46     std::ostringstream oss;
 47     oss << "0x" << std::hex << glerror;
 48     a_out << oss.str() << std::endl;
 49 
 50     glerror = ::glGetError();
 51   }
 52   return retval;
 53 }
 54 
 55 inline void gl_dump_infos(std::ostream& a_out) {
 56     std::string gl_version;
 57    {const char* _sv = (const char*)::glGetString(GL_VERSION);
 58     if(_sv) gl_version = _sv;}
 59 
 60     std::string gl_vendor;
 61    {const char* _sv = (const char*)::glGetString(GL_VENDOR);
 62     if(_sv) gl_vendor = _sv;}
 63 
 64     std::string gl_renderer;
 65    {const char* _sv = (const char*)::glGetString(GL_RENDERER);
 66     if(_sv) gl_renderer = _sv;}
 67 
 68     std::string gl_extensions;
 69    {const char* _sv = (const char*)::glGetString(GL_EXTENSIONS);
 70     if(_sv) gl_extensions = _sv;}
 71 
 72     GLint gl_texture_size;
 73     ::glGetIntegerv(GL_MAX_TEXTURE_SIZE, &gl_texture_size);
 74 
 75     //GLint gl_buffer_size;
 76     //::glGetIntegerv(GL_BUFFER_SIZE, &gl_buffer_size);
 77 
 78     a_out << "toolx::sg::gl::dump_infos :" << std::endl;
 79     a_out << " GL_VERSION " << gl_version << std::endl;
 80     a_out << " GL_VENDOR " << gl_vendor << std::endl;
 81     a_out << " GL_RENDERER " << gl_renderer << std::endl;
 82     a_out << " GL_EXTENSIONS " << gl_extensions << std::endl;
 83     a_out << " GL_MAX_TEXTURE_SIZE " << gl_texture_size << std::endl;
 84     //a_out << " GL_BUFFER_SIZE " << gl_buffer_size << std::endl;
 85 }
 86 
 87 inline bool gl_tex_img(std::ostream& a_out,const tools::img_byte& a_img) {
 88     if(a_img.bpp()==1) {
 89       //to pass eiffel-tower.png
 90 #if defined(ANDROID) || TARGET_OS_IPHONE
 91       tools::img_byte res;
 92       if(!a_img.bw2x(3,res)) {
 93         a_out << "toolx::sg::gl::tex_img : tools::img.bw2x() failed." << std::endl;
 94         return false;
 95       }
 96       ::glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,res.width(),res.height(),0,GL_RGB,GL_UNSIGNED_BYTE,res.buffer());
 97 #else
 98       ::glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,a_img.width(),a_img.height(),0,GL_LUMINANCE,GL_UNSIGNED_BYTE,a_img.buffer());
 99 #endif
100     } else if(a_img.bpp()==3) {
101       ::glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,a_img.width(),a_img.height(),0,GL_RGB,GL_UNSIGNED_BYTE,a_img.buffer());
102     } else if(a_img.bpp()==4) {
103       ::glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,a_img.width(),a_img.height(),0,GL_RGBA,GL_UNSIGNED_BYTE,a_img.buffer());
104     } else {
105       a_out << "toolx::sg::gl::tex_img : img.bpp() " << a_img.bpp() << " not treated." << std::endl;
106       return false;
107     }
108     return true;
109 }
110 
111 }}
112 
113 
114 #endif