"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "layer2/GadgetSet.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.

GadgetSet.cpp  (pymol-v2.1.0.tar.bz2):GadgetSet.cpp  (pymol-open-source-2.2.0)
skipping to change at line 71 skipping to change at line 71
int GadgetSetSetVertex(GadgetSet * I, int index, int base, float *v) int GadgetSetSetVertex(GadgetSet * I, int index, int base, float *v)
{ {
int ok = true; int ok = true;
float *v0, *v1; float *v0, *v1;
if(index < I->NCoord) { if(index < I->NCoord) {
v0 = I->Coord + 3 * index; v0 = I->Coord + 3 * index;
if(base < 0) { if(base < 0) {
copy3f(v, v0); copy3f(v, v0);
if(index){ if(index){
subtract3f(v0, I->Coord, v0); subtract3f(v0, I->Coord, v0);
} else {
if (I->offsetPtOP)
copy3f(v0, &I->StdCGO->op[I->offsetPtOP]);
if (I->offsetPtOPick)
copy3f(v0, &I->PickCGO->op[I->offsetPtOPick]);
} }
} else if(base < I->NCoord) { } else if(base < I->NCoord) {
v1 = I->Coord + 3 * base; v1 = I->Coord + 3 * base;
subtract3f(v, v1, v0); subtract3f(v, v1, v0);
if(index) if(index)
subtract3f(v0, I->Coord, v0); subtract3f(v0, I->Coord, v0);
} else { } else {
ok = false; ok = false;
} }
} else } else
skipping to change at line 262 skipping to change at line 267
} }
#endif #endif
} }
/*========================================================================*/ /*========================================================================*/
void GadgetSet::update() void GadgetSet::update()
{ {
GadgetSet * I = this; GadgetSet * I = this;
if(I->StdCGO) { if(I->StdCGO) {
CGOFree(I->StdCGO); CGOFree(I->StdCGO);
I->offsetPtOP = 0;
I->StdCGO = NULL; I->StdCGO = NULL;
} }
if(I->PickCGO) { if(I->PickCGO) {
CGOFree(I->PickCGO); CGOFree(I->PickCGO);
I->offsetPtOPick = 0;
I->PickCGO = NULL; I->PickCGO = NULL;
} }
} }
/*========================================================================*/ /*========================================================================*/
void GadgetSet::render(RenderInfo * info) void GadgetSet::render(RenderInfo * info)
{ {
GadgetSet * I = this; GadgetSet * I = this;
int pass = info->pass; int pass = info->pass;
CRay *ray = info->ray; CRay *ray = info->ray;
Picking **pick = info->pick; Picking **pick = info->pick;
float *color; const float *color;
PickContext context; PickContext context;
short use_shader;
use_shader = (short) SettingGetGlobal_b(I->G, cSetting_use_shaders);
context.object = I->Obj; context.object = I->Obj;
context.state = I->State; context.state = I->State;
color = ColorGet(I->G, I->Obj->Obj.Color); color = ColorGet(I->G, I->Obj->Obj.Color);
if(!pass) { if(pass < 0 || ray || pick) {
PyMOLGlobals *G = I->G; PyMOLGlobals *G = I->G;
if(ray) { if(ray) {
if(I->ShapeCGO){ if(I->ShapeCGO){
int ok = true;
float mat[16] = { 1.f, 0.f, 0.f, I->Coord[0], float mat[16] = { 1.f, 0.f, 0.f, I->Coord[0],
0.f, 1.f, 0.f, I->Coord[1], 0.f, 1.f, 0.f, I->Coord[1],
0.f, 0.f, 1.f, I->Coord[2], 0.f, 0.f, 1.f, I->Coord[2],
0.f, 0.f, 0.f, 1.f }; 0.f, 0.f, 0.f, 1.f };
RayPushTTT(ray); RayPushTTT(ray);
RaySetTTT(ray, true, mat); /* Used to set the ray-tracing matrix, RaySetTTT(ray, true, mat); /* Used to set the ray-tracing matrix,
this works, but is there another way to do this? */ this works, but is there another way to do this? */
ok = CGORenderRay(I->ShapeCGO, ray, color, I->Obj->Obj.Setting, NULL); CGORenderRay(I->ShapeCGO, ray, info, color, NULL, I->Obj->Obj.Setting, NU LL);
RayPopTTT(ray); RayPopTTT(ray);
} }
} else if(G->HaveGUI && G->ValidContext) { } else if(G->HaveGUI && G->ValidContext) {
short use_shader = (short) SettingGetGlobal_b(I->G, cSetting_use_shaders) short use_shader = (short) SettingGetGlobal_b(I->G, cSetting_use_shaders);
&&
CShaderPrg_Get_RampShader(I->G);
if(pick) { if(pick) {
if (!I->PickCGO && I->PickShapeCGO){ if (!I->PickCGO && I->PickShapeCGO){
CGO *convertcgo; CGO *convertcgo;
int ok = true; int ok = true;
convertcgo = CGOCombineBeginEnd(I->PickShapeCGO, 0); convertcgo = CGOCombineBeginEnd(I->PickShapeCGO, 0);
CHECKOK(ok, convertcgo); CHECKOK(ok, convertcgo);
if (ok){ if (ok){
if (use_shader){ if (use_shader){
I->PickCGO = CGOOptimizeToVBOIndexedNoShader(convertcgo, 0); CGO *tmpCGO;
tmpCGO = CGOOptimizeToVBOIndexedNoShader(convertcgo, 0);
I->PickCGO = CGONew(G);
CGODisable(I->PickCGO, GL_DEPTH_TEST);
CGOEnable(I->PickCGO, GL_RAMP_SHADER);
I->offsetPtOPick = CGOUniform3f(I->PickCGO, RAMP_OFFSETPT, (const f
loat*)I->Coord);
CGOAppendNoStop(I->PickCGO, tmpCGO);
CGOFreeWithoutVBOs(tmpCGO);
CGODisable(I->PickCGO, GL_RAMP_SHADER);
CGOEnable(I->PickCGO, GL_DEPTH_TEST);
CGOStop(I->PickCGO);
I->PickCGO->use_shader = true; I->PickCGO->use_shader = true;
CGOFree(convertcgo); CGOFree(convertcgo);
} else { } else {
I->PickCGO = convertcgo; I->PickCGO = convertcgo;
} }
} else { } else {
CGOFree(convertcgo); CGOFree(convertcgo);
} }
} }
if(I->PickCGO) { if(I->PickCGO) {
if (use_shader){ if (use_shader){
CShaderPrg *shader = CShaderPrg_Enable_RampShader(G); CGORenderGLPicking(I->PickCGO, info, &context, I->Obj->Obj.Setting, N
CShaderPrg_Set3f(shader, "offsetPt", I->Coord[0], I->Coord[1], I->Coo ULL);
rd[2]); #ifndef PURE_OPENGL_ES_2
CGORenderGLPicking(I->PickCGO, pick, &context, I->Obj->Obj.Setting, N
ULL);
CShaderPrg_Disable(shader);
} else { } else {
glDisable(GL_DEPTH_TEST);
glTranslatef(I->Coord[0],I->Coord[1],I->Coord[2]); glTranslatef(I->Coord[0],I->Coord[1],I->Coord[2]);
CGORenderGLPicking(I->PickShapeCGO, pick, &context, I->Obj->Obj.Setti ng, NULL); CGORenderGLPicking(I->PickShapeCGO, info, &context, I->Obj->Obj.Setti ng, NULL);
glTranslatef(-I->Coord[0],-I->Coord[1],-I->Coord[2]); glTranslatef(-I->Coord[0],-I->Coord[1],-I->Coord[2]);
glEnable(GL_DEPTH_TEST);
#endif
} }
} }
} else { } else {
if (!I->StdCGO && I->ShapeCGO){ if (!I->StdCGO && I->ShapeCGO){
CGO *convertcgo; CGO *convertcgo;
int ok = true; int ok = true;
convertcgo = CGOCombineBeginEnd(I->ShapeCGO, 0); convertcgo = CGOCombineBeginEnd(I->ShapeCGO, 0);
CHECKOK(ok, convertcgo); CHECKOK(ok, convertcgo);
if (ok){ if (ok){
if (use_shader){ if (use_shader){
I->StdCGO = CGOOptimizeToVBOIndexedNoShader(convertcgo, 0); CGO *tmpCGO;
tmpCGO = CGOOptimizeToVBONotIndexedNoShader(convertcgo, 0);
I->StdCGO = CGONew(G);
CGODisable(I->StdCGO, GL_DEPTH_TEST);
CGOEnable(I->StdCGO, GL_RAMP_SHADER);
I->offsetPtOP = CGOUniform3f(I->StdCGO, RAMP_OFFSETPT, (const floa
t*)I->Coord);
CGOAppendNoStop(I->StdCGO, tmpCGO);
CGOFreeWithoutVBOs(tmpCGO);
CGODisable(I->StdCGO, GL_RAMP_SHADER);
CGOEnable(I->StdCGO, GL_DEPTH_TEST);
CGOStop(I->StdCGO);
I->StdCGO->use_shader = true; I->StdCGO->use_shader = true;
CGOFree(convertcgo); CGOFree(convertcgo);
} else { } else {
I->StdCGO = convertcgo; I->StdCGO = convertcgo;
} }
} else { } else {
CGOFree(convertcgo); CGOFree(convertcgo);
} }
} }
if(I->StdCGO) { if(I->StdCGO) {
/*CGORenderGL(I->PickCGO,color,I->Obj->Obj.Setting,NULL); */
if (use_shader){ if (use_shader){
CShaderPrg *shader = CShaderPrg_Enable_RampShader(G); if (color)
CShaderPrg_Set3f(shader, "offsetPt", I->Coord[0], I->Coord[1], I->Coo CGORenderGL(I->StdCGO, NULL, I->Obj->Obj.Setting, NULL, info, NULL
rd[2]); );
CGORenderGL(I->StdCGO, color, I->Obj->Obj.Setting, NULL, info, NULL); #ifndef PURE_OPENGL_ES_2
CShaderPrg_Disable(shader);
} else { } else {
glDisable(GL_DEPTH_TEST);
glTranslatef(I->Coord[0],I->Coord[1],I->Coord[2]); glTranslatef(I->Coord[0],I->Coord[1],I->Coord[2]);
CGORenderGL(I->ShapeCGO, color, I->Obj->Obj.Setting, NULL, info, NULL ); CGORenderGL(I->ShapeCGO, NULL, I->Obj->Obj.Setting, NULL, info, NULL) ;
glTranslatef(-I->Coord[0],-I->Coord[1],-I->Coord[2]); glTranslatef(-I->Coord[0],-I->Coord[1],-I->Coord[2]);
glEnable(GL_DEPTH_TEST);
#endif
} }
} }
} }
} }
} }
} }
/*========================================================================*/ /*========================================================================*/
GadgetSet *GadgetSetNew(PyMOLGlobals * G) GadgetSet *GadgetSetNew(PyMOLGlobals * G)
{ {
skipping to change at line 388 skipping to change at line 413
I->NColor = 0; I->NColor = 0;
I->NNormal = 0; I->NNormal = 0;
I->Coord = NULL; I->Coord = NULL;
I->Normal = NULL; I->Normal = NULL;
I->Color = NULL; I->Color = NULL;
I->Setting = NULL; I->Setting = NULL;
I->PickCGO = NULL; I->PickCGO = NULL;
I->StdCGO = NULL; I->StdCGO = NULL;
I->ShapeCGO = NULL; I->ShapeCGO = NULL;
I->PickShapeCGO = NULL; I->PickShapeCGO = NULL;
I->offsetPtOP = 0;
I->offsetPtOPick = 0;
return (I); return (I);
} }
/*========================================================================*/ /*========================================================================*/
void GadgetSetStrip(GadgetSet * I) void GadgetSetStrip(GadgetSet * I)
{ {
} }
/*========================================================================*/ /*========================================================================*/
void GadgetSet::fFree() void GadgetSet::fFree()
{ {
GadgetSet * I = this; GadgetSet * I = this;
if(I) { if(I) {
CGOFree(I->PickCGO); CGOFree(I->PickCGO);
CGOFree(I->PickShapeCGO); CGOFree(I->PickShapeCGO);
CGOFree(I->StdCGO); CGOFree(I->StdCGO);
CGOFree(I->ShapeCGO); CGOFree(I->ShapeCGO);
I->offsetPtOP = 0;
I->offsetPtOPick = 0;
VLAFreeP(I->Coord); VLAFreeP(I->Coord);
VLAFreeP(I->Normal); VLAFreeP(I->Normal);
VLAFreeP(I->Color); VLAFreeP(I->Color);
OOFreeP(I); OOFreeP(I);
} }
} }
 End of changes. 22 change blocks. 
25 lines changed or deleted 54 lines changed or added

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