ObjectCGO.cpp (pymol-open-source-2.2.0) | : | ObjectCGO.cpp (pymol-open-source-2.3.0) | ||
---|---|---|---|---|
skipping to change at line 253 | skipping to change at line 253 | |||
SceneInvalidate(I->Obj.G); /* needed ? */ | SceneInvalidate(I->Obj.G); /* needed ? */ | |||
} | } | |||
/*========================================================================*/ | /*========================================================================*/ | |||
static int ObjectCGOGetNState(ObjectCGO * I) | static int ObjectCGOGetNState(ObjectCGO * I) | |||
{ | { | |||
return (I->NState); | return (I->NState); | |||
} | } | |||
static void ObjectCGORenderState(PyMOLGlobals * G, int pass, CRay *ray, Picking | static void ObjectCGORenderState(PyMOLGlobals* G, int pass, CRay* ray, | |||
**pick, ObjectCGO * I, RenderInfo * info, ObjectCGOState *sobj, const float *col | ObjectCGO* I, RenderInfo* info, ObjectCGOState* sobj, const float* color, | |||
or, ObjectGadgetRamp *ramp, int use_shader, bool cgo_lighting){ | ObjectGadgetRamp* ramp, int use_shader, bool cgo_lighting) | |||
{ | ||||
if(ray) { | if(ray) { | |||
if(sobj) { | if(sobj) { | |||
if(sobj->origCGO){ | if(sobj->origCGO){ | |||
CGO *cgo = sobj->origCGO, *cgo_copy = NULL; | CGO *cgo = sobj->origCGO, *cgo_copy = NULL; | |||
if (cgo_lighting && CGOHasAnyTriangleVerticesWithoutNormals(cgo)) { | if (cgo_lighting && CGOHasAnyTriangleVerticesWithoutNormals(cgo)) { | |||
cgo = cgo_copy = CGOGenerateNormalsForTriangles(cgo); | cgo = cgo_copy = CGOGenerateNormalsForTriangles(cgo); | |||
} | } | |||
CGORenderRay(cgo, ray, info, color, ramp, I->Obj.Setting, NULL); | CGORenderRay(cgo, ray, info, color, ramp, I->Obj.Setting, NULL); | |||
CGOFree(cgo_copy); | CGOFree(cgo_copy); | |||
} | } | |||
} | } | |||
} else if(G->HaveGUI && G->ValidContext && pass) { | } else if(G->HaveGUI && G->ValidContext && pass) { | |||
if(pick) { // no picking yet | if(info->pick) { // no picking yet | |||
} else { | } else { | |||
bool pass_is_opaque = (pass > 0); | bool pass_is_opaque = (pass > 0); | |||
if(sobj && ((sobj->hasTransparency ^ pass_is_opaque) || (sobj->hasOpaque = = pass_is_opaque))){ | if(sobj && ((sobj->hasTransparency ^ pass_is_opaque) || (sobj->hasOpaque = = pass_is_opaque))){ | |||
{ | { | |||
CShaderPrg *shaderPrg; | CShaderPrg *shaderPrg; | |||
int two_sided_lighting = SettingGet_i(G, I->Obj.Setting, NULL, cSetting _two_sided_lighting); | int two_sided_lighting = SettingGet_i(G, I->Obj.Setting, NULL, cSetting _two_sided_lighting); | |||
bool backface_cull = SettingGet_i(G, I->Obj.Setting, NULL, cSetting_ba ckface_cull); | bool backface_cull = SettingGet_i(G, I->Obj.Setting, NULL, cSetting_ba ckface_cull); | |||
if (two_sided_lighting<0){ | if (two_sided_lighting<0){ | |||
two_sided_lighting = !cgo_lighting; | two_sided_lighting = !cgo_lighting; | |||
} | } | |||
skipping to change at line 489 | skipping to change at line 492 | |||
sobj->cgo_lighting = cgo_lighting; | sobj->cgo_lighting = cgo_lighting; | |||
} | } | |||
} | } | |||
/*========================================================================*/ | /*========================================================================*/ | |||
static void ObjectCGORender(ObjectCGO * I, RenderInfo * info) | static void ObjectCGORender(ObjectCGO * 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; | ||||
int pass = info->pass; | int pass = info->pass; | |||
ObjectCGOState *sobj = NULL; | ObjectCGOState *sobj = NULL; | |||
const float *color = NULL; | const float *color = NULL; | |||
bool use_shader = false, cgo_lighting = false; | bool use_shader = false, cgo_lighting = false; | |||
ObjectGadgetRamp *ramp = NULL; | ObjectGadgetRamp *ramp = NULL; | |||
use_shader = SettingGetGlobal_b(G, cSetting_cgo_use_shader) & | use_shader = SettingGetGlobal_b(G, cSetting_cgo_use_shader) & | |||
SettingGetGlobal_b(G, cSetting_use_shaders); | SettingGetGlobal_b(G, cSetting_use_shaders); | |||
cgo_lighting = SettingGet_i(G, I->Obj.Setting, NULL, cSetting_cgo_lighting); | cgo_lighting = SettingGet_i(G, I->Obj.Setting, NULL, cSetting_cgo_lighting); | |||
skipping to change at line 515 | skipping to change at line 517 | |||
return; | return; | |||
if(pass || info->ray) { | if(pass || info->ray) { | |||
if((I->Obj.visRep & cRepCGOBit)) { | if((I->Obj.visRep & cRepCGOBit)) { | |||
for(StateIterator iter(G, I->Obj.Setting, state, I->NState); iter.next();) { | for(StateIterator iter(G, I->Obj.Setting, state, I->NState); iter.next();) { | |||
sobj = I->State + iter.state; | sobj = I->State + iter.state; | |||
if (!sobj->origCGO) | if (!sobj->origCGO) | |||
continue; | continue; | |||
if (!ray) | if (!ray) | |||
ObjectCGOGenerateCGO(G, I, sobj, use_shader, cgo_lighting, color, ramp , iter.state); | ObjectCGOGenerateCGO(G, I, sobj, use_shader, cgo_lighting, color, ramp , iter.state); | |||
ObjectCGORenderState(G, pass, ray, pick, I, info, sobj, color, ramp, use_ shader, cgo_lighting); | ObjectCGORenderState(G, pass, ray, I, info, sobj, color, ramp, use_sha der, cgo_lighting); | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
/*========================================================================*/ | /*========================================================================*/ | |||
ObjectCGO *ObjectCGONew(PyMOLGlobals * G) | ObjectCGO *ObjectCGONew(PyMOLGlobals * G) | |||
{ | { | |||
OOAlloc(G, ObjectCGO); | OOAlloc(G, ObjectCGO); | |||
End of changes. 4 change blocks. | ||||
6 lines changed or deleted | 6 lines changed or added |