GLvoid NEHE17::DrawGLScene(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glBindTexture(GL_TEXTURE_2D, texture[1]); glTranslatef(0.0f,0.0f,-5.0f); glRotatef(45.0f,0.0f,0.0f,1.0f); glRotatef(cnt1*30.0f,1.0f,1.0f,0.0f); glDisable(GL_BLEND); glColor3f(1.0f,1.0f,1.0f); glBegin(GL_QUADS); glTexCoord2d(0.0f,0.0f); glVertex2f(-1.0f, 1.0f); glTexCoord2d(1.0f,0.0f); glVertex2f( 1.0f, 1.0f); glTexCoord2d(1.0f,1.0f); glVertex2f( 1.0f,-1.0f); glTexCoord2d(0.0f,1.0f); glVertex2f(-1.0f,-1.0f); glEnd(); glRotatef(90.0f,1.0f,1.0f,0.0f); glBegin(GL_QUADS); glTexCoord2d(0.0f,0.0f); glVertex2f(-1.0f, 1.0f); glTexCoord2d(1.0f,0.0f); glVertex2f( 1.0f, 1.0f); glTexCoord2d(1.0f,1.0f); glVertex2f( 1.0f,-1.0f); glTexCoord2d(0.0f,1.0f); glVertex2f(-1.0f,-1.0f); glEnd(); glEnable(GL_BLEND); glLoadIdentity(); glColor3f(1.0f*float(cos(cnt1)),1.0f*float(sin(cnt2)),1.0f-0.5f*float(cos(cnt1+cnt2))); glPrint(int((280+250*cos(cnt1))),int(235+200*sin(cnt2)),"NeHe",0); glColor3f(1.0f*float(sin(cnt2)),1.0f-0.5f*float(cos(cnt1+cnt2)),1.0f*float(cos(cnt1))); glPrint(int((280+230*cos(cnt2))),int(235+200*sin(cnt1)),"OpenGL",1); glColor3f(0.0f,0.0f,1.0f); glPrint(int(240+200*cos((cnt2+cnt1)/5)),2,"Andong Li",0); glColor3f(1.0f,1.0f,1.0f); glPrint(int(242+200*cos((cnt2+cnt1)/5)),2,"Andong Li",0); //draw FPS text glDisable(GL_TEXTURE_2D); glLoadIdentity (); glTranslatef(0.0f,0.0f,-1.0f); glColor3f(0.8f,0.8f,0.8f);//set text color computeFPS(); Utils::drawText(-0.54f,-0.4f, GLUT_BITMAP_HELVETICA_12, FPSstr); glEnable(GL_TEXTURE_2D); glutSwapBuffers(); cnt1 += 0.01f; cnt2 += 0.0081f; }
// static method used for glut callbacks static void Draw( void ) { cu::cutStartTimer(timer); glClearColor( 0.0, 0.0, 0.0, 1.0 ); glClear( GL_COLOR_BUFFER_BIT ); VHFluidSolver* fluidSolver = VHFluidSolver::solverList[0]; if (pause == 0) fluidSolver->solveFluid(); //glDisable(GL_DEPTH_TEST); fluidSolver->drawFluid(0,0,0,0,0,0); //glEnable(GL_DEPTH_TEST); glutSwapBuffers(); //glutReportErrors(); cu::cutStopTimer(timer); computeFPS(); }
void onIdle () /* pre: glut window is not doing anything else post: scene is updated and re-rendered if necessary */ { static int oldTime = 0; if (isAnimating) { int currentTime = glutGet((GLenum)(GLUT_ELAPSED_TIME)); /* Ensures fairly constant framerate */ if (currentTime - oldTime > ANIMATION_DELAY) { /* animate the scene */ Animate(); oldTime = currentTime; /* compute the frame rate */ computeFPS(); /* notify window it has to be repainted */ glutPostRedisplay(); } idle_tasks(); } }
void displayFunc(void) { sdkStartTimer(&timer); TColor *d_dst = NULL; size_t num_bytes; if (frameCounter++ == 0) { sdkResetTimer(&timer); } // DEPRECATED: checkCudaErrors(cudaGLMapBufferObject((void**)&d_dst, gl_PBO)); checkCudaErrors(cudaGraphicsMapResources(1, &cuda_pbo_resource, 0)); getLastCudaError("cudaGraphicsMapResources failed"); checkCudaErrors(cudaGraphicsResourceGetMappedPointer((void **)&d_dst, &num_bytes, cuda_pbo_resource)); getLastCudaError("cudaGraphicsResourceGetMappedPointer failed"); checkCudaErrors(CUDA_Bind2TextureArray()); runImageFilters(d_dst); checkCudaErrors(CUDA_UnbindTexture()); // DEPRECATED: checkCudaErrors(cudaGLUnmapBufferObject(gl_PBO)); checkCudaErrors(cudaGraphicsUnmapResources(1, &cuda_pbo_resource, 0)); // Common display code path { glClear(GL_COLOR_BUFFER_BIT); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, imageW, imageH, GL_RGBA, GL_UNSIGNED_BYTE, BUFFER_DATA(0)); glBegin(GL_TRIANGLES); glTexCoord2f(0, 0); glVertex2f(-1, -1); glTexCoord2f(2, 0); glVertex2f(+3, -1); glTexCoord2f(0, 2); glVertex2f(-1, +3); glEnd(); glFinish(); } if (frameCounter == frameN) { frameCounter = 0; if (g_FPS) { printf("FPS: %3.1f\n", frameN / (sdkGetTimerValue(&timer) * 0.001)); g_FPS = false; } } glutSwapBuffers(); glutReportErrors(); sdkStopTimer(&timer); computeFPS(); }
void fpsDisplay() { gettimeofday( &start, NULL ); display(); gettimeofday( &end, NULL ); computeFPS(); }
// This is the normal display path void display(void) { cutilCheckError(cutStartTimer(timer)); // Sobel operation Pixel *data = NULL; // map PBO to get CUDA device pointer cutilSafeCall(cudaGraphicsMapResources(1, &cuda_pbo_resource, 0)); size_t num_bytes; cutilSafeCall(cudaGraphicsResourceGetMappedPointer((void **)&data, &num_bytes, cuda_pbo_resource)); //printf("CUDA mapped PBO: May access %ld bytes\n", num_bytes); sobelFilter(data, imWidth, imHeight, g_SobelDisplayMode, imageScale, blockOp, pointOp ); cutilSafeCall(cudaGraphicsUnmapResources(1, &cuda_pbo_resource, 0)); glClear(GL_COLOR_BUFFER_BIT); glBindTexture(GL_TEXTURE_2D, texid); glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo_buffer); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, imWidth, imHeight, GL_LUMINANCE, GL_UNSIGNED_BYTE, OFFSET(0)); glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glBegin(GL_QUADS); glVertex2f(0, 0); glTexCoord2f(0, 0); glVertex2f(0, 1); glTexCoord2f(1, 0); glVertex2f(1, 1); glTexCoord2f(1, 1); glVertex2f(1, 0); glTexCoord2f(0, 1); glEnd(); glBindTexture(GL_TEXTURE_2D, 0); if (g_CheckRender && g_CheckRender->IsQAReadback() && g_Verify) { printf("> (Frame %d) readback BackBuffer\n", frameCount); g_CheckRender->readback( imWidth, imHeight ); g_CheckRender->savePPM ( sOriginal_ppm[g_Index], true, NULL ); if (!g_CheckRender->PPMvsPPM(sOriginal_ppm[g_Index], sReference_ppm[g_Index], MAX_EPSILON_ERROR, 0.15f)) { g_TotalErrors++; } g_Verify = false; } glutSwapBuffers(); cutilCheckError(cutStopTimer(timer)); computeFPS(); glutPostRedisplay(); }
void fpsDisplay() { cutilCheckError(cutStartTimer(timer)); display(); cutilCheckError(cutStopTimer(timer)); computeFPS(); }
// display results using OpenGL void display() { sdkStartTimer(&timer); // execute filter, writing results to pbo unsigned int *dResult; //DEPRECATED: checkCudaErrors( cudaGLMapBufferObject((void**)&d_result, pbo) ); checkCudaErrors(cudaGraphicsMapResources(1, &cuda_pbo_resource, 0)); size_t num_bytes; checkCudaErrors(cudaGraphicsResourceGetMappedPointer((void **)&dResult, &num_bytes, cuda_pbo_resource)); bilateralFilterRGBA(dResult, width, height, euclidean_delta, filter_radius, iterations, kernel_timer); // DEPRECATED: checkCudaErrors(cudaGLUnmapBufferObject(pbo)); checkCudaErrors(cudaGraphicsUnmapResources(1, &cuda_pbo_resource, 0)); // Common display code path { glClear(GL_COLOR_BUFFER_BIT); // load texture from pbo glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); glBindTexture(GL_TEXTURE_2D, texid); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, 0); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); // fragment program is required to display floating point texture glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader); glEnable(GL_FRAGMENT_PROGRAM_ARB); glDisable(GL_DEPTH_TEST); glBegin(GL_QUADS); { glTexCoord2f(0, 0); glVertex2f(0, 0); glTexCoord2f(1, 0); glVertex2f(1, 0); glTexCoord2f(1, 1); glVertex2f(1, 1); glTexCoord2f(0, 1); glVertex2f(0, 1); } glEnd(); glBindTexture(GL_TEXTURE_TYPE, 0); glDisable(GL_FRAGMENT_PROGRAM_ARB); } glutSwapBuffers(); glutReportErrors(); sdkStopTimer(&timer); computeFPS(); }
void idle() { // Trigger the next timestep if the time since the last step exceeds the threshold const scalar& current_time = timingutils::seconds(); if( !g_paused && current_time-g_last_time >= g_sec_per_frame ) { computeFPS(); g_last_time = current_time; stepSystem(); glutPostRedisplay(); } assert( renderingutils::checkGLErrors() ); }
// This is the normal display path void display(void) { sdkStartTimer(&timer); // Sobel operation Pixel *data = NULL; // map PBO to get CUDA device pointer checkCudaErrors(cudaGraphicsMapResources(1, &cuda_pbo_resource, 0)); size_t num_bytes; checkCudaErrors(cudaGraphicsResourceGetMappedPointer((void **)&data, &num_bytes, cuda_pbo_resource)); //printf("CUDA mapped PBO: May access %ld bytes\n", num_bytes); sobelFilter(data, imWidth, imHeight, g_SobelDisplayMode, imageScale); checkCudaErrors(cudaGraphicsUnmapResources(1, &cuda_pbo_resource, 0)); glClear(GL_COLOR_BUFFER_BIT); glBindTexture(GL_TEXTURE_2D, texid); glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo_buffer); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, imWidth, imHeight, GL_LUMINANCE, GL_UNSIGNED_BYTE, OFFSET(0)); glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glBegin(GL_QUADS); glVertex2f(0, 0); glTexCoord2f(0, 0); glVertex2f(0, 1); glTexCoord2f(1, 0); glVertex2f(1, 1); glTexCoord2f(1, 1); glVertex2f(1, 0); glTexCoord2f(0, 1); glEnd(); glBindTexture(GL_TEXTURE_2D, 0); glutSwapBuffers(); sdkStopTimer(&timer); computeFPS(); }
//////////////////////////////////////////////////////////////////////////////// //! Display callback //////////////////////////////////////////////////////////////////////////////// void display() { sdkStartTimer(&timer); // run CUDA kernel to generate vertex positions runCuda(&cuda_vbo_resource); //簡易ライトセット glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, gkLightPos); glLightfv(GL_LIGHT0, GL_DIFFUSE, gkLightDiff); // glLightfv(GL_LIGHT0, GL_AMBIENT, gkLightAmb); glEnable(GL_LIGHT1); glLightfv(GL_LIGHT1, GL_POSITION, gkLightPos2); glLightfv(GL_LIGHT1, GL_DIFFUSE, gkLightDiff2); //Zバッファ有効 glEnable(GL_DEPTH_TEST); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // set view matrix glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, translate_z); glRotatef(rotate_x, 1.0, 0.0, 0.0); glRotatef(rotate_y, 0.0, 1.0, 0.0); // Earth // glMaterialfv(GL_FRONT, GL_DIFFUSE, gkMaterial); glutSolidSphere(50.0 * h_axis_radius, 20, 20); glDisable(GL_LIGHTING); // render from the vbo glBindBuffer(GL_ARRAY_BUFFER, vbo); glVertexPointer(4, GL_FLOAT, 0, 0); glEnableClientState(GL_VERTEX_ARRAY); glColor3f(1.0, 1.0, 1.0); glDrawArrays(GL_POINTS, 0, mesh_width * mesh_height); glDisableClientState(GL_VERTEX_ARRAY); glutSwapBuffers(); g_fAnim += 0.01f; sdkStopTimer(&timer); computeFPS(); }
// display results using OpenGL void display() { cutilCheckError(cutStartTimer(timer)); // execute filter, writing results to pbo unsigned int *d_result; cutilSafeCall(cudaGLMapBufferObject((void**)&d_result, pbo)); gaussianFilterRGBA(d_img, d_result, d_temp, width, height, sigma, order, nthreads); cutilSafeCall(cudaGLUnmapBufferObject(pbo)); // load texture from pbo glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); glBindTexture(GL_TEXTURE_2D, texid); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, 0); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); // display results glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glDisable(GL_DEPTH_TEST); glBegin(GL_QUADS); glTexCoord2f(0, 1); glVertex2f(0, 0); glTexCoord2f(1, 1); glVertex2f(1, 0); glTexCoord2f(1, 0); glVertex2f(1, 1); glTexCoord2f(0, 0); glVertex2f(0, 1); glEnd(); glDisable(GL_TEXTURE_2D); if (g_CheckRender && g_CheckRender->IsQAReadback() && g_Verify) { // readback for QA testing printf("> (Frame %d) Readback BackBuffer\n", frameCount); g_CheckRender->readback( width, height ); g_CheckRender->savePPM(sOriginal[g_Index], true, NULL); if (!g_CheckRender->PPMvsPPM(sOriginal[g_Index], sReference[g_Index], MAX_EPSILON_ERROR, 0.50f )) { g_TotalErrors++; } g_Verify = false; } glutSwapBuffers(); cutilCheckError(cutStopTimer(timer)); computeFPS(); }
//////////////////////////////////////////////////////////////////////////////// //! Display callback //////////////////////////////////////////////////////////////////////////////// void display() { cutilCheckError(cutStartTimer(timer)); // run CUDA kernel to generate vertex positions runCuda(vbo); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // set view matrix glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, translate_z); glRotatef(rotate_x, 1.0, 0.0, 0.0); glRotatef(rotate_y, 0.0, 1.0, 0.0); // render from the vbo glBindBuffer(GL_ARRAY_BUFFER, vbo); glVertexPointer(4, GL_FLOAT, 0, 0); glEnableClientState(GL_VERTEX_ARRAY); glColor3f(1.0, 0.0, 0.0); glDrawArrays(GL_POINTS, 0, mesh_width * mesh_height); glDisableClientState(GL_VERTEX_ARRAY); if (g_CheckRender && g_CheckRender->IsQAReadback() && g_Verify) { // readback for QA testing printf("> (Frame %d) Readback BackBuffer\n", frameCount); g_CheckRender->readback( window_width, window_height ); g_CheckRender->savePPM(sOriginal[g_Index], true, NULL); if (!g_CheckRender->PPMvsPPM(sOriginal[g_Index], sReference[g_Index], MAX_EPSILON_ERROR, 0.15f)) { g_TotalErrors++; } else { printf( "TEST PASSED\n" ); } g_Verify = false; } glutSwapBuffers(); glutPostRedisplay(); anim += 0.01; cutilCheckError(cutStopTimer(timer)); computeFPS(); }
void idle (void) { dset.currentTime = glutGet (GLUT_ELAPSED_TIME); /* Thread is waiting -> calculation done in the backbuffer */ if (threadRunning == 0) { pthread_mutex_lock (&mt); frontBuffer = 1 - frontBuffer; /* Swap the buffers */ threadRunning = 1; /* Relaunch thread to compute next attractor in the series */ pthread_mutex_unlock (&mt); centerDisplay (); /* We want the attractor to keep centered */ } animateAttractor (); computeFPS (); glutPostRedisplay (); }
GLvoid NEHE36::DrawGLScene(){ glClearColor(0.0f, 0.0f, 0.0f, 0.5); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); RenderToTexture(); ProcessHelix(); DrawBlur(25,0.02f); //draw FPS text GLint matrixMode; GLboolean lightingOn; lightingOn= glIsEnabled(GL_LIGHTING); if (lightingOn) glDisable(GL_LIGHTING); glGetIntegerv(GL_MATRIX_MODE, &matrixMode); glDisable(GL_TEXTURE_2D); glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glPushAttrib(GL_COLOR_BUFFER_BIT); glTranslatef(0.0f,0.0f,-1.0f); glColor3f(0.8f,0.8f,0.8f); computeFPS(); Utils::drawText(-0.98f,-0.98f, GLUT_BITMAP_HELVETICA_12, FPSstr); glPopAttrib(); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(matrixMode); if (lightingOn) glEnable(GL_LIGHTING); glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); glutSwapBuffers(); angle += 0.5f; }
// display results using OpenGL void display() { sdkStartTimer(&timer); // execute filter, writing results to pbo unsigned int *d_result; checkCudaErrors(cudaGLMapBufferObject((void **)&d_result, pbo)); gaussianFilterRGBA(d_img, d_result, d_temp, width, height, sigma, order, nthreads); checkCudaErrors(cudaGLUnmapBufferObject(pbo)); // load texture from pbo glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); glBindTexture(GL_TEXTURE_2D, texid); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, 0); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); // display results glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glDisable(GL_DEPTH_TEST); glBegin(GL_QUADS); glTexCoord2f(0, 1); glVertex2f(0, 0); glTexCoord2f(1, 1); glVertex2f(1, 0); glTexCoord2f(1, 0); glVertex2f(1, 1); glTexCoord2f(0, 0); glVertex2f(0, 1); glEnd(); glDisable(GL_TEXTURE_2D); glutSwapBuffers(); sdkStopTimer(&timer); computeFPS(); }
GLvoid NEHE04::DrawGLScene(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(-1.5f,0.0f,-6.0f); glRotatef(rtri,0.0f,1.0f,0.0f); // Rotate The Triangle On The Y axis glBegin(GL_TRIANGLES); // Drawing Using Triangles glColor3f(1.0f,0.0f,0.0f); // Red glVertex3f( 0.0f, 1.0f, 0.0f); // Top glColor3f(0.0f,1.0f,0.0f); //Green glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left glColor3f(0.0f,0.0f,1.0f); // Blue glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right glEnd(); glLoadIdentity(); glTranslatef(1.5f,0.0f,-6.0f); glRotatef(rquad,1.0f,0.0f,0.0f); // Rotate The Quad On The X axis glColor3f(0.5f,0.5f,1.0f); glBegin(GL_QUADS); // Draw A Quad glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left glEnd(); glLoadIdentity (); glTranslatef(0.0f,0.0f,-1.0f); glColor3f(0.8f,0.8f,0.8f);//set text color computeFPS(); Utils::drawText(-0.54f,-0.4f, GLUT_BITMAP_HELVETICA_12, FPSstr); glutSwapBuffers(); rtri += 0.2f; rquad -= 0.15f; }
GraphicsScene::GraphicsScene(const char* raddr, unsigned rport, unsigned lport, QWidget* parent): QGraphicsView(parent), m_grid(true), m_fps(0), m_move(false), m_raddr(raddr), m_rport(rport), m_lport(lport), m_rotate(0) { m_scene.addItem(&m_item); setScene(&m_scene); setFocusPolicy(Qt::StrongFocus); m_sock = new QUdpSocket(); m_sock->bind(m_lport); m_zoom_tim = new QTimer(this); connect(m_zoom_tim, SIGNAL(timeout()), this, SLOT(resetZoom())); connect(m_sock, SIGNAL(readyRead()), this, SLOT(handleInputData())); m_vline = new QGraphicsLineItem; m_vline->setPen(QPen(Qt::DotLine)); m_hline = new QGraphicsLineItem; m_hline->setPen(QPen(Qt::DotLine)); m_fps_txt = new QGraphicsTextItem("FPS: 0"); m_scene.addItem(m_fps_txt); m_fps_txt->setPos(5, 5); m_fps_tim = new QTimer(this); m_fps_tim->setInterval(1000); m_fps_tim->start(1000); connect(m_fps_tim, SIGNAL(timeout()), this, SLOT(computeFPS())); drawGrid(); }
void display() { //cutilCheckError(cutStartTimer(timer)); sdkStartTimer(&timer); if(IsFirstTime){ IsFirstTime = false; psystem->update(); if (renderer) renderer->setVertexBuffer(psystem->getCurrentReadBuffer(), psystem->getNumParticles()); } if (!bPause){ psystem->update(); if (renderer) renderer->setVertexBuffer(psystem->getCurrentReadBuffer(), psystem->getNumParticles()); } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); for (int c = 0; c < 3; ++c) { camera_trans_lag[c] += (camera_trans[c] - camera_trans_lag[c]) * inertia; camera_rot_lag[c] += (camera_rot[c] - camera_rot_lag[c]) * inertia; } glTranslatef(camera_trans_lag[0], camera_trans_lag[1], camera_trans_lag[2]); glRotatef(camera_rot_lag[0], 1.0, 0.0, 0.0); glRotatef(camera_rot_lag[1], 0.0, 1.0, 0.0); glGetFloatv(GL_MODELVIEW_MATRIX, modelView); glColor3f(0.0, 0.0, 0.0); //glutWireCube(2.0); if (renderer) renderer->display(); //cutilCheckError(cutStopTimer(timer)); sdkStopTimer(&timer); glutSwapBuffers(); glutReportErrors(); computeFPS(); }
// display results using OpenGL (called by GLUT) void display() { sdkStartTimer(&timer); render(); // display results glClear(GL_COLOR_BUFFER_BIT); // draw image from PBO glDisable(GL_DEPTH_TEST); glRasterPos2i(0, 0); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, 0); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); glutSwapBuffers(); glutReportErrors(); sdkStopTimer(&timer); computeFPS(); }
/* * main(argc, argv) - the standard C entry point for the program */ int main(int argc, char *argv[]) { GLuint quadList, sphereList; GLuint programObject[5]; // One quad and four spheres double fps = 0.0; GLFWvidmode vidmode; GLboolean running = GL_TRUE; // Main loop exits when this is set to GL_FALSE // Initialise GLFW glfwInit(); // Open a temporary OpenGL window just to determine the desktop size if( !glfwOpenWindow(256, 256, 8,8,8,8, 32,0, GLFW_WINDOW) ) { glfwTerminate(); // glfwOpenWindow failed, quit the program. return 1; } glfwGetDesktopMode(&vidmode); glfwCloseWindow(); // Open a window to cover the width of the current desktop if( !glfwOpenWindow(vidmode.Width-20, (int)(0.316*(vidmode.Width-20)), 8,8,8,8, 32,0, GLFW_WINDOW) ) { glfwTerminate(); // glfwOpenWindow failed, quit the program. return 1; } // Load the extensions for GLSL - note that this has to be done // *after* the window has been opened, or we won't have a GL context // to query for those extensions and connect to instances of them. loadExtensions(); printf("GL vendor: %s\n", glGetString(GL_VENDOR)); printf("GL renderer: %s\n", glGetString(GL_RENDERER)); printf("GL version: %s\n", glGetString(GL_VERSION)); printf("Desktop size: %d x %d pixels\n", vidmode.Width, vidmode.Height); glEnable(GL_DEPTH_TEST); // Use the Z buffer glfwSwapInterval(0); // Do not wait for screen refresh between frames // Compile a display list for the demo geometry, to render it efficiently initQuadList(&quadList); initSphereList(&sphereList); createShader(&programObject[0], PATH VERTSHADER0, PATH FRAGSHADER0); createShader(&programObject[1], PATH VERTSHADER1, PATH FRAGSHADER1); createShader(&programObject[2], PATH VERTSHADER2, PATH FRAGSHADER2); createShader(&programObject[3], PATH VERTSHADER3, PATH FRAGSHADER3); createShader(&programObject[4], PATH VERTSHADER4, PATH FRAGSHADER4); // Main loop while(running) { // Calculate and update the frames per second (FPS) display fps = computeFPS(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(0.0f, 0.3f, 0.5f, 0.0f); // Set up the camera projection. setupCamera(); // Draw the scene. renderScene(quadList, sphereList, programObject); // Swap buffers, i.e. display the image and prepare for next frame. glfwSwapBuffers(); // Exit if the ESC key is pressed or the window is closed. if(glfwGetKey(GLFW_KEY_ESC) || !glfwGetWindowParam(GLFW_OPENED)) { running = GL_FALSE; } } printf("Performance: %.1f FPS\n", fps); // Close the OpenGL window and terminate GLFW. glfwTerminate(); return 0; }
// display results using OpenGL (called by GLUT) void display() { sdkStartTimer(&timer); // map PBO to get CUDA device pointer uchar4 *d_output; checkCudaErrors(cudaGraphicsMapResources(1, &cuda_pbo_resource, 0)); size_t num_bytes; checkCudaErrors(cudaGraphicsResourceGetMappedPointer((void **)&d_output, &num_bytes, cuda_pbo_resource)); render(imageWidth, imageHeight, tx, ty, scale, cx, cy, blockSize, gridSize, g_FilterMode, d_output); checkCudaErrors(cudaGraphicsUnmapResources(1, &cuda_pbo_resource, 0)); // Common display path { // display results glClear(GL_COLOR_BUFFER_BIT); #if USE_BUFFER_TEX // display using buffer texture glBindTexture(GL_TEXTURE_BUFFER_EXT, bufferTex); glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, fprog); glEnable(GL_FRAGMENT_PROGRAM_ARB); glProgramLocalParameterI4iNV(GL_FRAGMENT_PROGRAM_ARB, 0, width, 0, 0, 0); #else // download image from PBO to OpenGL texture glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); glBindTexture(GL_TEXTURE_TYPE, displayTex); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexSubImage2D(GL_TEXTURE_TYPE, 0, 0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, 0); glEnable(GL_TEXTURE_TYPE); #endif // draw textured quad glDisable(GL_DEPTH_TEST); glBegin(GL_QUADS); glTexCoord2f(0.0f , (GLfloat)height); glVertex2f(0.0f, 0.0f); glTexCoord2f((GLfloat)width, (GLfloat)height); glVertex2f(1.0f, 0.0f); glTexCoord2f((GLfloat)width, 0.0f); glVertex2f(1.0f, 1.0f); glTexCoord2f(0.0f , 0.0f); glVertex2f(0.0f, 1.0f); glEnd(); glDisable(GL_TEXTURE_TYPE); glDisable(GL_FRAGMENT_PROGRAM_ARB); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); if (drawCurves) { // draw spline curves glPushMatrix(); glScalef(0.25, 0.25, 1.0); glTranslatef(0.0, 2.0, 0.0); glColor3f(1.0, 0.0, 0.0); plotCurve(bspline_w3); glTranslatef(1.0, 0.0, 0.0); glColor3f(0.0, 1.0, 0.0); plotCurve(bspline_w2); glTranslatef(1.0, 0.0, 0.0); glColor3f(0.0, 0.0, 1.0); plotCurve(bspline_w1); glTranslatef(1.0, 0.0, 0.0); glColor3f(1.0, 0.0, 1.0); plotCurve(bspline_w0); glPopMatrix(); glColor3f(1.0, 1.0, 1.0); } } glutSwapBuffers(); glutReportErrors(); sdkStopTimer(&timer); computeFPS(); }
// display results using OpenGL (called by GLUT) void display() { cutilCheckError(cutStartTimer(timer)); // use OpenGL to build view matrix GLfloat modelView[16]; glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glRotatef(-viewRotation.x, 1.0, 0.0, 0.0); glRotatef(-viewRotation.y, 0.0, 1.0, 0.0); glTranslatef(-viewTranslation.x, -viewTranslation.y, -viewTranslation.z); glGetFloatv(GL_MODELVIEW_MATRIX, modelView); glPopMatrix(); invViewMatrix[0] = modelView[0]; invViewMatrix[1] = modelView[4]; invViewMatrix[2] = modelView[8]; invViewMatrix[3] = modelView[12]; invViewMatrix[4] = modelView[1]; invViewMatrix[5] = modelView[5]; invViewMatrix[6] = modelView[9]; invViewMatrix[7] = modelView[13]; invViewMatrix[8] = modelView[2]; invViewMatrix[9] = modelView[6]; invViewMatrix[10] = modelView[10]; invViewMatrix[11] = modelView[14]; render(); // display results glClear(GL_COLOR_BUFFER_BIT); // draw image from PBO glDisable(GL_DEPTH_TEST); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); #if 0 // draw using glDrawPixels (slower) glRasterPos2i(0, 0); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, 0); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); #else // draw using texture // copy from pbo to texture glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); glBindTexture(GL_TEXTURE_2D, tex); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, 0); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); // draw textured quad glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2f(0, 0); glTexCoord2f(1, 0); glVertex2f(1, 0); glTexCoord2f(1, 1); glVertex2f(1, 1); glTexCoord2f(0, 1); glVertex2f(0, 1); glEnd(); glDisable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); #endif if (g_CheckRender && g_CheckRender->IsQAReadback() && g_Verify) { // readback for QA testing shrLog("\n> (Frame %d) Readback BackBuffer\n", frameCount); g_CheckRender->readback( width, height ); g_CheckRender->savePPM(sOriginal[g_Index], true, NULL); if (!g_CheckRender->PPMvsPPM(sOriginal[g_Index], sReference[g_Index], MAX_EPSILON_ERROR, THRESHOLD)) { g_TotalErrors++; } g_Verify = false; } glutSwapBuffers(); glutReportErrors(); cutilCheckError(cutStopTimer(timer)); computeFPS(); }
void display() { sdkStartTimer(&timer); // render //MOVE THIS UP glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // update the simulation if (!bPause) { psystem->setIterations(iterations); //psystem->setDamping(damping); //psystem->setGravity(-gravity); //psystem->setCollideSpring(collideSpring); //psystem->setCollideDamping(collideDamping); //psystem->setCollideShear(collideShear); //psystem->setCollideAttraction(collideAttraction); psystem->update(timestep); num_iter++; if (renderer) { //renderer->setVertexBuffer(psystem->getCurrentReadBuffer(), psystem->getNumParticles()); renderer->setVertexBuffer(psystem->getCurrentReadBuffer(), psystem->getNumParticles(), psystem->getMaxNumParticles()); } } // render //MOVE THIS UP //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // view transform glMatrixMode(GL_MODELVIEW); glLoadIdentity(); for (int c = 0; c < 3; ++c) { camera_trans_lag[c] += (camera_trans[c] - camera_trans_lag[c]) * inertia; camera_rot_lag[c] += (camera_rot[c] - camera_rot_lag[c]) * inertia; } glTranslatef(camera_trans_lag[0], camera_trans_lag[1], camera_trans_lag[2]); glRotatef(camera_rot_lag[0], 1.0, 0.0, 0.0); glRotatef(camera_rot_lag[1], 0.0, 1.0, 0.0); glGetFloatv(GL_MODELVIEW_MATRIX, modelView); /* glBegin(GL_LINES); //glBegin(GL_POLYGON); // cube glColor3f(1.0, 1.0, 1.0); //glutWireCube(0.2); glVertex3f(0.0, 0.0, 0); glVertex3f(0.0, 0.0, 0.46); glVertex3f(0.0, 0.0, 0.46); glVertex3f(0.102, 0.0, 0.46); glVertex3f(0.102, 0.0, 0.46); glVertex3f(0.102, 0.0, 0.0); glVertex3f(0.102, 0.0, 0); glVertex3f(0.0, 0.0, 0); */ // for (int i=0;i<m_params.) glEnd(); /*// collider glPushMatrix(); float3 p = psystem->getColliderPos(); glTranslatef(p.x, p.y, p.z); glColor3f(1.0, 0.0, 0.0); glutSolidSphere(psystem->getColliderRadius(), 20, 10); glPopMatrix();*/ if (renderer && displayEnabled) { renderer->display(displayMode); } if (displaySliders) { glDisable(GL_DEPTH_TEST); glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); // invert color glEnable(GL_BLEND); params->Render(0, 0); glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST); } sdkStopTimer(&timer); glutSwapBuffers(); glutReportErrors(); computeFPS(); }
// Only call from main() thread!! void TFB_FlushGraphics (void) { int commands_handled; BOOLEAN livelock_deterrence; // This is technically a locking violation on DrawCommandQueue.Size, // but it is likely to not be very destructive. if (DrawCommandQueue.Size == 0) { static int last_fade = 255; static int last_transition = 255; int current_fade = GetFadeAmount (); int current_transition = TransitionAmount; if ((current_fade != 255 && current_fade != last_fade) || (current_transition != 255 && current_transition != last_transition) || (current_fade == 255 && last_fade != 255) || (current_transition == 255 && last_transition != 255)) { TFB_SwapBuffers (TFB_REDRAW_FADING); // if fading, redraw every frame } else { TaskSwitch (); } last_fade = current_fade; last_transition = current_transition; BroadcastCondVar (RenderingCond); return; } if (GfxFlags & TFB_GFXFLAGS_SHOWFPS) computeFPS (); commands_handled = 0; livelock_deterrence = FALSE; if (DrawCommandQueue.FullSize > DCQ_FORCE_BREAK_SIZE) { TFB_BatchReset (); } if (DrawCommandQueue.Size > DCQ_FORCE_SLOWDOWN_SIZE) { Lock_DCQ (-1); livelock_deterrence = TRUE; } TFB_BBox_Reset (); for (;;) { TFB_DrawCommand DC; if (!TFB_DrawCommandQueue_Pop (&DC)) { // the Queue is now empty. break; } ++commands_handled; if (!livelock_deterrence && commands_handled + DrawCommandQueue.Size > DCQ_LIVELOCK_MAX) { // log_add (log_Debug, "Initiating livelock deterrence!"); livelock_deterrence = TRUE; Lock_DCQ (-1); } switch (DC.Type) { case TFB_DRAWCOMMANDTYPE_SETMIPMAP: { TFB_DrawCommand_SetMipmap *cmd = &DC.data.setmipmap; TFB_DrawImage_SetMipmap (cmd->image, cmd->mipmap, cmd->hotx, cmd->hoty); break; } case TFB_DRAWCOMMANDTYPE_IMAGE: { TFB_DrawCommand_Image *cmd = &DC.data.image; TFB_Image *DC_image = cmd->image; const int x = cmd->x; const int y = cmd->y; TFB_DrawCanvas_Image (DC_image, x, y, cmd->scale, cmd->scaleMode, cmd->colormap, cmd->drawMode, TFB_GetScreenCanvas (cmd->destBuffer)); if (cmd->destBuffer == TFB_SCREEN_MAIN) { LockMutex (DC_image->mutex); if (cmd->scale) TFB_BBox_RegisterCanvas (DC_image->ScaledImg, x - DC_image->last_scale_hs.x, y - DC_image->last_scale_hs.y); else TFB_BBox_RegisterCanvas (DC_image->NormalImg, x - DC_image->NormalHs.x, y - DC_image->NormalHs.y); UnlockMutex (DC_image->mutex); } break; } case TFB_DRAWCOMMANDTYPE_FILLEDIMAGE: { TFB_DrawCommand_FilledImage *cmd = &DC.data.filledimage; TFB_Image *DC_image = cmd->image; const int x = cmd->x; const int y = cmd->y; TFB_DrawCanvas_FilledImage (DC_image, x, y, cmd->scale, cmd->scaleMode, cmd->color, cmd->drawMode, TFB_GetScreenCanvas (cmd->destBuffer)); if (cmd->destBuffer == TFB_SCREEN_MAIN) { LockMutex (DC_image->mutex); if (cmd->scale) TFB_BBox_RegisterCanvas (DC_image->ScaledImg, x - DC_image->last_scale_hs.x, y - DC_image->last_scale_hs.y); else TFB_BBox_RegisterCanvas (DC_image->NormalImg, x - DC_image->NormalHs.x, y - DC_image->NormalHs.y); UnlockMutex (DC_image->mutex); } break; } case TFB_DRAWCOMMANDTYPE_FONTCHAR: { TFB_DrawCommand_FontChar *cmd = &DC.data.fontchar; TFB_Char *DC_char = cmd->fontchar; const int x = cmd->x; const int y = cmd->y; TFB_DrawCanvas_FontChar (DC_char, cmd->backing, x, y, cmd->drawMode, TFB_GetScreenCanvas (cmd->destBuffer)); if (cmd->destBuffer == TFB_SCREEN_MAIN) { RECT r; r.corner.x = x - DC_char->HotSpot.x; r.corner.y = y - DC_char->HotSpot.y; r.extent.width = DC_char->extent.width; r.extent.height = DC_char->extent.height; TFB_BBox_RegisterRect (&r); } break; } case TFB_DRAWCOMMANDTYPE_LINE: { TFB_DrawCommand_Line *cmd = &DC.data.line; if (cmd->destBuffer == TFB_SCREEN_MAIN) { TFB_BBox_RegisterPoint (cmd->x1, cmd->y1); TFB_BBox_RegisterPoint (cmd->x2, cmd->y2); } TFB_DrawCanvas_Line (cmd->x1, cmd->y1, cmd->x2, cmd->y2, cmd->color, cmd->drawMode, TFB_GetScreenCanvas (cmd->destBuffer)); break; } case TFB_DRAWCOMMANDTYPE_RECTANGLE: { TFB_DrawCommand_Rect *cmd = &DC.data.rect; if (cmd->destBuffer == TFB_SCREEN_MAIN) TFB_BBox_RegisterRect (&cmd->rect); TFB_DrawCanvas_Rect (&cmd->rect, cmd->color, cmd->drawMode, TFB_GetScreenCanvas (cmd->destBuffer)); break; } case TFB_DRAWCOMMANDTYPE_SCISSORENABLE: { TFB_DrawCommand_Scissor *cmd = &DC.data.scissor; TFB_DrawCanvas_SetClipRect ( TFB_GetScreenCanvas (TFB_SCREEN_MAIN), &cmd->rect); TFB_BBox_SetClipRect (&DC.data.scissor.rect); break; } case TFB_DRAWCOMMANDTYPE_SCISSORDISABLE: TFB_DrawCanvas_SetClipRect ( TFB_GetScreenCanvas (TFB_SCREEN_MAIN), NULL); TFB_BBox_SetClipRect (NULL); break; case TFB_DRAWCOMMANDTYPE_COPYTOIMAGE: { TFB_DrawCommand_CopyToImage *cmd = &DC.data.copytoimage; TFB_Image *DC_image = cmd->image; const POINT dstPt = {0, 0}; if (DC_image == 0) { log_add (log_Debug, "DCQ ERROR: COPYTOIMAGE passed null " "image ptr"); break; } LockMutex (DC_image->mutex); TFB_DrawCanvas_CopyRect ( TFB_GetScreenCanvas (cmd->srcBuffer), &cmd->rect, DC_image->NormalImg, dstPt); UnlockMutex (DC_image->mutex); break; } case TFB_DRAWCOMMANDTYPE_COPY: { TFB_DrawCommand_Copy *cmd = &DC.data.copy; const RECT r = cmd->rect; if (cmd->destBuffer == TFB_SCREEN_MAIN) TFB_BBox_RegisterRect (&cmd->rect); TFB_DrawCanvas_CopyRect ( TFB_GetScreenCanvas (cmd->srcBuffer), &r, TFB_GetScreenCanvas (cmd->destBuffer), r.corner); break; } case TFB_DRAWCOMMANDTYPE_DELETEIMAGE: { TFB_Image *DC_image = DC.data.deleteimage.image; TFB_DrawImage_Delete (DC_image); break; } case TFB_DRAWCOMMANDTYPE_DELETEDATA: { void *data = DC.data.deletedata.data; HFree (data); break; } case TFB_DRAWCOMMANDTYPE_SENDSIGNAL: ClearSemaphore (DC.data.sendsignal.sem); break; case TFB_DRAWCOMMANDTYPE_REINITVIDEO: { TFB_DrawCommand_ReinitVideo *cmd = &DC.data.reinitvideo; int oldDriver = GraphicsDriver; int oldFlags = GfxFlags; int oldWidth = ScreenWidthActual; int oldHeight = ScreenHeightActual; // JMS_GFX: Added resolutionFactor if (TFB_ReInitGraphics (cmd->driver, cmd->flags, cmd->width, cmd->height, resolutionFactor)) { log_add (log_Error, "Could not provide requested mode: " "reverting to last known driver."); // We don't know what exactly failed, so roll it all back if (TFB_ReInitGraphics (oldDriver, oldFlags, oldWidth, oldHeight, resolutionFactor)) { log_add (log_Fatal, "Couldn't reinit at that point either. " "Your video has been somehow tied in knots."); exit (EXIT_FAILURE); } } TFB_SwapBuffers (TFB_REDRAW_YES); break; } case TFB_DRAWCOMMANDTYPE_CALLBACK: { DC.data.callback.callback (DC.data.callback.arg); break; } } } if (livelock_deterrence) Unlock_DCQ (); TFB_SwapBuffers (TFB_REDRAW_NO); RenderedFrames++; BroadcastCondVar (RenderingCond); }
// display results using OpenGL (called by GLUT) void display() { sdkStartTimer(&timer); // use OpenGL to build view matrix GLfloat modelView[16]; glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glRotatef(-viewRotation.x, 1.0, 0.0, 0.0); glRotatef(-viewRotation.y, 0.0, 1.0, 0.0); glTranslatef(-viewTranslation.x, -viewTranslation.y, -viewTranslation.z); glGetFloatv(GL_MODELVIEW_MATRIX, modelView); glPopMatrix(); invViewMatrix[0] = modelView[0]; invViewMatrix[1] = modelView[4]; invViewMatrix[2] = modelView[8]; invViewMatrix[3] = modelView[12]; invViewMatrix[4] = modelView[1]; invViewMatrix[5] = modelView[5]; invViewMatrix[6] = modelView[9]; invViewMatrix[7] = modelView[13]; invViewMatrix[8] = modelView[2]; invViewMatrix[9] = modelView[6]; invViewMatrix[10] = modelView[10]; invViewMatrix[11] = modelView[14]; filter(); render(); // display results glClear(GL_COLOR_BUFFER_BIT); // draw image from PBO glDisable(GL_DEPTH_TEST); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // draw using texture // copy from pbo to texture glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); glBindTexture(GL_TEXTURE_2D, volumeTex); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, 0); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); // draw textured quad glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2f(0, 0); glTexCoord2f(1, 0); glVertex2f(1, 0); glTexCoord2f(1, 1); glVertex2f(1, 1); glTexCoord2f(0, 1); glVertex2f(0, 1); glEnd(); glDisable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); glutSwapBuffers(); glutReportErrors(); sdkStopTimer(&timer); computeFPS(); }
//////////////////////////////////////////////////////////////////////////////// //! Display callback //////////////////////////////////////////////////////////////////////////////// void display() { // run CUDA kernel to generate vertex positions if (animate) { runCuda(); } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // set view matrix glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(translateX, translateY, translateZ); glRotatef(rotateX, 1.0, 0.0, 0.0); glRotatef(rotateY, 0.0, 1.0, 0.0); // render from the vbo glBindBuffer(GL_ARRAY_BUFFER, posVertexBuffer); glVertexPointer(4, GL_FLOAT, 0, 0); glEnableClientState(GL_VERTEX_ARRAY); glBindBuffer(GL_ARRAY_BUFFER, heightVertexBuffer); glClientActiveTexture(GL_TEXTURE0); glTexCoordPointer(1, GL_FLOAT, 0, 0); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glBindBuffer(GL_ARRAY_BUFFER, slopeVertexBuffer); glClientActiveTexture(GL_TEXTURE1); glTexCoordPointer(2, GL_FLOAT, 0, 0); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glUseProgram(shaderProg); // Set default uniform variables parameters for the vertex shader GLuint uniHeightScale, uniChopiness, uniSize; uniHeightScale = glGetUniformLocation(shaderProg, "heightScale"); glUniform1f(uniHeightScale, 0.5f); uniChopiness = glGetUniformLocation(shaderProg, "chopiness"); glUniform1f(uniChopiness, 1.0f); uniSize = glGetUniformLocation(shaderProg, "size"); glUniform2f(uniSize, meshW, meshH); // Set default uniform variables parameters for the pixel shader GLuint uniDeepColor, uniShallowColor, uniSkyColor, uniLightDir; uniDeepColor = glGetUniformLocation(shaderProg, "deepColor"); glUniform4f(uniDeepColor, 0.0f, 0.0f, 0.1f, 1.0f); uniShallowColor = glGetUniformLocation(shaderProg, "shallowColor"); glUniform4f(uniShallowColor, 0.1f, 0.4f, 0.3f, 1.0f); uniSkyColor = glGetUniformLocation(shaderProg, "skyColor"); glUniform4f(uniSkyColor, 0.5f, 0.5f, 0.5f, 1.0f); uniLightDir = glGetUniformLocation(shaderProg, "lightDir"); glUniform3f(uniLightDir, 0.0f, 1.0f, 0.0f); // end of uniform settings glColor3f(1.0, 1.0, 1.0); if (drawPoints) { glDrawArrays(GL_POINTS, 0, meshW * meshH); } else { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer); glPolygonMode(GL_FRONT_AND_BACK, wireFrame ? GL_LINE : GL_FILL); glDrawElements(GL_TRIANGLE_STRIP, ((meshW*2)+2)*(meshH-1), GL_UNSIGNED_INT, 0); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } glDisableClientState(GL_VERTEX_ARRAY); glClientActiveTexture(GL_TEXTURE0); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glClientActiveTexture(GL_TEXTURE1); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glUseProgram(0); if (g_CheckRender && g_CheckRender->IsQAReadback() && g_Verify) { printf("> (Frame %d) Readback BackBuffer\n", frameCount); g_CheckRender->readback( windowW, windowH ); g_CheckRender->savePPM ( sOriginal[0], true, NULL); if (!g_CheckRender->PPMvsPPM( sOriginal[0], sReference[0], MAX_EPSILON, THRESHOLD)) { g_TotalErrors++; } g_Verify = false; } glutSwapBuffers(); computeFPS(); }
// display results using OpenGL void display() { cutilCheckError(cutStartTimer(timer)); // execute filter, writing results to pbo unsigned int *d_result; //DEPRECATED: cutilSafeCall( cudaGLMapBufferObject((void**)&d_result, pbo) ); cutilSafeCall(cudaGraphicsMapResources(1, &cuda_pbo_resource, 0)); size_t num_bytes; cutilSafeCall(cudaGraphicsResourceGetMappedPointer((void **)&d_result, &num_bytes, cuda_pbo_resource)); boxFilterRGBA(d_img, d_temp, d_result, width, height, filter_radius, iterations, nthreads); // DEPRECATED: cutilSafeCall(cudaGLUnmapBufferObject(pbo)); cutilSafeCall(cudaGraphicsUnmapResources(1, &cuda_pbo_resource, 0)); if (g_bFBODisplay) { g_FrameBufferObject->bindRenderPath(); } // Common display code path { glClear(GL_COLOR_BUFFER_BIT); // load texture from pbo glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo); glBindTexture(GL_TEXTURE_2D, texid); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, 0); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); // fragment program is required to display floating point texture glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader); glEnable(GL_FRAGMENT_PROGRAM_ARB); glDisable(GL_DEPTH_TEST); glBegin(GL_QUADS); if (GL_TEXTURE_TYPE == GL_TEXTURE_2D) { glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 1.0f); } else { glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f); glTexCoord2f((float)width, 0.0f); glVertex2f(1.0f, 0.0f); glTexCoord2f((float)width, (float)height); glVertex2f(1.0f, 1.0f); glTexCoord2f(0.0f, (float)height); glVertex2f(0.0f, 1.0f); } glEnd(); glBindTexture(GL_TEXTURE_TYPE, 0); glDisable(GL_FRAGMENT_PROGRAM_ARB); } if (g_bFBODisplay) { g_FrameBufferObject->unbindRenderPath(); } if (g_CheckRender && g_CheckRender->IsQAReadback() && g_Verify) { // readback for QA testing if (g_bFBODisplay) { shrLog("> (Frame %d) Readback FBO\n", frameCount); g_CheckRender->readback( width, height, g_FrameBufferObject->getFbo() ); } else { shrLog("> (Frame %d) Readback BackBuffer\n", frameCount); g_CheckRender->readback( width, height ); } g_CheckRender->savePPM(sOriginal[g_Index], true, NULL); if (!g_CheckRender->PPMvsPPM(sOriginal[g_Index], sReference[g_Index], MAX_EPSILON_ERROR, 0.15f)) { g_TotalErrors++; } g_Verify = false; } glutSwapBuffers(); glutReportErrors(); cutilCheckError(cutStopTimer(timer)); computeFPS(); }
void PerfRenderer::render(const NxProfileData* prof, int width, int height) { if(!m_profilerOn) return; GLFontRenderer::setScreenResolution(width, height); #ifdef __PPCGEKKO__ GLFontRenderer::setColor(0.8f, 1.0f, 0.0f, 1.0f); #else GLFontRenderer::setColor(1.0f, 0.0f, 0.0f, 1.0f); #endif //position on screen: float sx = 0.01f; float sx2= 0.38f; //float col1 = -0.5f/2; //float col2 = -0.2f/5; float sy = 0.95f; #ifdef __PPCGEKKO__ float fontHeight = 0.036f; #else float fontHeight = 0.018f; #endif char buf[256]; if(prof != NULL) { // display title sprintf(buf,"Profiler (FPS: %g)",computeFPS()); GLFontRenderer::print(sx, sy, fontHeight, buf, false, 11, true); //display headings #ifdef NX_ENABLE_PROFILER_COUNTER GLFontRenderer::print(sx2, sy, fontHeight, "count %parent %total %self hier self counter"); #else GLFontRenderer::print(sx2, sy, fontHeight, "count %parent %total %self hier self"); #endif sy -= 2*fontHeight; //The total for the top level is the sum of all the top level zones //(There could be multiple top level zones, eg threading enabled). float total = 0.0f; for(unsigned int i=0;i<prof->numZones;i++) { if(prof->profileZones[i].recursionLevel==0) total+=prof->profileZones[i].hierTime; } NextColor(true); for(unsigned int i=0;i<prof->numZones;i++) { NxProfileZone & z = prof->profileZones[i]; #ifdef __CELLOS_LV2__ // Skip internal SPU Dynamics profile zones // if (!strncmp("PXS_PROFILE_ZONE_DYNAMICS_SPU_",z.name,strlen("PXS_PROFILE_ZONE_DYNAMICS_SPU_"))) continue; #endif if(z.callCount) //skip empty zones { float precTotal = total ? z.hierTime * 100.0f / total : 0.0f; float percSelf = z.hierTime ? z.selfTime * 100.0f / z.hierTime : 0.0f; #ifdef NX_ENABLE_PROFILER_COUNTER sprintf(buf, "%4d %4.0f %4.0f %4.0f %6d %6d %7d", z.callCount, z.percent, precTotal, percSelf, z.hierTime, z.selfTime,z.counter); #else sprintf(buf, "%4d %4.0f %4.0f %4.0f %10d %10d", z.callCount, z.percent, precTotal, percSelf, z.hierTime, z.selfTime); #endif GLFontRenderer::print(sx + 0.012f*z.recursionLevel, sy, fontHeight, z.name+2, false, 11, true); GLFontRenderer::print(sx2, sy, fontHeight, buf, true, 11, true); NextColor(); sy -= fontHeight; } } } else if(m_profilerOn) {//we can still display frame rate even if NX was not compiled with profiling support. // display title #ifdef __PPCGEKKO__ sprintf(buf,"FPS: %d",(unsigned int)computeFPS()); #else sprintf(buf,"FPS: %g",computeFPS()); #endif GLFontRenderer::print(sx, sy, fontHeight, buf, false, 11, true); } }
void display(void) { sdkStartTimer(&timer); CudaRenderer::getInstance()->launchKernel(WINDOWWIDTH, WINDOWHEIGHT); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT |GL_ACCUM_BUFFER_BIT); float ratio = 1.0f; glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, VBOCreator::getInstance()->getPBOPixels()); glBindTexture(GL_TEXTURE_2D, VBOCreator::getInstance()->getScreenMapTextureID()); //glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, WINDOWWIDTH*SUBPIXELLEVEL, WINDOWHEIGHT*SUBPIXELLEVEL, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, WINDOWWIDTH, WINDOWHEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glPushAttrib(GL_ENABLE_BIT|GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glDisable(GL_DEPTH_TEST); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); camera(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glBegin(GL_QUADS); glTexCoord2f(0.0, 1.0); glVertex3f(-ratio,ratio,0.0f); // Top Right glTexCoord2f(0.0, 0.0); glVertex3f(-ratio,-ratio,0.0f); // Top Left glTexCoord2f(1.0, 0.0); glVertex3f(ratio,-ratio,0.0f); // Bottom Left glTexCoord2f(1.0, 1.0); glVertex3f(ratio,ratio,0.0f); // Bottom Right glEnd(); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_BLEND); glDisable(GL_TEXTURE_2D); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); glPopAttrib(); /* //test depth tex: GLuint depth; glGenTextures(1, &depth); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, VBOCreator::getInstance()->getPBOSubPixelsDepth()); glBindTexture(GL_TEXTURE_2D, depth); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, WINDOWWIDTH*SUBPIXELLEVEL,WINDOWHEIGHT*SUBPIXELLEVEL, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0); GLuint subPixels; glGenTextures(1, &subPixels); glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, VBOCreator::getInstance()->getPBOSubPixels()); glBindTexture(GL_TEXTURE_2D, subPixels); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, WINDOWWIDTH*SUBPIXELLEVEL,WINDOWHEIGHT*SUBPIXELLEVEL, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); // Filter and clamp glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE); glBindTexture(GL_TEXTURE_2D, 0); glBegin(GL_POINTS); glEnd(); */ glutSwapBuffers(); sdkStopTimer(&timer); computeFPS(); glutReportErrors(); }