Exemple #1
0
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
}
Exemple #3
0
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();
}