GDI a kontekst urządzenia

GDI a kontekst urządzenia
wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 683
0

w OpenGl jest tak:

Kopiuj
static HGLRC hRC;					// kontekst tworzenia grafiki
static HDC hDC;

hDC = GetDC(hwnd);			// pobiera kontekst urządzenia dla okna
SetupPixelFormat(hDC);		// wywołuje funkcję określającą format pikseli
// tworzy kontekst tworzenia grafiki i czyni go bieżącym
hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRC);

czy mozna tak samo dla GDI? ja mam tak:

Kopiuj
mydc = GetDC(myconsole);
// << w tym miejscu czy mozna tez załączyć wspomaganie	
hBitmapDC = CreateCompatibleDC(mydc);

jest taka mozliwosć?

CP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 70
0

Ja tego GDI używałem tylko do rysowania w innych aplikacjach, notatniku, konsoli, czy jakiejś grze, która np. używała opengl czy direct. Ogólnie działa wszędzie bez problemu, zależy co chcesz zrobić, masz aplikację winapi i porysować po niej, czy opengl jest natywnie generowane, a ty za pomocą GDI coś rysujesz.
Ogólnie bez problemu to idzie zrobić, chyba że coś dziwnego chcesz wykonać.

wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 683
0

jak idzie to zrobić to pomóż proszę .... będę wdzięczny 😉 , ja chce dołączyć to wspomaganie sprzętowe ponieważ fps idą od 30 do 60 fps a tak powinno być trzy krocie więcej ....

CP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 70
0

Jak chcesz używać GPU, to cokolwiek w opengl zrobisz to cpu to wysyła jako instrukcje do gpu i tam są wykonywane, tam sprzętowo można różne operacje wykonywać jak rasteryzacja, gdzie zrobienie tego na CPU jest niby proste, ale albo rekurencyjne, albo całą tablicę trzeba przejść z maską, więc jest to dużo wolniejsze od natywnego rozwiązania wbudowanego w procesor..

CUDA też można użyć, dość przyjemnie się tego używa czy to w C++/Python.
I obliczenia łatwo w GPU przeprowadzić.

Tu z tego co piszesz za dużo nie wynika co robisz.

wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 683
0

DrawConsole.rar
klaiwsze A W S D a Esc wyjscie , kompiluje sie pod g++
chodzi o to zeby przyspieszyc bo za mało fps koło 30

CP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 70
0

No z tego co wysłałeś wynika, że pixel po pixelu tworzysz bitmapę na CPU i potem w całości ją rysujesz za pomocą GDI.
A w innym miejscu pixel po pixelu rysujesz po ekranie.

Mógłbyś zrobić sobie cpu profiling, sprawdzić ile siedzi program w każdej funkcji za pomocą np. gperf.
Żeby zobaczyć ile czasu marnuje w każdej funkcji cpu.

Nie wiem czy ty tam przekopiowujesz z jednego bufora do drugiego pixel po pixelu czy coś, wydaje się jakaś redundantna operacja.
Ta funkcja render light wydaje się też mocno kosztowna, bo tam przechodzisz cały buffor pixel po pixelu i potem za pomocą GDI putpixel rysujesz po jednym pixelu na ekranie. Też zamiast po pixelu, a wszystkie na raz narysować by było optymalnie prawdopodobnie, batch zawsze trochę wydajniejszy jest.

Opengl ma operacje matematyczne na GPU, są one dla macierzy przystosowane byś musiał trochę przerobić równanie.

wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 683
0

na OpenGl to ja się znam tylko mam chętke napisać pod GDI w konsoli silniczek bo bede go potrzebował ten projekt DrawConsole do czegoś innego , ten projekt najpierw wszystko jest wpisywane do tablicy a potem na koncu rysowany buffor i teraz zagadka jak załączyć kontekst tak jak w opengl aby akceleracja sprzetowa zadziała bo za mało FPS .

wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 683
0

no dobra ale czy mozna czy nie mozna załączyć kontekstu tak jak w opengl tak jak w temacie .. da się ?
wg mnie to jest jakis lewy software bo gdy by było full original akeleracja to powinno byc z 500-800 klatek jak jest w demo prostym w OpenGl

wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 683
0

DrawConsole.rar
górne światło jest zwykłe a dolne z bump mappingiem

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.