Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
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


Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
Obbligati ad acquistare una scheda madre...
GTA VI su PC? La data non c'è, ma...
Monopattini elettrici, a un anno dal dec...
Tesla Robotaxi, autista di sicurezza si ...
Samsung Galaxy S26: svelate le combinazi...
Microsoft Ignite: arriva Edge for Busine...
OPPO e Lamine Yamal uniscono sport e tec...
Microsoft, NVIDIA e Anthropic siglano un...
SpaceX potrebbe comunicare alla NASA rit...
Scoperte cavità sotterranee scava...
OnePlus anticipa l'arrivo di due nuovi p...
DJI lancia Osmo Action 6: la prima actio...
NASA: conferenza stampa sulla cometa int...
Ex CEO di TSMC passa a Intel: aperta un'...
Gigabyte X870E Aorus Elite X3D, una moth...
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: 20:21.


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