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 |