Пример #1
0
static void
RandomPrimitive(void)
{
   int i;
   int len = MinVertexCount + RandomInt(MaxVertexCount - MinVertexCount);

   Vprim = RandomInt(10);

   glBegin(Vprim);
   Vbuffer[Vcount].type = BEGIN;
   Vbuffer[Vcount].v[0] = Vprim;
   Vcount++;

   for (i = 0; i < len; i++) {
      Vbuffer[Vcount].v[0] = RandomFloat(-3, 3);
      Vbuffer[Vcount].v[1] = RandomFloat(-3, 3);
      Vbuffer[Vcount].v[2] = RandomFloat(-3, 3);
      Vbuffer[Vcount].v[3] = RandomFloat(-3, 3);
      int k = RandomInt(9);
      switch (k) {
      case 0:
         glVertex2fv(Vbuffer[Vcount].v);
         Vbuffer[Vcount].type = VERTEX2;
         break;
      case 1:
         glVertex3fv(Vbuffer[Vcount].v);
         Vbuffer[Vcount].type = VERTEX3;
         break;
      case 2:
         glVertex4fv(Vbuffer[Vcount].v);
         Vbuffer[Vcount].type = VERTEX4;
         break;
      case 3:
         glColor3fv(Vbuffer[Vcount].v);
         Vbuffer[Vcount].type = COLOR3;
         break;
      case 4:
         glColor4fv(Vbuffer[Vcount].v);
         Vbuffer[Vcount].type = COLOR4;
         break;
      case 5:
         glTexCoord2fv(Vbuffer[Vcount].v);
         Vbuffer[Vcount].type = TEX2;
         break;
      case 6:
         glTexCoord3fv(Vbuffer[Vcount].v);
         Vbuffer[Vcount].type = TEX3;
         break;
      case 7:
         glTexCoord4fv(Vbuffer[Vcount].v);
         Vbuffer[Vcount].type = TEX4;
         break;
      case 8:
         glSecondaryColor3fv(Vbuffer[Vcount].v);
         Vbuffer[Vcount].type = SECCOLOR3;
         break;
      case 9:
         glNormal3fv(Vbuffer[Vcount].v);
         Vbuffer[Vcount].type = NORMAL3;
         break;
      default:
         abort();
      }
      Vcount++;

      if (Vcount >= BufferSize - 2) {
         /* reset */
         Vcount = 0;
      }
   }

   Vbuffer[Vcount++].type = END;

   glEnd();
}
Пример #2
0
enum piglit_result
piglit_display(void)
{
    GLboolean pass = GL_TRUE;
    float array[] = {
        10, 10,	   1, 0, 0,
        27, 10,	   1, 0, 0,
        10, 30,	   1, 0, 0,

        30, 10,	   0, 1, 0,
        47, 10,	   0, 1, 0,
        30, 30,	   0, 1, 0,

        50, 10,	   0, 0, 1,
        67, 10,	   0, 0, 1,
        50, 30,	   0, 0, 1,

        70, 10,	   1, 0, 1,
        87, 10,	   1, 0, 1,
        70, 30,	   1, 0, 1
    };
    float seccol[] = {
        0.2, 0.2, 0.2,
        0.2, 0.2, 0.2,
        0.2, 0.2, 0.2,

        0.2, 0.2, 0.2,
        0.2, 0.2, 0.2,
        0.2, 0.2, 0.2,

        0.2, 0.2, 0.2,
        0.2, 0.2, 0.2,
        0.2, 0.2, 0.2,

        0.2, 0.2, 0.2,
        0.2, 0.2, 0.2,
        0.2, 0.2, 0.2,
    };
    float c0[] = {1, 0.2, 0.2};
    float c1[] = {0.2, 1, 0.2};
    float c2[] = {0.2, 0.2, 1};
    float c3[] = {1, 0.2, 1};
    short indices[] = {
        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
    };
    int i, j;

    piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);

    printf("From bottom to top:\n");

    glEnable(GL_COLOR_SUM);
    glLoadIdentity();

    /* State change: Vertex arrays. */
    glVertexPointer(2, GL_FLOAT, 20, array);
    glColorPointer(3, GL_FLOAT, 20, array + 2);
    glSecondaryColorPointer(3, GL_FLOAT, 0, seccol);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    glEnableClientState(GL_SECONDARY_COLOR_ARRAY);

    /* The vertex array state should be preserved after glClear. */
    glClear(GL_COLOR_BUFFER_BIT);

    /* Draw. */
    printf("DrawElements\n");
    for (i = 0; i < 4; i++)
        glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, indices + i*3);

    /* State change: Constant buffer. */
    glTranslatef(0, 30, 0);

    rotate_colors(array);

    /* Draw. */
    printf("DrawArrays\n");
    for (i = 0; i < 4; i++)
        glDrawArrays(GL_TRIANGLES, i*3, 3);

    /* State change: Vertex arrays. */
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);
    glDisableClientState(GL_SECONDARY_COLOR_ARRAY);

    /* State change: Constant buffer. */
    glTranslatef(0, 30, 0);

    rotate_colors(array);

    /* Draw. */
    printf("Begin/End\n");
    for (i = 0; i < 4; i++) {
        glBegin(GL_TRIANGLES);
        for (j = 0; j < 3; j++) {
            glColor3fv(array + i*15 + j*5 + 2);
            glSecondaryColor3fv(seccol);
            glVertex2fv(array + i*15 + j*5);
        }
        glEnd();
    }

    /* State change: Constant buffer. */
    glTranslatef(0, 30, 0);

    rotate_colors(array);

    /* Create display lists. */
    for (i = 0; i < 4; i++) {
        glNewList(i+1, GL_COMPILE);
        glBegin(GL_TRIANGLES);
        for (j = 0; j < 3; j++) {
            glColor3fv(array + i*15 + j*5 + 2);
            glSecondaryColor3fv(seccol);
            glVertex2fv(array + i*15 + j*5);
        }
        glEnd();
        glEndList();
    }

    /* Draw. */
    printf("CallList\n");
    for (i = 0; i < 4; i++) {
        glCallList(i+1);
    }

    pass = pass && piglit_probe_pixel_rgb(15, 15, c0);
    pass = pass && piglit_probe_pixel_rgb(35, 15, c1);
    pass = pass && piglit_probe_pixel_rgb(55, 15, c2);
    pass = pass && piglit_probe_pixel_rgb(75, 15, c3);

    pass = pass && piglit_probe_pixel_rgb(15, 45, c1);
    pass = pass && piglit_probe_pixel_rgb(35, 45, c2);
    pass = pass && piglit_probe_pixel_rgb(55, 45, c3);
    pass = pass && piglit_probe_pixel_rgb(75, 45, c0);

    pass = pass && piglit_probe_pixel_rgb(15, 75, c2);
    pass = pass && piglit_probe_pixel_rgb(35, 75, c3);
    pass = pass && piglit_probe_pixel_rgb(55, 75, c0);
    pass = pass && piglit_probe_pixel_rgb(75, 75, c1);

    pass = pass && piglit_probe_pixel_rgb(15, 105, c3);
    pass = pass && piglit_probe_pixel_rgb(35, 105, c0);
    pass = pass && piglit_probe_pixel_rgb(55, 105, c1);
    pass = pass && piglit_probe_pixel_rgb(75, 105, c2);

    glutSwapBuffers();
    return pass ? PIGLIT_PASS : PIGLIT_FAIL;
}
Пример #3
0
void ParticleRenderer::display(DisplayMode mode /* = PARTICLE_POINTS */)
{
    switch (mode)
    {
    case PARTICLE_POINTS:
        glColor3f(1, 1, 1);
        glPointSize(m_pointSize);
        _drawPoints();
        break;
    case PARTICLE_SPRITES:
    default:
        {
            // setup point sprites
            glEnable(GL_POINT_SPRITE_ARB);
            glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
            glEnable(GL_VERTEX_PROGRAM_POINT_SIZE_NV);
            glPointSize(m_spriteSize);
            glBlendFunc(GL_SRC_ALPHA, GL_ONE);
            glEnable(GL_BLEND);
            glDepthMask(GL_FALSE);

            glUseProgram(m_program);
            GLuint texLoc = glGetUniformLocation(m_program, "splatTexture");
            glUniform1i(texLoc, 0);

            glActiveTextureARB(GL_TEXTURE0_ARB);
            glBindTexture(GL_TEXTURE_2D, m_texture);

            glColor3f(1, 1, 1);
            glSecondaryColor3fv(m_baseColor);
            
            _drawPoints();

            glUseProgram(0);

            glDisable(GL_POINT_SPRITE_ARB);
            glDisable(GL_BLEND);
            glDepthMask(GL_TRUE);
        }

        break;
    case PARTICLE_SPRITES_COLOR:
        {
            // setup point sprites
            glEnable(GL_POINT_SPRITE_ARB);
            glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
            glEnable(GL_VERTEX_PROGRAM_POINT_SIZE_NV);
            glPointSize(m_spriteSize);
            glBlendFunc(GL_SRC_ALPHA, GL_ONE);
            glEnable(GL_BLEND);
            glDepthMask(GL_FALSE);

            glUseProgram(m_program);
            GLuint texLoc = glGetUniformLocation(m_program, "splatTexture");
            glUniform1i(texLoc, 0);

            glActiveTextureARB(GL_TEXTURE0_ARB);
            glBindTexture(GL_TEXTURE_2D, m_texture);

            glColor3f(1, 1, 1);
            glSecondaryColor3fv(m_baseColor);
            
            _drawPoints(true);

            glUseProgram(0);

            glDisable(GL_POINT_SPRITE_ARB);
            glDisable(GL_BLEND);
            glDepthMask(GL_TRUE);
        }

        break;
    }

    CUT_CHECK_ERROR_GL();
}
Пример #4
0
void ParticleRenderer::display()
{	
	if (b_renderSkyBox){
		drawSkyBox();
	} 
	if (b_renderFloor){
		drawFloor();
	}
	
    switch (_displayMode)
    { 
		case PARTICLE_POINTS:
		{
		    glColor3f(1, 1, 1);
		    glPointSize(1.0f);
		    _drawPoints();
		}
        break;
		case PARTICLE_FIRE:
		{
			glPointSize(4.0f);
			float m_baseColor[4] = { 0.6f, 0.1f, 0.0f, 0.95f};
			glColor4f(m_baseColor[0],m_baseColor[1],m_baseColor[2],m_baseColor[3]);
			
			glEnable (GL_POINT_SMOOTH);
			glHint (GL_POINT_SMOOTH_HINT, GL_NICEST);
			glAlphaFunc(GL_GREATER, 0.1);
			glEnable(GL_ALPHA_TEST);  	
			glBlendFunc(GL_SRC_ALPHA, GL_ONE);
			glEnable(GL_BLEND);	
			glDepthMask(GL_FALSE); // Disable depth buffer updating! (Integral to transparency!)
			_drawPoints(false);
			glDepthMask(GL_TRUE);
			glDisable(GL_BLEND);
			glDisable(GL_ALPHA_TEST);
		}
		break;
		case SPRITE_COSMOS:
		{			
		    glEnable(GL_POINT_SPRITE_ARB);	// setup point sprites		    
		    glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
		    glEnable(GL_VERTEX_PROGRAM_POINT_SIZE_NV);
		    glBlendFunc(GL_SRC_ALPHA, GL_ONE);
		    glEnable(GL_BLEND);
		    glDepthMask(GL_FALSE);
		    glUseProgram(m_program_cosmos);
		    
		    GLuint texLoc = glGetUniformLocation(m_program_cosmos, "splatTexture");
		    
		    glUniform1i(texLoc, 0);
		    
		    glActiveTextureARB(GL_TEXTURE0_ARB);
		    
		    glBindTexture(GL_TEXTURE_2D, m_texture);
		    glColor3f(1, 1, 1);
		    glPointSize(m_particleRadius*2.0f);
		    //float m_baseColor[4] = {0.6f, 0.1f, 0.0f, 0.95f};
		    float m_baseColor[4] = { 1.0f, 0.6f, 0.3f, 0.20f};	// nbody fp32 color (yellow)
		    //float m_baseColor[4] = { 0.4f, 0.8f, 0.1f, 1.0f}; // nbody fp64 color (green)
		    glSecondaryColor3fv(m_baseColor);        
		    _drawPoints();        
		    glUseProgram(0);
		    glDisable(GL_POINT_SPRITE_ARB);
		    glDisable(GL_BLEND);
		    glDepthMask(GL_TRUE);
		  }    	
		  break;
		default: 
		case PARTICLE_SPHERES:
		{		
		    glEnable(GL_POINT_SPRITE_ARB);
		    glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
		    glEnable(GL_VERTEX_PROGRAM_POINT_SIZE_NV);
		    glDepthMask(GL_TRUE);
		    glEnable(GL_DEPTH_TEST);
		    glUseProgram(m_program_sphere);
		    glUniform1f( glGetUniformLocation(m_program_sphere, "pointScale"), m_window_h / tanf(m_fov*0.5f*(float)M_PI/180.0f) );
		    glUniform1f( glGetUniformLocation(m_program_sphere, "pointRadius"), m_particleRadius );
		    glColor3f(1, 1, 1);
		    _drawPoints();
		    glUseProgram(0);
		    glDisable(GL_POINT_SPRITE_ARB);
		}
		break;
    }
}