def makeHiQualityScreen(quality, mol): # XXX This function does not currently work # For some reason when using mainCanvas as a texture everything is really dark # although if you look closely enough you can see the antialiased version curres = mainCanvas.GetSoftRes() mainCanvas.RedirectToMemory() # Render into a higher quality buffer, # resample into smaller main window mainCanvas.SetRes(curres*quality / 100) if not mainCanvas.SetAsOutput(): # something's wrong - do a normal screen mainCanvas.RedirectToVideo() mainCanvas.SetAsOutput() drawFrame(mol) return HSratio = float(mainCanvas.GetSoftRes()) / mainCanvas.GetHardRes() drawFrame(mol) mainCanvas.RedirectToVideo() mainCanvas.SetAsOutput() glew.glActiveTextureARB(glew.GL_TEXTURE1_ARB) glDisable(GL_TEXTURE_2D) glew.glActiveTextureARB(glew.GL_TEXTURE0_ARB) mainCanvas.SetAsTexture() glDisable(glew.GL_FRAGMENT_PROGRAM_ARB) glDisable(glew.GL_VERTEX_PROGRAM_ARB) setProjection(mainCanvas.GetSoftRes()) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glEnable(GL_TEXTURE_2D) glDisable(GL_DEPTH_TEST) glColor3f(1.,1.,1.) z=-45. glBegin(GL_QUADS) glTexCoord2f(0,0); glVertex3f(-1,-1, z) glTexCoord2f(HSratio,0); glVertex3f(+1,-1, z) glTexCoord2f(HSratio,HSratio); glVertex3f(+1,+1, z) glTexCoord2f(0,HSratio); glVertex3f(-1,+1, z) glEnd() glEnable(glew.GL_FRAGMENT_PROGRAM_ARB) glEnable(glew.GL_VERTEX_PROGRAM_ARB) glEnable(GL_DEPTH_TEST)
def drawFrame(mol): cgSettings.MakeShaders() if (mol.DoingAO()): mol.PrepareAOstep(1, shadowmap) while not mol.DecentAO(): mol.PrepareAOstep(1, shadowmap) mainCanvas.SetAsOutput() if cgSettings.doingAlphaSnapshot: glClearColor( cgSettings.P_halo_col, cgSettings.P_halo_col, cgSettings.P_halo_col, 0.0) else: glClearColor( cgSettings.P_bg_color_R, cgSettings.P_bg_color_G, cgSettings.P_bg_color_B, 0.0) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_MODELVIEW) glLoadIdentity() if cgSettings.P_sem_effect: lightDir = (0,0,1) #else: lightDir= getDirFromTrackball(mol) #(0,0.8,0.6) else: lightDir= (0.,0.8,0.6) #else: lightDir= (1,1,1) setLightDir(lightDir) gluLookAt(0,0,-40, 0,0,0, 0,1,0) #if (MovingLightMode): drawLightDir() glColor3f(1,1,1) setProjection(mainCanvas.GetSoftRes()) if cgSettings.P_use_shadowmap(): shadowmap.computeAsTexture(getGlLightPos() , cgSettings.do_use_doubleshadow(), shadowmapCanvas) cgSettings.BindShaders() glEnable(GL_TEXTURE_2D) glew.glActiveTextureARB(glew.GL_TEXTURE1_ARB) shadowmapCanvas.SetAsTexture() mol.Draw() glDisable(glew.GL_VERTEX_PROGRAM_ARB) glDisable(glew.GL_FRAGMENT_PROGRAM_ARB) glDisable(GL_BLEND) if (cgSettings.UseHalo() > 0): shadowmap.prepareDepthTextureForCurrentViewpoint() mol.DrawHalos() # Draw axes if draw_axes: px, py, pz = mol.pos r = mol.r orien = mol.orien glPushMatrix() glScalef(1./r,1./r,1./r) glMultMatrixd((glTrackball.quat * orien).asRotation()) glTranslatef(-px, -py, -pz) glDisable(GL_LIGHTING) glBegin(GL_LINES) glColor3f(0.,0.,0.) glVertex3f(px, py, pz) glColor3f(0.,1.,0.) glVertex3f(px+r, py, pz) glColor3f(0.,0.,0.) glVertex3f(px, py, pz) glColor3f(1.,0.,0.) glVertex3f(px, py+r, pz) glColor3f(0.,0.,0.) glVertex3f(px, py, pz) glColor3f(0.,0.,1.) glVertex3f(px, py, pz+r) glEnd() glPopMatrix()