"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "layer2/ObjectMap.cpp" between
pymol-v2.1.0.tar.bz2 and pymol-open-source-2.2.0.tar.gz

About: PyMOL is a Python-enhanced molecular graphics tool. It excels at 3D visualization of proteins, small molecules, density, surfaces, and trajectories. It also includes molecular editing, ray tracing, and movies. Open Source version.

ObjectMap.cpp  (pymol-v2.1.0.tar.bz2):ObjectMap.cpp  (pymol-open-source-2.2.0)
skipping to change at line 1787 skipping to change at line 1787
{ {
ObjectStatePurge(&I->State); ObjectStatePurge(&I->State);
if(I->Field) { if(I->Field) {
IsosurfFieldFree(G, I->Field); IsosurfFieldFree(G, I->Field);
I->Field = NULL; I->Field = NULL;
} }
FreeP(I->Origin); FreeP(I->Origin);
FreeP(I->Dim); FreeP(I->Dim);
FreeP(I->Range); FreeP(I->Range);
FreeP(I->Grid); FreeP(I->Grid);
CGOFree(I->shaderCGO);
if(I->Symmetry) { if(I->Symmetry) {
SymmetryFree(I->Symmetry); SymmetryFree(I->Symmetry);
I->Symmetry = NULL; I->Symmetry = NULL;
} }
I->Active = false; I->Active = false;
} }
static void ObjectMapFree(ObjectMap * I) static void ObjectMapFree(ObjectMap * I)
skipping to change at line 1828 skipping to change at line 1829
static void ObjectMapInvalidate(ObjectMap * I, int rep, int level, int state) static void ObjectMapInvalidate(ObjectMap * I, int rep, int level, int state)
{ {
if(level >= cRepInvExtents) { if(level >= cRepInvExtents) {
I->Obj.ExtentFlag = false; I->Obj.ExtentFlag = false;
} }
if((rep < 0) || (rep == cRepDot)) { if((rep < 0) || (rep == cRepDot)) {
int a; int a;
for(a = 0; a < I->NState; a++) { for(a = 0; a < I->NState; a++) {
if(I->State[a].Active) if(I->State[a].Active)
I->State[a].have_range = false; I->State[a].have_range = false;
CGOFree(I->State[a].shaderCGO);
} }
} }
SceneInvalidate(I->Obj.G); SceneInvalidate(I->Obj.G);
} }
/* Has no prototype */
static CGO* ObjectMapCGOGenerate(PyMOLGlobals *G, float* corner)
{
int ok = true;
CGO *convertCGO = NULL;
CGO *shaderCGO = CGONewSized(G, 0);
CGOBegin(shaderCGO, GL_LINES);
CGOVertexv(shaderCGO, corner + 3 * 0);
CGOVertexv(shaderCGO, corner + 3 * 1);
CGOVertexv(shaderCGO, corner + 3 * 0);
CGOVertexv(shaderCGO, corner + 3 * 2);
CGOVertexv(shaderCGO, corner + 3 * 2);
CGOVertexv(shaderCGO, corner + 3 * 3);
CGOVertexv(shaderCGO, corner + 3 * 1);
CGOVertexv(shaderCGO, corner + 3 * 3);
CGOVertexv(shaderCGO, corner + 3 * 0);
CGOVertexv(shaderCGO, corner + 3 * 4);
CGOVertexv(shaderCGO, corner + 3 * 1);
CGOVertexv(shaderCGO, corner + 3 * 5);
CGOVertexv(shaderCGO, corner + 3 * 2);
CGOVertexv(shaderCGO, corner + 3 * 6);
CGOVertexv(shaderCGO, corner + 3 * 3);
CGOVertexv(shaderCGO, corner + 3 * 7);
CGOVertexv(shaderCGO, corner + 3 * 4);
CGOVertexv(shaderCGO, corner + 3 * 5);
CGOVertexv(shaderCGO, corner + 3 * 4);
CGOVertexv(shaderCGO, corner + 3 * 6);
CGOVertexv(shaderCGO, corner + 3 * 6);
CGOVertexv(shaderCGO, corner + 3 * 7);
CGOVertexv(shaderCGO, corner + 3 * 5);
CGOVertexv(shaderCGO, corner + 3 * 7);
CGOEnd(shaderCGO);
CGOStop(shaderCGO);
convertCGO = CGOCombineBeginEnd(shaderCGO, 0);
CHECKOK(ok, convertCGO);
CGOFree(shaderCGO);
shaderCGO = convertCGO;
if (ok)
convertCGO = CGOOptimizeToVBONotIndexedWithReturnedData(shaderCGO, 0, 0, NUL
L);
else
return NULL;
CHECKOK(ok, convertCGO);
if (!ok)
return NULL;
CGOFree(shaderCGO);
shaderCGO = convertCGO;
shaderCGO->use_shader = true;
return shaderCGO;
}
static void ObjectMapRender(ObjectMap * I, RenderInfo * info) static void ObjectMapRender(ObjectMap * I, RenderInfo * info)
{ {
PyMOLGlobals *G = I->Obj.G; PyMOLGlobals *G = I->Obj.G;
int state = info->state; int state = info->state;
CRay *ray = info->ray; CRay *ray = info->ray;
Picking **pick = info->pick; Picking **pick = info->pick;
int pass = info->pass; int pass = info->pass;
ObjectMapState *ms = NULL; ObjectMapState *ms = NULL;
if(pass) if(pass)
skipping to change at line 1854 skipping to change at line 1924
for(StateIterator iter(G, I->Obj.Setting, state, I->NState); for(StateIterator iter(G, I->Obj.Setting, state, I->NState);
iter.next();) { iter.next();) {
state = iter.state; state = iter.state;
if(I->State[state].Active) if(I->State[state].Active)
ms = &I->State[state]; ms = &I->State[state];
if(ms) { if(ms) {
float *corner = ms->Corner; float *corner = ms->Corner;
float tr_corner[24]; float tr_corner[24];
ObjectPrepareContext(&I->Obj, ray); ObjectPrepareContext(&I->Obj, info);
if(ms->State.Matrix) { /* transform the corners before drawing */ if(ms->State.Matrix) { /* transform the corners before drawing */
int a; int a;
for(a = 0; a < 8; a++) { for(a = 0; a < 8; a++) {
transform44d3f(ms->State.Matrix, corner + 3 * a, tr_corner + 3 * a); transform44d3f(ms->State.Matrix, corner + 3 * a, tr_corner + 3 * a);
} }
corner = tr_corner; corner = tr_corner;
} }
if((I->Obj.visRep & cRepExtentBit)) { if((I->Obj.visRep & cRepExtentBit)) {
if(ray) { if(ray) {
float *vc; const float *vc;
float radius = ray->PixelRadius / 1.4142F; float radius = ray->PixelRadius / 1.4142F;
vc = ColorGet(G, I->Obj.Color); vc = ColorGet(G, I->Obj.Color);
ray->color3fv(vc); ray->color3fv(vc);
ray->sausage3fv(corner + 3 * 0, corner + 3 * 1, radius, vc, vc); ray->sausage3fv(corner + 3 * 0, corner + 3 * 1, radius, vc, vc);
ray->sausage3fv(corner + 3 * 0, corner + 3 * 2, radius, vc, vc); ray->sausage3fv(corner + 3 * 0, corner + 3 * 2, radius, vc, vc);
ray->sausage3fv(corner + 3 * 2, corner + 3 * 3, radius, vc, vc); ray->sausage3fv(corner + 3 * 2, corner + 3 * 3, radius, vc, vc);
ray->sausage3fv(corner + 3 * 1, corner + 3 * 3, radius, vc, vc); ray->sausage3fv(corner + 3 * 1, corner + 3 * 3, radius, vc, vc);
ray->sausage3fv(corner + 3 * 0, corner + 3 * 4, radius, vc, vc); ray->sausage3fv(corner + 3 * 0, corner + 3 * 4, radius, vc, vc);
ray->sausage3fv(corner + 3 * 1, corner + 3 * 5, radius, vc, vc); ray->sausage3fv(corner + 3 * 1, corner + 3 * 5, radius, vc, vc);
ray->sausage3fv(corner + 3 * 2, corner + 3 * 6, radius, vc, vc); ray->sausage3fv(corner + 3 * 2, corner + 3 * 6, radius, vc, vc);
ray->sausage3fv(corner + 3 * 3, corner + 3 * 7, radius, vc, vc); ray->sausage3fv(corner + 3 * 3, corner + 3 * 7, radius, vc, vc);
ray->sausage3fv(corner + 3 * 4, corner + 3 * 5, radius, vc, vc); ray->sausage3fv(corner + 3 * 4, corner + 3 * 5, radius, vc, vc);
ray->sausage3fv(corner + 3 * 4, corner + 3 * 6, radius, vc, vc); ray->sausage3fv(corner + 3 * 4, corner + 3 * 6, radius, vc, vc);
ray->sausage3fv(corner + 3 * 6, corner + 3 * 7, radius, vc, vc); ray->sausage3fv(corner + 3 * 6, corner + 3 * 7, radius, vc, vc);
ray->sausage3fv(corner + 3 * 5, corner + 3 * 7, radius, vc, vc); ray->sausage3fv(corner + 3 * 5, corner + 3 * 7, radius, vc, vc);
} else if(G->HaveGUI && G->ValidContext) { } else if(G->HaveGUI && G->ValidContext) {
if(pick) { if(pick) {
} else { #ifndef PURE_OPENGL_ES_2
} else if (!info->use_shaders) {
// immediate
ObjectUseColor(&I->Obj); ObjectUseColor(&I->Obj);
glDisable(GL_LIGHTING); glDisable(GL_LIGHTING);
glBegin(GL_LINES); glBegin(GL_LINES);
glVertex3fv(corner + 3 * 0); glVertex3fv(corner + 3 * 0);
glVertex3fv(corner + 3 * 1); glVertex3fv(corner + 3 * 1);
glVertex3fv(corner + 3 * 0); glVertex3fv(corner + 3 * 0);
glVertex3fv(corner + 3 * 2); glVertex3fv(corner + 3 * 2);
glVertex3fv(corner + 3 * 2); glVertex3fv(corner + 3 * 2);
skipping to change at line 1926 skipping to change at line 1998
glVertex3fv(corner + 3 * 6); glVertex3fv(corner + 3 * 6);
glVertex3fv(corner + 3 * 6); glVertex3fv(corner + 3 * 6);
glVertex3fv(corner + 3 * 7); glVertex3fv(corner + 3 * 7);
glVertex3fv(corner + 3 * 5); glVertex3fv(corner + 3 * 5);
glVertex3fv(corner + 3 * 7); glVertex3fv(corner + 3 * 7);
glEnd(); glEnd();
glEnable(GL_LIGHTING); glEnable(GL_LIGHTING);
} else {
#endif
// shader
if (!ms->shaderCGO) {
ms->shaderCGO = ObjectMapCGOGenerate(G, corner);
}
if (ms->shaderCGO) {
CShaderPrg* shaderPrg = G->ShaderMgr->Enable_DefaultShader(info->p
ass);
if (shaderPrg) {
shaderPrg->SetLightingEnabled(0);
CGORenderGL(ms->shaderCGO, ColorGet(G, I->Obj.Color),
NULL, NULL, info, NULL);
shaderPrg->Disable();
}
}
} }
} }
} }
if((I->Obj.visRep & cRepDotBit)) { if((I->Obj.visRep & cRepDotBit)) {
if(!ms->have_range) { if(!ms->have_range) {
double sum = 0.0, sumsq = 0.0; double sum = 0.0, sumsq = 0.0;
CField *data = ms->Field->data; CField *data = ms->Field->data;
int cnt = data->dim[0] * data->dim[1] * data->dim[2]; int cnt = data->dim[0] * data->dim[1] * data->dim[2];
float *raw_data = (float *) data->data; float *raw_data = (float *) data->data;
skipping to change at line 1988 skipping to change at line 2077
float width = float width =
SettingGet_f(G, NULL, I->Obj.Setting, cSetting_dot_width); SettingGet_f(G, NULL, I->Obj.Setting, cSetting_dot_width);
if(ray) { if(ray) {
float radius = ray->PixelRadius * width / 1.4142F; float radius = ray->PixelRadius * width / 1.4142F;
float vc[3]; float vc[3];
int color = I->Obj.Color; int color = I->Obj.Color;
int ramped = ColorCheckRamped(G, I->Obj.Color); int ramped = ColorCheckRamped(G, I->Obj.Color);
{ {
float *tmp = ColorGet(G, I->Obj.Color); const float *tmp = ColorGet(G, I->Obj.Color);
copy3f(tmp, vc); copy3f(tmp, vc);
} }
for(a = 0; a < cnt; a++) { for(a = 0; a < cnt; a++) {
float f_val = *(raw_data++); float f_val = *(raw_data++);
RAW_POINT_TRANSFORM(raw_point_ptr, raw_point); RAW_POINT_TRANSFORM(raw_point_ptr, raw_point);
if((f_val >= high_cut) || (f_val <= low_cut)) { if((f_val >= high_cut) || (f_val <= low_cut)) {
if(ramped) { if(ramped) {
ColorGetRamped(G, color, raw_point, vc, state); ColorGetRamped(G, color, raw_point, vc, state);
ray->color3fv(vc); ray->color3fv(vc);
} }
ray->sphere3fv(raw_point, radius); ray->sphere3fv(raw_point, radius);
} }
} }
} else if(G->HaveGUI && G->ValidContext) { } else if(G->HaveGUI && G->ValidContext) {
if(pick) { if(pick) {
} else { } else if (ALWAYS_IMMEDIATE_OR(!info->use_shaders)) {
if(gradients) { if(gradients) {
raw_gradient = (float *) gradients->data; raw_gradient = (float *) gradients->data;
} else { } else {
glDisable(GL_LIGHTING); glDisable(GL_LIGHTING);
} }
{ {
int ramped = ColorCheckRamped(G, I->Obj.Color); int ramped = ColorCheckRamped(G, I->Obj.Color);
float vc[3]; float vc[3];
int color = I->Obj.Color; int color = I->Obj.Color;
float gt[3]; float gt[3];
 End of changes. 9 change blocks. 
5 lines changed or deleted 96 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)