Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-07-2006, 04:39   #1
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
problema refresh OpenGL in finestre windows

sto programmando una piccola applicazione grafica, un piccolissimo motore grafico - chiamiamolo così - utilizzando le finestre di windows e la libreria windows.h . ogni volta che apro un menu della finestra smette di aggiornare il rendering, tanto che se per es. apro tramite il menu la finestra di browsing per selezionare un file e la muovo, sotto l'immagine rimane tutta impressa con la finestra di browsing. c'è un'opzione da qualche parte per comunicare che la finestra non deve bloccare il rendering?

seconda cosa: come si attiva il double buffering quando si crea come in questo caso un contesto per opengl?

grazie
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2006, 09:38   #2
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Usando il double buffer il problema dovrebbe risolversi per i menu, per quanto riguarda il file dialog basta chiamare
Codice:
Invalidate(true);
UpdateWindow();
Per abilitare il double buffering con wgl devi usare questo pfd
Codice:
static PIXELFORMATDESCRIPTOR pfd = 
	{
        sizeof(PIXELFORMATDESCRIPTOR),  // size of this pfd
        1,                              // version number
        PFD_DRAW_TO_WINDOW |            // support window
        PFD_SUPPORT_OPENGL |            // support OpenGL
        PFD_DOUBLEBUFFER,               // double buffered
        PFD_TYPE_RGBA,                  // RGBA type
        24,                             // 24-bit color depth
        0, 0, 0, 0, 0, 0,               // color bits ignored
        0,                              // no alpha buffer
        0,                              // shift bit ignored
        0,                              // no accumulation buffer
        0, 0, 0, 0,                     // accum bits ignored
        32,                             // 32-bit z-buffer	 STENCIL
        0,                              // no stencil buffer
        0,                              // no auxiliary buffer
        PFD_MAIN_PLANE,                 // main layer
        0,                              // reserved
        0, 0, 0                         // layer masks ignored
    };
