int render(struct winampVisModule *this_mod) { displayScene(this_mod); SwapBuffers(hDC); // Die Puffer werden getauscht CalculateFrameRate(); if (done==TRUE) return 1; else return 0; }
//------------------------------------------------------------------------------ // //------------------------------------------------------------------------------ void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // // SCENE-LEVEL TEST // nvFX::PassInfo pr; int np = fx_TechScene->getNumPasses(); for(int i=0; i<np; i++) { nvFX::IPass* scenePass = fx_TechScene->getPass(i); // FIXME: viewport size depends on the render-target that was defined in nvFX // but I don't remember how to setup the size from nvFX when the target depends on the window of the sample // so, setting it by default to this window size is a temporary fix glViewport(0, 0, g_winSz[0], g_winSz[1]); scenePass->execute(&pr); switch(pr.renderingMode) { case nvFX::RENDER_SCENEGRAPH_SHADED: look_at(g_transfBlock1.m4_View, g_camera.curEyePos, g_camera.curFocusPos, up); g_transfBlock1.m4_Proj = g_cameraProj; g_transfBlock1.m4_ViewProj = g_transfBlock1.m4_Proj * g_transfBlock1.m4_View; g_transfBlock1.eyePos = g_camera.curEyePos; g_transfBlock1.m4_shadowMatrix = g_lightViewProjScaleBias; // needed here to find where we are in the shadowmap // copy the block to OGL if(fx_transfBlock1) { void* p; fx_transfBlock1->mapBuffer(&p); memcpy(p, &g_transfBlock1, sizeof(transfBlock1)); fx_transfBlock1->unmapBuffer(); } displayScene(pr); break; // NOTE: Let's assume for now that we do use RENDER_SCENEGRAPH_NOSHADING for the shadowmap view case nvFX::RENDER_SHADOWMAP: g_transfBlock1.m4_Proj = g_lightProjection; g_transfBlock1.m4_View = g_lightView; g_transfBlock1.m4_ViewProj = g_lightViewProj; g_transfBlock1.eyePos = g_lightPos; // useless for lightview rendering // copy the block to OGL if(fx_transfBlock1) { void* p; fx_transfBlock1->mapBuffer(&p); memcpy(p, &g_transfBlock1, sizeof(transfBlock1)); fx_transfBlock1->unmapBuffer(); } displayScene(pr); break; default: break; } } #ifdef NOGLUT SwapBuffers( g_hDC ); #else glutSwapBuffers(); #endif }
void drawModel (pScene sc) { pMesh mesh; pTransform view; pClip clip; ubyte sstatic; /* default */ mesh = cv.mesh[sc->idmesh]; view = sc->view; clip = sc->clip; if (ddebug) printf("\n-- redraw scene %d, mesh %d\n", sc->idwin, sc->idmesh); glDisable(GL_LIGHTING); /* draw clipping plane */ if (clip->active & C_ON) { drawClip(sc, clip, mesh, 0); glClipPlane(GL_CLIP_PLANE0, clip->eqn); glEnable(GL_CLIP_PLANE0); } else { glDisable(GL_CLIP_PLANE0); } /* draw object if static scene */ sstatic = view->mstate > 0 && clip->cliptr->mstate > 0; if (sstatic || sc->type & S_FOLLOW) { displayScene(sc, sc->mode, 0); if (sc->item & S_NUMP || sc->item & S_NUMF) listNum(sc, mesh); /* draw normals */ if (sc->type & S_NORMAL) { if (!sc->nlist) sc->nlist = drawNormals(mesh, sc); glCallList(sc->nlist); } /* draw data */ if (sstatic) displayData(sc, mesh); } else if (!(sc->item & S_BOX)) { drawBox(sc, mesh, 0); } /* draw ridges, corners, etc. */ if ((sc->item & S_GEOM) && sc->glist) { glDisable(GL_LIGHTING); if (!mesh->ne) glPointSize(1); else glPointSize(5); glDisable(GL_COLOR_MATERIAL); glCallList(sc->glist); } glDisable(GL_CLIP_PLANE0); if (clip->active & C_EDIT || sc->item & S_BOX) drawBox(sc, mesh, 0); if (sc->item & S_AXIS) drawAxis(sc, mesh->dim); if ((mesh->dim == 3 || sc->mode & S_ALTITUDE) && sc->item & S_GRID) drawBase(sc, mesh); if (sc->cube->active & C_ON) drawCube(sc, mesh); sstatic |= tiling; if (sstatic && clip->active & C_ON && clip->active & C_VOL) displayScene(sc, sc->mode, 1); if (sc->picklist && !(sc->isotyp & S_PARTICLE)) { glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glDisable(GL_POLYGON_OFFSET_FILL); glCallList(sc->picklist); glEnable(GL_POLYGON_OFFSET_FILL); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glDisable(GL_COLOR_MATERIAL); glDisable(GL_LIGHTING); } /* show path, if any */ if (sc->type & S_PATH && sc->path.tlist) glCallList(sc->path.tlist); }
//----------------------------------------------------------------------------- // display //----------------------------------------------------------------------------- void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); #if 0 glPushMatrix(); glTranslatef(-0.5, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 0, 1, 2, 3); glTranslatef(0, -1.1, 0.0); computeDualView(10, 11, 8, 9, 1.1, 0.0, 0.0); glPopMatrix(); glPushMatrix(); glTranslatef(0.6, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 0, 2, 1, 3); glTranslatef(0, -1.1, 0.0); computeDualView(4, 6, 5, 7, 1.1, 0.0, 0.0); glPopMatrix(); #else glPushMatrix(); glTranslatef(-0.5, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 0, 1, 2, 3); glTranslatef(0, -1.1, 0.0); computeDualView(0, 1, 2, 3, 1.1, 0.0, 0.0); glPopMatrix(); glPushMatrix(); glTranslatef(0.6, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 0, 2, 1, 3); glTranslatef(0, -1.1, 0.0); computeDualView(0, 2, 1, 3, 1.1, 0.0, 0.0); glPopMatrix(); #endif #if 1 #ifdef CURVED glPushMatrix(); glLoadIdentity(); glTranslatef(1.7, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 0, 1, 0, 2); glTranslatef(0, -1.1, 0.0); computeDualView(0, 1, 0, 2, 1.1, 0.0, 0.0); glPopMatrix(); #else glPushMatrix(); glLoadIdentity(); glTranslatef(1.7, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 5, 1, 0, 2); glTranslatef(0, -1.1, 0.0); computeDualView(5, 1, 0, 2, 1.1, 0.0, 0.0); glTranslatef(0, -1.1, 0.0); displayScene(0.5f, 0.5f, 0.2f, 0, 1, 2, 8); glTranslatef(0, -1.1, 0.0); computeDualView(0, 1, 2, 8, 1.1, 0.0, 0.0); glPopMatrix(); #endif #ifdef CURVED glPushMatrix(); glLoadIdentity(); glTranslatef(2.8, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 0, 1, 1, 3); glTranslatef(0, -1.1, 0.0); computeDualView(0, 1, 1, 3, 1.1, 0.0, 0.0); glPopMatrix(); #else glPushMatrix(); glLoadIdentity(); glTranslatef(2.8, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 4, 0, 1, 3); glTranslatef(0, -1.1, 0.0); computeDualView(4, 0, 1, 3, 1.1, 0.0, 0.0); glTranslatef(0, -1.1, 0.0); displayScene(0.5f, 0.5f, 0.2f, 0, 1, 3, 9); glTranslatef(0, -1.1, 0.0); computeDualView(0, 1, 3, 9, 1.1, 0.0, 0.0); glPopMatrix(); #endif #ifdef CURVED glPushMatrix(); glLoadIdentity(); glTranslatef(3.9, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 0, 2, 2, 3); glTranslatef(0, -1.1, 0.0); computeDualView(0, 2, 2, 3, 1.1, 0.0, 0.0); glPopMatrix(); #else glPushMatrix(); glLoadIdentity(); glTranslatef(3.9, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 0, 2, 3, 7); glTranslatef(0, -1.1, 0.0); computeDualView(0, 2, 3, 7, 1.1, 0.0, 0.0); glTranslatef(0, -1.1, 0.0); displayScene(0.5f, 0.5f, 0.2f, 10, 0, 2, 3); glTranslatef(0, -1.1, 0.0); computeDualView(10, 0, 2, 3, 1.1, 0.0, 0.0); glPopMatrix(); #endif #ifdef CURVED glPushMatrix(); glLoadIdentity(); glTranslatef(5.0, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 1, 3, 2, 3); glTranslatef(0, -1.1, 0.0); computeDualView(1, 3, 2, 3, 1.1, 0.0, 0.0); glPopMatrix(); #else glPushMatrix(); glLoadIdentity(); glTranslatef(5.0, 0.5, 0.0); displayScene(0.5f, 0.5f, 0.2f, 1, 3, 2, 6); glTranslatef(0, -1.1, 0.0); computeDualView(1, 3, 2, 6, 1.1, 0.0, 0.0); glTranslatef(0, -1.1, 0.0); displayScene(0.5f, 0.5f, 0.2f, 1, 11, 2, 3); glTranslatef(0, -1.1, 0.0); computeDualView(1, 11, 2, 3, 1.1, 0.0, 0.0); glPopMatrix(); #endif #endif #if 0 if (!displayCount) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if (displayV) displayDual(v_x[0], v_y[0], v_x[1], v_y[1], 0.4f, 0.4f, 0.5f); for (int i=0; i<NLINES; i++) if (displayL[i]) displayDual(lines[i][0], lines[i][1], lines[i][2], lines[i][3], colors[i][0], colors[i][1], colors[i][2]); displayBox (); glDisable(GL_BLEND); } else { computeDualView(0, 1, 2, 3, 1.1, 0.0, 0.0); computeDualView(0, 2, 1, 3, 1.1, 0.0, 0.0); //computeDualView(4, 1, 5, 2, 1.1, 0.0, 0.0); computeDualView(0, 1, 1, 3, 1.1, 0.0, 0.0); computeDualView(0, 2, 2, 3, 1.1, 0.0, 0.0); computeDualView(1, 3, 2, 3, 1.1, 0.0, 0.0); } // if (displayL[0]) displayDual(0.0f, 0.25f, 0.5f, 0.25f, 1.0f, 0.0f, 0.0f); // if (displayL[1]) displayDual(0.5f, 0.75f, 1.0f, 0.75f, 0.0f, 1.0f, 0.0f); // if (displayL[2]) displayDual(0.5f, 0.0f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f); glPopMatrix(); #endif glFlush(); glutSwapBuffers(); glFinish(); }