layer0/os_gl.h (266 lines of code) (raw):
#ifndef _H_os_gl
#define _H_os_gl
#include"os_predef.h"
#include"os_proprietary.h"
// hardcode either true, or (x)
#define ALWAYS_IMMEDIATE_OR(x) true
#define _PYMOL_NO_AA_SHADERS
#ifndef PURE_OPENGL_ES_2
#define _PYMOL_ARB_SHADERS
#endif
#define GL_DEFAULT_SHADER_WITH_SETTINGS 0xffe0
#define GL_SPHERE_SHADER 0xffe1
#define GL_CYLINDER_SHADER 0xffe2
#define GL_TWO_SIDED_LIGHTING 0xffe3
#define GL_MESH_LIGHTING 0xffe4
#define GL_DOT_LIGHTING 0xffe5
#define GL_LABEL_FLOAT_TEXT 0xffe6
#define GL_DASH_TRANSPARENCY_DEPTH_TEST 0xffe7
#define GL_BACK_FACE_CULLING 0xffe8
#define GL_DEPTH_TEST_IF_FLOATING 0xffe9
// unused: 0xfff0, 0xfffc
#define GL_LABEL_SHADER 0xfffa
#define GL_BACKGROUND_SHADER 0xfffb
#define GL_DEFAULT_SHADER 0xfffd
#define GL_SHADER_LIGHTING 0xfffe
#define GL_SCREEN_SHADER 0xfff1
#define GL_RAMP_SHADER 0xfff2
#define GL_CONNECTOR_SHADER 0xfff3
#define GL_FXAA_SHADER 0xfff4
#define GL_SMAA1_SHADER 0xfff5
#define GL_SMAA2_SHADER 0xfff6
#define GL_SMAA3_SHADER 0xfff7
#define GL_TRILINES_SHADER 0xfff8
#define GL_OIT_SHADER 0xfff9
#define GL_OIT_COPY_SHADER 0xffea
#define GL_SURFACE_SHADER 0xffeb
#define GL_LINE_SHADER 0xffec
#define CGO_GL_LIGHTING 0xffef
#ifndef _PYMOL_OSX
#ifndef WIN32
#define GL_GLEXT_PROTOTYPES
#endif
#ifndef GLEW_NO_GLU
#define GLEW_NO_GLU
#endif
#include<GL/glew.h>
#include<GL/gl.h>
#define GLDOUBLEMULTMATRIX glMultMatrixd
#define GLDOUBLETRANSLATE glTranslated
#else
/* BEGIN PROPRIETARY CODE SEGMENT (see disclaimer in "os_proprietary.h") */
#include<GL/glew.h>
#include <OpenGL/gl.h>
#include <OpenGL/glext.h>
#define GLDOUBLEMULTMATRIX glMultMatrixd
#define GLDOUBLETRANSLATE glTranslated
/* END PROPRIETARY CODE SEGMENT */
#endif
#ifdef PURE_OPENGL_ES_2
#define GLLIGHTMODELI(arg1, arg2) /* nothing */
#else
#define GLLIGHTMODELI glLightModeli
#endif
void PyMOLReadPixels(GLint x,
GLint y,
GLsizei width,
GLsizei height, GLenum format, GLenum type, GLvoid * pixels);
void PyMOLDrawPixels(GLsizei width,
GLsizei height, GLenum format, GLenum type, const GLvoid * pixels);
#define P_GLUT_BUTTON_SCROLL_FORWARD 3
#define P_GLUT_BUTTON_SCROLL_BACKWARD 4
#define P_GLUT_DOUBLE_LEFT 200
#define P_GLUT_DOUBLE_MIDDLE 201
#define P_GLUT_DOUBLE_RIGHT 202
#define P_GLUT_SINGLE_LEFT 100
#define P_GLUT_SINGLE_MIDDLE 101
#define P_GLUT_SINGLE_RIGHT 102
int PyMOLCheckOpenGLErr(const char *pos);
/* determine whether or not we have a real GLUT */
#ifdef _PYMOL_NO_GLUT
#define _PYMOL_PRETEND_GLUT
#endif
#ifdef _PYMOL_ACTIVEX_OLD
#define _PYMOL_WX_GLUT
#endif
/*
#ifdef _EPYMOL
#define _PYMOL_WX_GLUT
#endif
*/
#ifdef _PYMOL_MIN_GLUT
#define _PYMOL_PRETEND_GLUT
#endif
#ifdef _PYMOL_WX_GLUT
#define _PYMOL_PRETEND_GLUT
#define _PYMOL_PRETEND_GLUT_FONT
#endif
#ifdef _PYMOL_NO_MAIN
#define _PYMOL_PRETEND_GLUT
#define _PYMOL_NO_GLUT
#endif
#ifndef _PYMOL_PRETEND_GLUT
/* ============ REAL GLUT BEING USED ============= */
#include <stdlib.h>
#ifndef _PYMOL_OSX
#include<GL/glut.h>
#else
#import <GLUT/glut.h>
#endif
#ifdef FREEGLUT
#include<GL/freeglut_ext.h>
#endif
/* These are the only glut constants and functions that PyMOL uses ... */
#define P_GLUT_ACTIVE_ALT GLUT_ACTIVE_ALT
#define P_GLUT_ACTIVE_CTRL GLUT_ACTIVE_CTRL
#define P_GLUT_ACTIVE_SHIFT GLUT_ACTIVE_SHIFT
#define P_GLUT_BITMAP_8_BY_13 GLUT_BITMAP_8_BY_13
#define P_GLUT_DEPTH GLUT_DEPTH
#define P_GLUT_DISPLAY_MODE_POSSIBLE GLUT_DISPLAY_MODE_POSSIBLE
#define P_GLUT_DOUBLE GLUT_DOUBLE
#define P_GLUT_DOWN GLUT_DOWN
#define P_GLUT_KEY_DOWN GLUT_KEY_DOWN
#define P_GLUT_KEY_LEFT GLUT_KEY_LEFT
#define P_GLUT_KEY_RIGHT GLUT_KEY_RIGHT
#define P_GLUT_KEY_UP GLUT_KEY_UP
#define P_GLUT_LEFT_BUTTON GLUT_LEFT_BUTTON
#define P_GLUT_MIDDLE_BUTTON GLUT_MIDDLE_BUTTON
#define P_GLUT_RGBA GLUT_RGBA
#define P_GLUT_ALPHA GLUT_ALPHA
#define P_GLUT_RIGHT_BUTTON GLUT_RIGHT_BUTTON
#define P_GLUT_STEREO GLUT_STEREO
#define P_GLUT_UP GLUT_UP
#define P_GLUT_MULTISAMPLE GLUT_MULTISAMPLE
#define P_GLUT_STENCIL GLUT_STENCIL
#define P_GLUT_ACCUM GLUT_ACCUM
#define P_GLUT_WINDOW_X GLUT_WINDOW_X
#define P_GLUT_WINDOW_Y GLUT_WINDOW_Y
#define P_GLUT_WINDOW_WIDTH GLUT_WINDOW_WIDTH
#define P_GLUT_WINDOW_HEIGHT GLUT_WINDOW_HEIGHT
#define P_GLUT_SCREEN_HEIGHT GLUT_SCREEN_HEIGHT
#define P_GLUT_SCREEN_WIDTH GLUT_SCREEN_WIDTH
#define P_GLUT_WINDOW_BORDER_WIDTH GLUT_WINDOW_BORDER_WIDTH
#define P_GLUT_WINDOW_HEADER_HEIGHT GLUT_WINDOW_HEADER_HEIGHT
#define p_glutGameModeString glutGameModeString
#define p_glutEnterGameMode glutEnterGameMode
#define p_glutLeaveGameMode glutLeaveGameMode
#define p_glutBitmapCharacter glutBitmapCharacter
#define p_glutSwapBuffers glutSwapBuffers
#define p_glutCreateWindow glutCreateWindow
#define p_glutPopWindow glutPopWindow
#define p_glutShowWindow glutShowWindow
#define p_glutHideWindow glutHideWindow
#define p_glutReshapeWindow glutReshapeWindow
#define p_glutDestroyWindow glutDestroyWindow
#define p_glutFullScreen glutFullScreen
#define p_glutPostRedisplay glutPostRedisplay
#define p_glutInit glutInit
#define p_glutInitDisplayMode glutInitDisplayMode
#define p_glutInitWindowPosition glutInitWindowPosition
#define p_glutInitWindowSize glutInitWindowSize
#define p_glutPositionWindow glutPositionWindow
#define p_glutGet glutGet
#define p_glutGetModifiers glutGetModifiers
#define p_glutDisplayFunc glutDisplayFunc
#define p_glutReshapeFunc glutReshapeFunc
#define p_glutKeyboardFunc glutKeyboardFunc
#define p_glutMouseFunc glutMouseFunc
#define p_glutMotionFunc glutMotionFunc
#define p_glutPassiveMotionFunc glutPassiveMotionFunc
#define p_glutSpecialFunc glutSpecialFunc
#define p_glutIdleFunc glutIdleFunc
#define p_glutMainLoop glutMainLoop
#else
/* we're pretending we have glut...*/
int p_glutGet(GLenum type);
/* ============ GLUT EMULATION MODE ============= */
#ifndef _PYMOL_NO_GLUT
#define P_GLUT_IDLE_EVENT 0
#define P_GLUT_DISPLAY_EVENT 1
#define P_GLUT_RESHAPE_EVENT 2
#define P_GLUT_MOUSE_EVENT 3
#define P_GLUT_MOTION_EVENT 4
#define P_GLUT_CHAR_EVENT 5
#define P_GLUT_SPECIAL_EVENT 6
#define P_GLUT_PASSIVE_MOTION_EVENT 7
typedef struct {
int event_code;
int x, y;
int input, state, mod;
} p_glut_event;
/* here is the pretend GLUT event handler */
void p_glutHandleEvent(p_glut_event * ev);
int p_glutGetRedisplay(void);
#endif
/* here is the interface and constants for pretend or no GLUT */
#define P_GLUT_RGBA 0
#define P_GLUT_DOUBLE 2
#define P_GLUT_ACTIVE_ALT 4
#define P_GLUT_ACTIVE_CTRL 2
#define P_GLUT_ACTIVE_SHIFT 1
#define P_GLUT_BITMAP_8_BY_13 ((void*)3)
#define P_GLUT_DEPTH 16
#define P_GLUT_DISPLAY_MODE_POSSIBLE 400
#define P_GLUT_DOWN 0
#define P_GLUT_UP 1
#define P_GLUT_STEREO 256
#define P_GLUT_MULTISAMPLE 128
#define P_GLUT_STENCIL 32
#define P_GLUT_KEY_F1 1
#define P_GLUT_KEY_F2 2
#define P_GLUT_KEY_F3 3
#define P_GLUT_KEY_F4 4
#define P_GLUT_KEY_F5 5
#define P_GLUT_KEY_F6 6
#define P_GLUT_KEY_F7 7
#define P_GLUT_KEY_F8 8
#define P_GLUT_KEY_F9 9
#define P_GLUT_KEY_F10 10
#define P_GLUT_KEY_F11 11
#define P_GLUT_KEY_F12 12
#define P_GLUT_KEY_LEFT 100
#define P_GLUT_KEY_UP 101
#define P_GLUT_KEY_RIGHT 102
#define P_GLUT_KEY_DOWN 103
#define P_GLUT_KEY_PAGE_UP 104
#define P_GLUT_KEY_PAGE_DOWN 105
#define P_GLUT_KEY_HOME 106
#define P_GLUT_KEY_END 107
#define P_GLUT_KEY_INSERT 108
#define P_GLUT_LEFT_BUTTON 0
#define P_GLUT_MIDDLE_BUTTON 1
#define P_GLUT_RIGHT_BUTTON 2
#define P_GLUT_WINDOW_X 5
#define P_GLUT_WINDOW_Y 6
#define P_GLUT_WINDOW_WIDTH 7
#define P_GLUT_WINDOW_HEIGHT 8
#define P_GLUT_SCREEN_WIDTH 9
#define P_GLUT_SCREEN_HEIGHT 10
#define P_GLUT_WINDOW_BORDER_WIDTH 11
#define P_GLUT_WINDOW_HEADER_HEIGHT 12
#ifndef _PYMOL_NO_GLUT
void p_glutGameModeString(char *str);
void p_glutEnterGameMode(void);
void p_glutLeaveGameMode(void);
void p_glutBitmapCharacter(void *font, int character);
void p_glutSwapBuffers(void);
int p_glutCreateWindow(const char *title); /* NOTE: once this function called,
* we need to have a valid GL rendering context */
void p_glutPopWindow(void);
void p_glutShowWindow(void);
void p_glutReshapeWindow(int width, int height);
void p_glutDestroyWindow(int theWindow);
void p_glutFullScreen(void);
void p_glutPostRedisplay(void);
void p_glutInit(int *argcp, char **argv);
void p_glutInitDisplayMode(unsigned int mode);
void p_glutInitDisplayString(const char *string);
void p_glutInitWindowPosition(int x, int y);
void p_glutInitWindowSize(int width, int height);
int p_glutGet(GLenum type);
int p_glutGetModifiers(void);
void p_glutDisplayFunc(void (*func) (void));
void p_glutReshapeFunc(void (*func) (int width, int height));
void p_glutKeyboardFunc(void (*func) (unsigned char key, int x, int y));
void p_glutMouseFunc(void (*func) (int button, int state, int x, int y));
void p_glutMotionFunc(void (*func) (int x, int y));
void p_glutSpecialFunc(void (*func) (int key, int x, int y));
void p_glutIdleFunc(void (*func) (void));
void p_glutPositionWindow(int x, int y);
void p_glutMainLoop(void);
#endif
#endif
#define GL_C_INT_TYPE uint
#define GL_C_INT_ENUM GL_UNSIGNED_INT
#define SceneGLClearColor(red,green,blue,alpha) glClearColor(red,green,blue,alpha);
#ifndef GL_FRAGMENT_PROGRAM_ARB
#define GL_FRAGMENT_PROGRAM_ARB 0x8804
#endif
#ifndef GLAPIENTRY
#define GLAPIENTRY
#endif
#define hasFrameBufferBinding() false
#endif