Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 52
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Integrare scheda grafica o directx a c++?

    Ho creato un applicazione con c++ che, dovrebbe, controllare 1000 volte al secondo tutti i pixel dello schermo e con get pixel verificare se qualcuno corrisponde ad un determinato colore.
    In pratica però il processore non ce la fa ed esegue l'operazione 1 volta ogni 4-5 secondi.
    Subito ho pensato k se riuscissi a integrare la scheda grafica o la directx (che gestiscono giochi con esigenze assai maggiori) deovrei farcela. Come faccio ad integrarli a c++. (Io di compilatore utilizzo dev-c++)

    Aiuto

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    bè guarda.. almeno che tu non usi cuda anche se usi le directx non usi la scheda grafica..

    e cmq controllare metti 1240x1024 pixel (fa 1269760 pixel) ogni millesimo di secondo è improponibile per un qualsiasi processore

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    DirectX fornisce tramite driver alla scheda video solo primitive per disegnare.
    Controlli di questo genere sono sempre fatti via CPU
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Mah....

    Ma come si fa cmq ad integrare la scheda grafica, ci sarà 1 modo. O cmq ci sarà una soluzione alternativa al problema, no? Sikuramente esiste

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    cuda ti da la possibilità di usare la scheda grafica come un processore altamente parallelizzato.. ma devi saper usare bene cuda e la programmazione parallela..

    sinceramente via cpu il tuo problema non è risolvibile.. non puoi fare milioni di confronti al millisecondo.. garantito

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    :oVVoVe: :oVVoVe: :oVVoVe:

    Girovagando per internet in siti inglesi ho scoperto altre persone con il mio stesso problema che sostengono che la funzione get pixel è troppo lenta. Avreste qualcosa in alternativa a questo:

    or(int t=0;t<40000;t++){



    MessageBox(NULL, "Cicle 1", "Cicle", 0);

    for(int X=0;X<1280;X++)
    for(int Y=0;Y<800;Y++)
    {

    HDC hdcScreen = GetDC(0);
    COLORREF BESTIO = GetPixel(hdcScreen, X, Y);
    ReleaseDC(0, hdcScreen);


    };
    Sleep(1);};

    ?????????????????????????????????????????????????? ??????

  7. #7
    Di sicuro incrementeresti terribilmente le prestazioni spostando l'acquisizione e il release del DC al di fuori del ciclo... inoltre un altro modo per evitare la Get/SetPixel (che sono notoriamente estremamente lente) sarebbe copiare con una BitBlt il contenuto del buffer dello schermo in una dibsection creata all'avvio del programma, e quindi controllare il contenuto della dibsection accedendo ai pixel direttamente. Resta il fatto che, anche con queste ottimizzazioni, non riuscirai mai ad eseguire l'operazione che dici 1000 volte al secondo, visto che l'analisi di 1280*800=1024000 pixel ti porterà sicuramente via più di 1 msec, e anche se fosse Windows non concederà mai al tuo programma di essere eseguito ogni millisecondo (lo scheduler di Windows assegna la CPU a "quanti" di circa 90 millisecondi, dopo i quali se c'è un altro processo in attesa la CPU viene passata ad esso). Tra l'altro una frequenza del genere è assolutamente senza senso, visto che lo schermo stesso viene ridisegnato tra le 60 e le 85 volte al secondo (a seconda delle impostazioni dello schermo e delle sue caratteristiche), se proprio vuoi fare una cosa del genere avrebbe più senso fare un controllo ogni 20 msec (per quanto io non creda che comunque basti così poco per fare un controllo del genere).
    Come al solito in questi casi, dato che la richiesta mi pare senza senso, ti chiedo ulteriori spiegazioni: a cosa ti serve fare una cosa del genere? Probabilmente infatti esiste un modo migliore per farla.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Hi hi hi

    Hai ragione ci avevo 1 pò pensato ank'io è esagerato 1000 volte al secondo.
    Cmq mi serve per fare 1 compito assegnatomi a scuola. A seconda del colore del pixel eseguire istruzioni interagendo con il mouse in un software creato appositamente dal mio prof...
    Cmq non ho capito bene come dovrei fare riesci a postarmi il sorgente per favore.
    Adesso k ci penso va bene anke 1/10 di secondo o forse un pò di più.
    Risp perfavore :quote: :quote:

  9. #9
    "A seconda del colore del pixel"? Quindi c'è un solo pixel da controllare? Questo cambia moltissimo le cose...
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    No, mi sono spiegato male

    A seconda del colore di + pixel in movimento in giro per lo schermo, se era 1 pixel solo sarebbe stata una cavolata. Per questo vorrei la rilevazione del colore il + frequente possibile....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.