/* VID_EndFrame Responsible for doing a swapbuffers and possibly for other stuff as yet to be determined. Probably better not to make this a VID_ function and instead do a call to VID_SwapBuffers. */ void VID_EndFrame(void) { BOOL ret; // don't flip if drawing to front buffer if (glw.drawbuffer == GL_FRONT) { return; } if (glw.minidriver) { ret = qwglSwapBuffers(win.dc); } else { ret = SwapBuffers(win.dc); } if (!ret) { DWORD error = GetLastError(); // this happens sometimes when the window is iconified if (!IsIconic(win.wnd)) { Com_Error(ERR_FATAL, "%s failed with error %lu", glw.minidriver ? "wglSwapBuffers" : "SwapBuffers", error); } } }
/* ** GLimp_EndFrame */ void GLimp_EndFrame (void) { // // swapinterval stuff // if ( r_swapInterval->modified ) { r_swapInterval->modified = qfalse; if ( !glConfig.stereoEnabled ) { // why? if ( qwglSwapIntervalEXT ) { qwglSwapIntervalEXT( r_swapInterval->integer ); } } } // don't flip if drawing to front buffer if ( Q_stricmp( r_drawBuffer->string, "GL_FRONT" ) != 0 ) { if ( glConfig.driverType > GLDRV_ICD ) { if ( !qwglSwapBuffers( glw_state.hDC ) ) { ri.Error( ERR_FATAL, "GLimp_EndFrame() - SwapBuffers() failed!\n" ); } } else { SwapBuffers( glw_state.hDC ); } } // check logging QGL_EnableLogging( r_logFile->integer ); }
void CCamWnd::OnPaint() { CPaintDC dc(this); // device context for painting bool bPaint = true; if (!qwglMakeCurrent( dc.m_hDC, g_qeglobals.d_hglrcBase )) { Sys_Printf("ERROR: wglMakeCurrent failed..\n "); Sys_Printf("Please restart Q3Radiant if the camera view is not working\n"); } else { QE_CheckOpenGLForErrors(); g_pSplitList = NULL; if (g_bClipMode) { if (g_Clip1.Set() && g_Clip2.Set()) { g_pSplitList = ( (g_pParentWnd->ActiveXY()->GetViewType() == XZ) ? !g_bSwitch : g_bSwitch) ? &g_brBackSplits : &g_brFrontSplits; } } Cam_Draw (); QE_CheckOpenGLForErrors(); qwglSwapBuffers(dc.m_hDC); } }
/* ======================== GLimp_TestSwapBuffers ======================== */ void GLimp_TestSwapBuffers( const idCmdArgs &args ) { idLib::Printf( "GLimp_TimeSwapBuffers\n" ); static const int MAX_FRAMES = 5; uint64 timestamps[MAX_FRAMES]; qglDisable( GL_SCISSOR_TEST ); int frameMilliseconds = 16; for ( int swapInterval = 2 ; swapInterval >= -1 ; swapInterval-- ) { wglSwapIntervalEXT( swapInterval ); for ( int i = 0 ; i < MAX_FRAMES ; i++ ) { if ( swapInterval == -1 ) { Sys_Sleep( frameMilliseconds ); } if ( i & 1 ) { qglClearColor( 0, 1, 0, 1 ); } else { qglClearColor( 1, 0, 0, 1 ); } qglClear( GL_COLOR_BUFFER_BIT ); qwglSwapBuffers( win32.hDC ); qglFinish(); timestamps[i] = Sys_Microseconds(); } idLib::Printf( "\nswapinterval %i\n", swapInterval ); for ( int i = 1 ; i < MAX_FRAMES ; i++ ) { idLib::Printf( "%i microseconds\n", (int)(timestamps[i] - timestamps[i-1]) ); } } }
void CCamWnd::BenchMark() { PAINTSTRUCT ps; CRect rct; GetWindowRect(rct); long lStyle = ::GetWindowLong(GetSafeHwnd(), GWL_STYLE); ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, QE3_CHILDSTYLE); CWnd* pParent = GetParent(); SetParent(g_pParentWnd); MoveWindow(CRect(30, 30, 400, 400), TRUE); BeginPaint(&ps); if (!qwglMakeCurrent(ps.hdc, g_qeglobals.d_hglrcBase)) Error ("wglMakeCurrent failed in Benchmark"); qglDrawBuffer (GL_FRONT); double dStart = Sys_DoubleTime (); for (int i=0 ; i < 100 ; i++) { m_Camera.angles[YAW] = i*4; Cam_Draw(); } qwglSwapBuffers(ps.hdc); qglDrawBuffer (GL_BACK); double dEnd = Sys_DoubleTime (); EndPaint(&ps); Sys_Printf ("%5.2f seconds\n", dEnd - dStart); ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, lStyle); SetParent(pParent); MoveWindow(rct, TRUE); }
/* ** GLimp_EndFrame ** ** Responsible for doing a swapbuffers and possibly for other stuff ** as yet to be determined. Probably better not to make this a GLimp ** function and instead do a call to GLimp_SwapBuffers. */ void GLimp_EndFrame( void ) { int err; err = qglGetError(); assert( err == GL_NO_ERROR ); if( Q_stricmp( gl_drawbuffer->string, "GL_BACK" ) == 0 ) { if( !qwglSwapBuffers( glw_state.hDC ) ) Com_Error( ERR_FATAL, "GLimp_EndFrame() - SwapBuffers() failed!" ); } }
void idGLWidget::OnPaint() { if (!initialized) { CDC *dc = GetDC(); QEW_SetupPixelFormat(dc->m_hDC); ReleaseDC(dc); initialized = true; } CPaintDC dc(this); // device context for painting CRect rect; GetClientRect(rect); if (!qwglMakeCurrent(dc.m_hDC, win32.hGLRC)) { } qglViewport(0, 0, rect.Width(), rect.Height()); qglScissor(0, 0, rect.Width(), rect.Height()); qglMatrixMode(GL_PROJECTION); qglLoadIdentity(); qglClearColor (0.4f, 0.4f, 0.4f, 0.7f); qglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); qglDisable(GL_DEPTH_TEST); qglDisable(GL_BLEND); qglOrtho(0, rect.Width(), 0, rect.Height(), -256, 256); if (drawable) { drawable->draw(1, 1, rect.Width()-1, rect.Height()-1); } else { qglViewport(0, 0, rect.Width(), rect.Height()); qglScissor(0, 0, rect.Width(), rect.Height()); qglMatrixMode(GL_PROJECTION); qglLoadIdentity(); qglClearColor (0.4f, 0.4f, 0.4f, 0.7f); qglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } qwglSwapBuffers(dc); qglFlush(); qwglMakeCurrent(win32.hDC, win32.hGLRC); }
void CZWnd::OnPaint() { CPaintDC dc( this ); // device context for painting //if (!wglMakeCurrent(m_dcZ, m_hglrcZ)) //if (!qwglMakeCurrent(dc.m_hDC, m_hglrcZ)) if ( !qwglMakeCurrent( dc.m_hDC, win32.hGLRC ) ) { common->Printf( "ERROR: wglMakeCurrent failed..\n " ); common->Printf( "Please restart " EDITOR_WINDOWTEXT " if the Z view is not working\n" ); } else { QE_CheckOpenGLForErrors(); Z_Draw (); //qwglSwapBuffers( m_dcZ ); qwglSwapBuffers( dc.m_hDC ); TRACE( "Z Paint\n" ); } }
/* ===================== GLimp_SwapBuffers ===================== */ void GLimp_SwapBuffers( void ) { // // wglSwapinterval is a windows-private extension, // so we must check for it here instead of portably // if ( r_swapInterval.IsModified() ) { r_swapInterval.ClearModified(); if ( wglSwapIntervalEXT ) { wglSwapIntervalEXT( r_swapInterval.GetInteger() ); } } qwglSwapBuffers( win32.hDC ); //Sys_DebugPrintf( "*** SwapBuffers() ***\n" ); }
void CZWnd::OnPaint() { CPaintDC dc(this); // device context for painting //if (!wglMakeCurrent(m_dcZ, m_hglrcZ)) if (!qwglMakeCurrent(dc.m_hDC, m_hglrcZ)) { Sys_Printf("ERROR: wglMakeCurrent failed..\n "); Sys_Printf("Please restart QERadiant if the Z view is not working\n"); } else { QE_CheckOpenGLForErrors(); Z_Draw (); //qwglSwapBuffers(m_dcZ); qwglSwapBuffers(dc.m_hDC); // TRACE("Z Paint\n"); } }
/* ** GLimp_EndFrame ** ** Responsible for doing a swapbuffers and possibly for other stuff ** as yet to be determined. Probably better not to make this a GLimp ** function and instead do a call to GLimp_SwapBuffers. */ void GLimp_EndFrame (void) { assert( qglGetError() == GL_NO_ERROR ); if ( Q_stricmp( gl_drawbuffer->string, "GL_FRONT" ) != 0 ) { if(glw_state.minidriver) { if ( !qwglSwapBuffers( glw_state.hDC ) ) PrintWinError("GLimp_EndFrame() - wglSwapBuffers()", true); } else { SwapBuffers( glw_state.hDC ); } } }
/* ===================== GLimp_SwapBuffers ===================== */ void GLimp_SwapBuffers() { if ( r_swapInterval.IsModified() ) { r_swapInterval.ClearModified(); int interval = 0; if ( r_swapInterval.GetInteger() == 1 ) { interval = ( glConfig.swapControlTearAvailable ) ? -1 : 1; } else if ( r_swapInterval.GetInteger() == 2 ) { interval = 1; } if ( wglSwapIntervalEXT ) { wglSwapIntervalEXT( interval ); } } qwglSwapBuffers( win32.hDC ); }
/* ** GLimp_EndFrame ** ** Responsible for doing a swapbuffers and possibly for other stuff ** as yet to be determined. Probably better not to make this a GLimp ** function and instead do a call to GLimp_SwapBuffers. */ void GLimp_EndFrame( void ) { if( !qwglSwapBuffers( glw_state.hDC ) ) Sys_Error( "GLimp_EndFrame() - SwapBuffers() failed!" ); }
/* ================ rvGEWorkspace::Render Renders the workspace to the given DC ================ */ void rvGEWorkspace::Render ( HDC hdc ) { int front; int back; float scale; scale = g_ZoomScales[mZoom]; // Switch GL contexts to our dc if (!qwglMakeCurrent( hdc, win32.hGLRC )) { common->Printf("ERROR: wglMakeCurrent failed.. Error:%i\n", qglGetError()); common->Printf("Please restart Q3Radiant if the Map view is not working\n"); return; } // Prepare the view and clear it GL_State( GLS_DEFAULT ); qglViewport(0, 0, mWindowWidth, mWindowHeight ); qglScissor(0, 0, mWindowWidth, mWindowHeight ); qglClearColor ( 0.75f, 0.75f, 0.75f, 0 ); qglDisable(GL_DEPTH_TEST); qglDisable(GL_CULL_FACE); qglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Render the workspace below glMatrixMode(GL_PROJECTION); glLoadIdentity(); qglOrtho(0,mWindowWidth, mWindowHeight, 0, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); qglColor3f ( mApplication->GetOptions().GetWorkspaceColor()[0], mApplication->GetOptions().GetWorkspaceColor()[1], mApplication->GetOptions().GetWorkspaceColor()[2] ); qglBegin ( GL_QUADS ); qglVertex2f ( mRect.x, mRect.y ); qglVertex2f ( mRect.x + mRect.w, mRect.y ); qglVertex2f ( mRect.x + mRect.w, mRect.y + mRect.h ); qglVertex2f ( mRect.x, mRect.y + mRect.h ); qglEnd ( ); // Prepare the renderSystem view to draw the GUI in viewDef_t viewDef; memset ( &viewDef, 0, sizeof(viewDef) ); tr.viewDef = &viewDef; tr.viewDef->renderView.x = mRect.x; tr.viewDef->renderView.y = mWindowHeight - mRect.y - mRect.h; tr.viewDef->renderView.width = mRect.w; tr.viewDef->renderView.height = mRect.h; tr.viewDef->scissor.x1 = 0; tr.viewDef->scissor.y1 = 0; tr.viewDef->scissor.x2 = mRect.w; tr.viewDef->scissor.y2 = mRect.h; tr.viewDef->isEditor = true; renderSystem->BeginFrame(mWindowWidth, mWindowHeight ); // Draw the gui mInterface->Redraw ( 0 ); // eventLoop->Milliseconds() ); // We are done using the renderSystem now renderSystem->EndFrame( &front, &back ); if ( mApplication->GetActiveWorkspace ( ) == this ) { mApplication->GetStatusBar().SetTriangles ( backEnd.pc.c_drawIndexes/3 ); } // Prepare the viewport for drawing selections, etc. GL_State( GLS_DEFAULT ); qglDisable( GL_TEXTURE_CUBE_MAP_EXT ); // qglDisable(GL_BLEND); qglDisable(GL_CULL_FACE); qglViewport(0, 0, mWindowWidth, mWindowHeight ); qglScissor(0, 0, mWindowWidth, mWindowHeight ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); qglOrtho(0,mWindowWidth, mWindowHeight, 0, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); RenderGrid ( ); mSelections.Render ( ); qglFinish ( ); qwglSwapBuffers(hdc); qglEnable( GL_TEXTURE_CUBE_MAP_EXT ); qglEnable( GL_CULL_FACE); }
/* ======================================================================================================================= ======================================================================================================================= */ void CNewTexWnd::OnPaint() { CPaintDC dc(this); // device context for painting int nOld = g_qeglobals.d_texturewin.m_nTotalHeight; //hdcTexture = GetDC(); if (!qwglMakeCurrent(dc.GetSafeHdc(), win32.hGLRC)) { common->Printf("ERROR: wglMakeCurrent failed..\n "); } else { const char *name; qglClearColor ( g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][0], g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][1], g_qeglobals.d_savedinfo.colors[COLOR_TEXTUREBACK][2], 0 ); qglViewport(0, 0, rectClient.Width(), rectClient.Height()); qglScissor(0, 0, rectClient.Width(), rectClient.Height()); qglMatrixMode(GL_PROJECTION); qglLoadIdentity(); qglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); qglDisable(GL_DEPTH_TEST); qglDisable(GL_BLEND); qglOrtho(0, rectClient.Width(), origin.y - rectClient.Height(), origin.y, -100, 100); qglPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // init stuff current.x = 8; current.y = -8; currentRow = 0; currentIndex = 0; while (1) { const idMaterial *mat = NextPos(); if (mat == NULL) { break; } int width = mat->GetEditorImage()->uploadWidth * ((float)g_PrefsDlg.m_nTextureScale / 100); int height = mat->GetEditorImage()->uploadHeight * ((float)g_PrefsDlg.m_nTextureScale / 100); // Is this texture visible? if ((draw.y - height - FONT_HEIGHT < origin.y) && (draw.y > origin.y - rectClient.Height())) { // if in use, draw a background qglLineWidth(1); qglColor3f(1, 1, 1); globalImages->BindNull(); qglBegin(GL_LINE_LOOP); qglVertex2f(draw.x - 1, draw.y + 1 - FONT_HEIGHT); qglVertex2f(draw.x - 1, draw.y - height - 1 - FONT_HEIGHT); qglVertex2f(draw.x + 1 + width, draw.y - height - 1 - FONT_HEIGHT); qglVertex2f(draw.x + 1 + width, draw.y + 1 - FONT_HEIGHT); qglEnd(); // Draw the texture float fScale = (g_PrefsDlg.m_bHiColorTextures == TRUE) ? ((float)g_PrefsDlg.m_nTextureScale / 100) : 1.0; mat->GetEditorImage()->Bind(); QE_CheckOpenGLForErrors(); qglColor3f(1, 1, 1); qglBegin(GL_QUADS); qglTexCoord2f(0, 0); qglVertex2f(draw.x, draw.y - FONT_HEIGHT); qglTexCoord2f(1, 0); qglVertex2f(draw.x + width, draw.y - FONT_HEIGHT); qglTexCoord2f(1, 1); qglVertex2f(draw.x + width, draw.y - FONT_HEIGHT - height); qglTexCoord2f(0, 1); qglVertex2f(draw.x, draw.y - FONT_HEIGHT - height); qglEnd(); // draw the selection border if ( !idStr::Icmp(g_qeglobals.d_texturewin.texdef.name, mat->GetName()) ) { qglLineWidth(3); qglColor3f(1, 0, 0); globalImages->BindNull(); qglBegin(GL_LINE_LOOP); qglVertex2f(draw.x - 4, draw.y - FONT_HEIGHT + 4); qglVertex2f(draw.x - 4, draw.y - FONT_HEIGHT - height - 4); qglVertex2f(draw.x + 4 + width, draw.y - FONT_HEIGHT - height - 4); qglVertex2f(draw.x + 4 + width, draw.y - FONT_HEIGHT + 4); qglEnd(); qglLineWidth(1); } // draw the texture name globalImages->BindNull(); qglColor3f(1, 1, 1); qglRasterPos2f(draw.x, draw.y - FONT_HEIGHT + 2); // don't draw the directory name for (name = mat->GetName(); *name && *name != '/' && *name != '\\'; name++) { ; } if (!*name) { name = mat->GetName(); } else { name++; } qglCallLists(strlen(name), GL_UNSIGNED_BYTE, name); //qglCallLists(va("%s -- %d, %d" strlen(name), GL_UNSIGNED_BYTE, name); } } g_qeglobals.d_texturewin.m_nTotalHeight = abs(draw.y) + 100; // reset the current texture globalImages->BindNull(); qglFinish(); qwglSwapBuffers(dc.GetSafeHdc()); TRACE("Texture Paint\n"); } if (g_PrefsDlg.m_bTextureScrollbar && (m_bNeedRange || g_qeglobals.d_texturewin.m_nTotalHeight != nOld)) { m_bNeedRange = false; SetScrollRange(SB_VERT, 0, g_qeglobals.d_texturewin.m_nTotalHeight, TRUE); } //ReleaseDC(hdcTexture); }