layer1/SceneDef.h (193 lines of code) (raw):
/*
A* -------------------------------------------------------------------
B* This file contains source code for the PyMOL computer program
C* Copyright (c) Schrodinger, LLC.
D* -------------------------------------------------------------------
E* It is unlawful to modify or remove this copyright notice.
F* -------------------------------------------------------------------
G* Please see the accompanying LICENSE file for further information.
H* -------------------------------------------------------------------
I* Additional authors of this source file include:
-*
-*
-*
Z* -------------------------------------------------------------------
*/
#ifndef _H_SceneDef
#define _H_SceneDef
#include"Base.h"
#include"PyMOLObject.h"
#include"Ortho.h"
#include"View.h"
#include"ScrollBar.h"
#include<list>
#include<vector>
#ifdef PURE_OPENGL_ES_2
# define GLEW_EXT_gpu_shader4 false
# define GLEW_EXT_geometry_shader4 false
# ifdef _WEBGL
# include <emscripten/val.h>
# define GLEW_EXT_draw_buffers2 !emscripten::val::module_property("ONEBUFFER").as<bool>()
# else
# define GLEW_EXT_draw_buffers2 false
# endif
#endif
#define TM3_IS_ONEBUF !GLEW_EXT_draw_buffers2
#define TRN_BKG 0x30
#define MAX_ANI_ELEM 300
struct DeferredMouse : public CDeferred {
Block *block { nullptr };
int button { 0 };
int x { 0 };
int y { 0 };
int mod { 0 };
double when { 0.0 };
int mode_override { 0 };
DeferredMouse(PyMOLGlobals * G) : CDeferred(G){}
};
struct DeferredImage : public CDeferred {
int width { 0 };
int height { 0 };
std::string filename;
int quiet { 0 };
int antialias { 0 };
float dpi { 0.0f };
int entire_window { 0 };
int format { 0 };
DeferredImage(PyMOLGlobals * G) : CDeferred(G){}
};
struct DeferredRay : public CDeferred {
int ray_width { 0 };
int ray_height { 0 };
int mode { 0 };
float angle { 0.0f };
float shift { 0.0f };
int quiet { 0 };
int show_timing { 0 };
int antialias { 0 };
DeferredRay(PyMOLGlobals * G) : CDeferred(G){}
};
typedef struct {
int len;
const char *name;
int x1, y1, x2, y2, drawn;
} SceneElem;
typedef struct {
unsigned char *data;
int size;
int width, height;
int stereo; /* indicates data actually contains two back to back full-screen images */
int needs_alpha_reset; /* needs alpha reset */
} ImageType;
typedef struct {
float unit_left, unit_right, unit_top, unit_bottom, unit_front, unit_back;
} SceneUnitContext;
typedef struct {
int n_col;
int n_row;
int first_slot;
int last_slot;
float asp_adjust;
int active;
int size;
int slot;
int mode;
GLint cur_view[4];
GLint cur_viewport_size[2];
SceneUnitContext context; /* for whole-window display */
} GridInfo;
class CScene : public Block {
public:
std::list<CObject*> Obj, GadgetObjs, NonGadgetObjs;
float RotMatrix[16]; /* WARNING: column major, as per OpenGL spec */
float InvMatrix[16]; /* WARNING: column major, as per OpenGL spec */
float PmvMatrix[16];
float Scale;
int Width, Height;
int Button;
int LastX, LastY;
int StartX, StartY;
int LastWinX, LastWinY;
double LastClickTime;
int LastButton, LastMod;
int PossibleSingleClick;
double LastReleaseTime;
double SingleClickDelay;
float ViewNormal[3], LinesNormal[3];
float Pos[3], Origin[3];
float H;
float Front, Back, FrontSafe, BackSafe;
float TextColor[3];
double SweepTime;
int DirtyFlag;
int ChangedFlag;
int CopyType, CopyNextFlag, CopyForced;
int NFrame { 0 };
int HasMovie { 0 };
ImageType *Image { nullptr };
int MovieOwnsImageFlag;
int MovieFrameFlag;
double LastRender, RenderTime, LastFrameTime, LastFrameAdjust;
double LastSweep, LastSweepTime;
float LastSweepX, LastSweepY;
int RockFrame;
Picking LastPicked;
int StereoMode;
OrthoLineType vendor, renderer, version;
int SculptingFlag, SculptingSave;
int RovingDirtyFlag;
int RovingCleanupFlag;
double RovingLastUpdate;
int Threshold, ThresholdX, ThresholdY;
CView *View { nullptr };
float LastPickVertex[3], LastClickVertex[3];
int LastPickVertexFlag;
int LoopFlag;
int LoopMod;
BlockRect LoopRect;
CViewElem ani_elem[MAX_ANI_ELEM + 1];
int cur_ani_elem, n_ani_elem;
int LastStateBuilt;
int AnimationStartFlag;
double AnimationStartTime;
double AnimationLagTime;
int AnimationStartFrame;
double ApproxRenderTime;
float VertexScale;
float FogStart;
float FogEnd;
/* Scene Names */
int ButtonsShown, ButtonDrag, ButtonMargin, ButtonsValid;
int Over, Pressed, PressMode, HowFarDown, NSkip;
int ScrollBarActive;
int ReorderFlag;
OrthoLineType ReorderLog;
ScrollBar m_ScrollBar;
char *SceneNameVLA { nullptr };
SceneElem *SceneVLA { nullptr };
int NScene;
CGO *AlphaCGO { nullptr };
int *SlotVLA { nullptr };
int StencilValid, StencilParity;
int ReinterpolateFlag;
CObject *ReinterpolateObj { nullptr };
CObject *MotionGrabbedObj { nullptr };
short prev_no_z_rotation1, prev_no_z_rotation2;
int orig_x_rotation, orig_y_rotation;
std::vector<float> m_ModelViewMatrixStack;
int m_ModelViewMatrixStackDepth { 0 };
union {
float ModelViewMatrix[16];
float ModMatrix[16]; // old alias, deprecated
};
float ProjectionMatrix[16];
int background_color_already_set;
int do_not_clear;
GridInfo grid;
int last_grid_size;
int n_texture_refreshes { 0 };
CGO *offscreenCGO { nullptr };
CGO *offscreenOIT_CGO { nullptr };
CGO *offscreenOIT_CGO_copy { nullptr };
void (*vp_prepareViewPortForStereo)(PyMOLGlobals *, CScene *, int, short, int, int, int, int, int);
int vp_times, vp_x, vp_y, vp_owidth, vp_oheight, vp_stereo_mode;
float vp_width_scale;
std::vector<Picking> pickVLA {};
bool invPick; // if set, picking should be re-built
CScene(PyMOLGlobals * G) : Block(G), m_ScrollBar(G, false) {}
virtual int click(int button, int x, int y, int mod) override;
virtual int release(int button, int x, int y, int mod) override;
virtual int drag(int x, int y, int mod) override;
virtual void draw(CGO* orthoCGO) override;
virtual void reshape(int width, int height) override;
// PYMOL-2561, PYMOL-2711 : This structure used to be calloc-ed, this replicates that
void *operator new(size_t size) {
void *mem = ::operator new(size);
memset(mem, 0, size);
return mem;
}
};
#endif