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(); }
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; }
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(); }
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; } }