Nel rendering
Codice:
void CMFC_GLView::OnDraw(CDC* pDC){

....

	SwapBuffers(pDC->m_hDC);
Se hai altri dubbi sono qui
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2006, 13:36   #3
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
grazie mille. adesso leggo bene. tieni conto però che non posso usare le mfc.


[EDIT]

ho cercato nell'help index e ho letto il codice ma in effetti mi sembra che tu stia usando comandi delle mfc che non posso usare perchè ormai ho costruito tutta l'applicazione con le windows.h che non sono compatibili.


spiego meglio il problema del rendering: appena anche solo premo alt per evidenziare i menu il rendering si ferma. se poi apro appunto la finestra per esplorare i file e la muovo rimane impressa. quando poi la chiudo il rendering riparte senza problemi e pulisce ma il problema è che non volevo si fermasse proprio.

Ultima modifica di Black imp : 08-07-2006 alle 13:43.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2006, 14:37   #4
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
si, quello che ho postato è usato nelle mfc, ma il codice si adatta con un paio di cambiamenti
In ogni caso puoi usare il basecode di NeHe
http://nehe.gamedev.net/counter.asp?...nehegl_net.zip
Questo è il kernel wgl
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2006, 15:03   #5
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Quote:
Originariamente inviato da Andlea
si, quello che ho postato è usato nelle mfc, ma il codice si adatta con un paio di cambiamenti
In ogni caso puoi usare il basecode di NeHe
http://nehe.gamedev.net/counter.asp?...nehegl_net.zip
Questo è il kernel wgl

ti ringrazio sono partito proprio da lì ma non facendo lui uso di menu non si pone neanche il problema. tratta l'aspetto windows quel tanto che gli basta per il rendering. tra l'altro anche solo spostando la finestra il rendering si blocca

vedremo. grazie lo stesso
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2006, 10:27   #6
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
si, il basecode era solo per farti vedere come creare il context con il double buffer.
Per la questione del rendering ora non mi viene in mente nulla, di solito uso mfc e non ho questi problemi.
Prima ditutto, dove fai la chiamata al render callback? insomma, quando aggiorni l'immagine?
on idle?
IN caso affermativo invece di usare onidle, prova a settare un timer e gestire il refresh dell'immagine nell'evento WM_TIMER
Qualcosa del genere
Codice:
void OnTimer(UINT nIDEvent)
{
	Invalidate(true);
	UpdateWindow();
	CView::OnTimer(nIDEvent);
}

void OnInitialUpdate(){
	CView::OnInitialUpdate();
	SetTimer(1, 10, 0);
}
Questo è in mfc, ma adattarlo a win32 dovrebbe essere banale

Ultima modifica di Andlea : 09-07-2006 alle 10:30.
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2006, 13:33   #7
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
mmmh interessante grazie. in effetti disegna l'immagine quando non ci sono messaggi pendenti:

Codice:
	if (!InitWindow("OpenGL Framework",WIDTH,HEIGHT,BITS,fullscreen))
	{
		return 0;									// Quit If Window Was Not Created
	}


	while(!done)									// Loop That Runs While done=FALSE
	{
		if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))	// Is There A Message Waiting? - non blocking!
		{
			if (msg.message==WM_QUIT)				// Have We Received A Quit Message?
			{
				done=TRUE;							// If So done=TRUE
			}
			else									// If Not, Deal With Window Messages
			{
				TranslateMessage(&msg);				// Translate The Message
				DispatchMessage(&msg);				// Dispatch The Message
			}
		}
		else										// If There Are No Messages
		{
			// Draw The Scene.  Watch For ESC Key And Quit Messages From DrawGLScene()
			if (active)								// Program Active?
			{
				if (keys[VK_ESCAPE])				// Was ESC Pressed?
				{
					done=TRUE;						// ESC Signalled A Quit
				}
				else if (keys[VK_LEFT])
				{
					IncAngle(ANGLE_Y,DEFAULT_ANGLE_INC);					
					keys[VK_LEFT]=false;
						
				}
				else if (keys[VK_RIGHT])
				{
					IncAngle(ANGLE_Y,-DEFAULT_ANGLE_INC);
					keys[VK_RIGHT]=false;
				}
				else if (keys[VK_UP])
				{

					IncAngle(ANGLE_X,-DEFAULT_ANGLE_INC);
					keys[VK_UP]=false;
				}
				else if (keys[VK_DOWN])
				{
					IncAngle(ANGLE_X,DEFAULT_ANGLE_INC);
					keys[VK_DOWN]=false;
				}
				else if (keys['Q'])
				{
					IncAxis(AXIS_Z,DEFAULT_AXIS_INC);
					keys['Q']=false;
				}
				else if (keys['A'])
				{
					IncAxis(AXIS_Z,-DEFAULT_AXIS_INC);
					keys['A']=false;
				}
				else if (keys['Z'])
				{
					IncAxis(AXIS_X,+DEFAULT_AXIS_INC);
					keys['Z']=false;
				}
				else if (keys['X'])
				{
					IncAxis(AXIS_X,-DEFAULT_AXIS_INC);
					keys['X']=false;
				}
				else 								// Not Time To Quit, Update Screen
				{
					PaintCanvas();					// Draw The Scene
					SwapBuffers(hDC);				// Swap Buffers (Double Buffering)
				}
			}

Qui in fondo chiama PaintCanvas, che è la funzione di rendering, quando non ha altro da fare. Però i messaggi pendenti li rilancia quindi non capisco bene.

Tra l'altro mi sono accorto che stavo già utilizzando il double buffering !
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2006, 11:24   #8
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Si è normale che così il rendering si blocchi
All'init della finestra fai partire un timer con SetTimer
Poi gestisci il messaggio WM_TIMER con PrintCanvas
Qui trovi la documentazione per il timer:
http://msdn.microsoft.com/library/de...s/settimer.asp
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2006, 12:53   #9
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Quote:
Originariamente inviato da Andlea
Si è normale che così il rendering si blocchi
All'init della finestra fai partire un timer con SetTimer
Poi gestisci il messaggio WM_TIMER con PrintCanvas
Qui trovi la documentazione per il timer:
http://msdn.microsoft.com/library/de...s/settimer.asp


grazie mille ! adesso provo. ti do un altra indicazione: quando apro dei messagebox non si blocca il rendering. non vorrei fosse solo un setting che non do ai menu o alla finestra stessa sulla priorità.
mi sto chiedendo però che cosa succede se il timer lo setto a un tempo inferiore a quello che ci impiega il sistema a disegnare il frame... e se il timer scatta mentre la funzione di paint è giustamente bloccata perchè sto accedendo alle strutture con semaforo che servono per memorizzare la posizione del robot che muovo? o viceversa se lo setto troppo alto... su qualsiasi pc fa lo stesso numero di frame allora?
boh vabbeh intanto provo. ti ringrazio ancora.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2006, 13:07   #10
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Il messagebox una volta lanciato lascia passare i messaggi.
Il timer puoi impostarlo a 1ms, poi ovviamente il messaggio verra dispatchato appena il sistema riesce. Ovviamente ci sarà una differenza a seconda delle risorse libere sul pc, ma questo è del tutto normale ed inevitabile.
Se vuoi ti posto l'eseguibile di un mio programmino, n sistemi particellari, estensione dell'esempio di Nehe, dove con il timer aggiorno la posizione delle particelle e chaimo il renderer.
Aprendo menu o spsostando la finestra(questo lo mette a dura prova per via del numero di particelle) il rendering continua
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2006, 13:32   #11
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Quote:
Originariamente inviato da Andlea
Il messagebox una volta lanciato lascia passare i messaggi.
Il timer puoi impostarlo a 1ms, poi ovviamente il messaggio verra dispatchato appena il sistema riesce. Ovviamente ci sarà una differenza a seconda delle risorse libere sul pc, ma questo è del tutto normale ed inevitabile.
Se vuoi ti posto l'eseguibile di un mio programmino, n sistemi particellari, estensione dell'esempio di Nehe, dove con il timer aggiorno la posizione delle particelle e chaimo il renderer.
Aprendo menu o spsostando la finestra(questo lo mette a dura prova per via del numero di particelle) il rendering continua

ah bello quel tutorial, quello delle particelle. mi sono stampato tempo fa tutto nehe e ho tirato giù tutto il codice anche se si vede che non è un esperto programmatore è moooolto utile il suo lavoro. ormai ho capito come si fa però dai posta, credo che sia interessante anche per altri.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2006, 14:02   #12
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
http://www.megaupload.com/?d=HNSYDRN3
La gestione dei movimenti è presa da nehe, per il resto ho suddiviso in 3 classi, la particella, il sistema particellare che contiene le particelle, e il particle manager che contiene un vettore di sistemi particellari.
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 05:14   #13
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Grandissimo! ehm non ho letto il sito anche perchè mi linka una pagina generale ... però ho provato prima a gestire WM_PAINT e anche se il rendering continuava, tuttavia non riuscivo più ad aprire le messagebox in modo normale: appena selezionavo una entry del menu che doveva far comparire una messagebox la finestra diventava inattiva, renderizzava intanto però non si poteva più fare altro e non compariva nessuna messagebox... poi schiacciando ALT compariva. premuto OK la finestra tornava attiva. poi ho provato il timer come dicevi tu, inizializzato nella funzione principale della finestra con l'ultimo parametro NULL così lo gestisce la callback sotto WM_TIMER. perfetto!!! grazie mille! ora posso dormire tranquillo - sarò più tranquillo quando tra qualche giorno mi leverò questa palla al piede che è l'ultimo scoglio prima della tesi dopo innumerevoli anni

grazie ancora!!
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 09:38   #14
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Prego

Il link funziona però, evi aprirlo poi in alto a dx immettere le lettere proposte, così puoi scaricare il file
spe, lo allego qua
Allegati
File Type: zip Release.zip (17.7 KB, 3 visite)

Ultima modifica di Andlea : 12-07-2006 alle 09:45.
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2006, 12:03   #15
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
salvato! torno a dormire poi lo guardo. devo recuperare o muoio

Black imp è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
La NASA dimostrerà l'utilizzo del...
L'ESA acquisterà una missione Cre...
La NASA cambia idea sulle stazioni spazi...
Implementazione NVMe nativa disattivata ...
Polestar 2 e 3: le batterie integrano or...
Crisi delle memorie: ecco le soluzioni p...
Il satellite ESA Proba-3 è tornat...
'Chiudete (quasi) tutto', il risultato d...
Tesla, maggiore autonomia grazie a una r...
Nasce TrendAI, la divisione di Trend Mic...
Recensione Motorola Signature: il primo ...
TeraFab, Elon Musk parte all'assalto di ...
L'ambiziosa base lunare permanente sulla...
Litografia BEUV (Beyond-EUV): la startup...
SAP e l'IA agentica: dall'hype alla matu...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v