1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365
|
#ifndef _H_os_gl
#define _H_os_gl
#include"os_gl_pre.h"
#if defined(WIN32) || defined(_PYMOL_LIB)
#define ALLOCATE_ARRAY(tname,variablename, size) tname *variablename = (tname*) malloc(size * sizeof(tname));
#else
#define ALLOCATE_ARRAY(tname,variablename, size) tname *variablename = (tname*) malloc(size * sizeof(tname)); assert(variablename);
#endif
#define DEALLOCATE_ARRAY(variablename) free(variablename);
#if defined(OPENGL_ES_2)
#define GL_LABEL_SCREEN_SHADER 0xfff0
#define GL_LABEL_SHADER 0xfffa
#define GL_BACKGROUND_SHADER 0xfffb
#define GL_DEFAULT_SHADER_SCREEN 0xfffc
#define GL_DEFAULT_SHADER 0xfffd
#define GL_SHADER_LIGHTING 0xfffe
#define GL_SCREEN_SHADER 0xfff1
#define GL_RAMP_SHADER 0xfff2
#endif
#ifndef _PYMOL_OSX
#ifdef _PYMOL_OPENGL_SHADERS
#ifndef WIN32
#define GL_GLEXT_PROTOTYPES
#endif
#include<GL/glew.h>
#include<GL/gl.h>
#include<GL/glu.h>
#include<GL/glext.h>
#else
#include<GL/gl.h>
#include<GL/glu.h>
#endif
#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/glu.h>
#include <OpenGL/glext.h>
#define GLDOUBLEMULTMATRIX glMultMatrixd
#define GLDOUBLETRANSLATE glTranslated
/* END PROPRIETARY CODE SEGMENT */
#endif
#ifdef _PYMOL_GL_DRAWARRAYS
#define GLLIGHTMODELI glLightModelf
#else
#define GLLIGHTMODELI glLightModeli
#endif
/* BEGIN PROPRIETARY CODE SEGMENT (see disclaimer in "os_proprietary.h") */
#ifdef WIN32
#include<GL/glu.h>
#ifdef _PYMOL_OPENGL_SHADERS
#include<GL/glext.h>
#endif
#endif
/* END PROPRIETARY CODE SEGMENT */
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 5
#define P_GLUT_DOUBLE_MIDDLE 6
#define P_GLUT_DOUBLE_RIGHT 7
#define P_GLUT_SINGLE_LEFT 8
#define P_GLUT_SINGLE_MIDDLE 9
#define P_GLUT_SINGLE_RIGHT 10
int PyMOLCheckOpenGLErr(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 ============= */
#ifndef _PYMOL_OSX
#include<GL/glut.h>
#else
#include<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_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 DEFINE_RENDER_DATA(vartype, var, ...) const vartype var[] = { __VA_ARGS__ };
#if defined(_PYMOL_GL_DRAWARRAYS)
#define CHANGE_COLOR3fv(colarr) glColor3fv(white);
#define RENDER_DEFINED_DATA(mode, size, type, len, var) \
glEnableClientState(GL_VERTEX_ARRAY); \
glVertexPointer(size, type, 0, var); \
glDrawArrays(mode, 0, len); \
glDisableClientState(GL_VERTEX_ARRAY);
#else
#define CHANGE_COLOR3fv(colarr) glColor3fv(white);
#define RENDER_DEFINED_DATA(mode, size, type, len, var) \
glBegin(mode); \
{ \
int i, maxi = len*size; \
for (i=0;i<maxi;i+=size){ \
glVertex2i(var[i], var[i+1]); \
} \
} \
glEnd();
#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);
#endif
|