Autor Wątek: 2 lub wiecej watków wykonujacych prawie to samo: SDL  (Przeczytany 5890 razy)

swiru

  • Gość
# Sierpień 09, 2008, 13:32:23
Procesor mam 1,3GHz. Normalny(czyli 1 rdzen).
Nawet niewiesz ile można na nim policzyć.
Puki co używaj 1 wątku, a jeśli pociski będą wąski gardłem w co wątpie użyj sse/mmx
Hmm

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline micran

  • Użytkownik
    • Micran - Warsztat

# Sierpień 09, 2008, 14:04:05
Sprawdziłem jeden watek a 2 i co sie okazuje 2 watki sa prawie  rowne jednemu. :o FPS nie zdołałem sprawdzić bo mam vSync i nie moge go wyłaczyć.

Offline micran

  • Użytkownik
    • Micran - Warsztat

# Sierpień 09, 2008, 14:10:28
Nie wiem czy zakładać nowy wątek, ale chyba nie mam problem z uzyciem SOIL. Mianowicie:
GLuint GetTexture(std::string Filename)
{
GLuint tex_ID;

tex_ID = SOIL_load_OGL_texture(
Filename.c_str(),
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_POWER_OF_TWO
| SOIL_FLAG_MIPMAPS
| SOIL_FLAG_MULTIPLY_ALPHA
| SOIL_FLAG_COMPRESS_TO_DXT
| SOIL_FLAG_DDS_LOAD_DIRECT
| SOIL_FLAG_INVERT_Y
);
return tex_ID;
}
Jak pod to podłaczyć tworzenie textury o tym numerze co ja chce???
Mam taka tablice textur:
GLuint  textures[500];

Offline Wiadomo

  • Użytkownik

# Sierpień 09, 2008, 14:49:33

const char* allfiles[] = { "a.jpg", "b.jpg", ... itd };

// gdzies w kodzie
for ( int iLoop = 0; iLoop < 500; iLoop ++ )
{
      textures[iLoop] =  GetTexture( allfiles[ iLoop ] ); //Dlaczego przekazujesz przez wartosc, a nie przez referencje?:>
//Ja proponuje i tak zrobic to na char, nie bawie sie STL =P
//Jak tak bardzo Ci zalezy na wydajnosci to szukaj wlasnie takich "byczkow" w petli glownej gry =]
}

To logiczne ze dwa watki wykonaja sie prawie rownie szybko na procku z jednym rdzeniem. Gdybys mial dwa rdzenie to mozliwe, ze zysk bylby w granicach 0-100% =P
« Ostatnia zmiana: Sierpień 09, 2008, 14:53:30 wysłana przez Wiadomo »

Offline skovron

  • Użytkownik
    • Healthbar Games

# Sierpień 09, 2008, 14:59:37
Jak co niektórzy nie wiedza co sie tu toczy od dawna pisze ze w jednym dodatkowym watku bedzie liczenie pocisków. Nie mówie tu o żadnym rewolucjonowaniu rynku gier czy programowaniu gier. Poprostu jak kazdy próbuje swoich rozwiazań jak mi nie beda pasować poszukam innego. Przecież najlepiej uczyć sie na bledach.
Ok wybacz źle zinterpretowałem twoją odpowiedź:
@vashpan: To sprobuj przed kazdym renderem zrobić petle for(int i=1;i<2000;i++) a w niej po 10 if ' ów (5 zagniezdzonych w sobie dla lepszego efektu). Wole to wykonywać w nowym watku. A dodaj sobie później AI i sieć to w taki sposób to miałbym na swoim słabym sprzecie coś koło ~29fps .  
@Kosai_ : Wole użyć watków. Wogóle to tanki traktuje jako zabawe i wiekszosc wszystkiego bedzie dla mnie nowościa. Nowościa dla mnie juz było OpenGL.
myślałem, że nadal upierasz się, że rozwiązanie na kilkudziesięciu wątkach będzie jednak lepsze, po tym jak zdecydowałeś się (wcześniej) robić to na dwóch wątkach.
Nie skojarzyłem też że raczej "początkujesz" i próbujesz różnych możliwości. W takim wypadku, jeśli tylko masz na to czas to śmiało próbuj i ucz się. Pamiętaj tylko, że o swoim pomyśle napisałeś na forum więc nic dziwnego, że niektórzy (co mieli okazję to sprawdzić przed tobą) dzielą się z tobą wiedzą wyniesioną z doświadczenia.

Offline micran

  • Użytkownik
    • Micran - Warsztat

# Sierpień 09, 2008, 15:45:07
@Wiadomo: To tylko w polowie mój kod. Troche to jeszcze zmienie. Czyli moge zrobić to tak: ?
textures[5]=GetTexture("plik.png");Być może skorzystam z tej petli.

Offline Esidar

  • Użytkownik

# Sierpień 09, 2008, 15:54:49
Przecież najlepiej uczyć sie na bledach.
Tak. Na cudzych. I po to jest to forum, żeby ci co już popełnili błędy, ostrzegali o nich innych.

Offline Wiadomo

  • Użytkownik

# Sierpień 09, 2008, 16:19:02
Cytuj
„Głupi człowiek nigdy się nie uczy na błędach.
Mądry człowiek uczy się na własnych błędach,
a sprytny człowiek uczy się na cudzych błędach.”
;)

micran : Tak, mozesz to zrobic w ten sposob.
« Ostatnia zmiana: Sierpień 09, 2008, 16:20:33 wysłana przez Wiadomo »

Offline micran

  • Użytkownik
    • Micran - Warsztat

# Sierpień 09, 2008, 16:25:13
Teraz mi wyskakuja jakieś bledy. (VC++ 2008EE)
Linking...
MSVCRTD.lib(cinitexe.obj) : warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
SOIL.lib(stb_image_aug.o) : error LNK2019: unresolved external symbol __alloca referenced in function _stbi_zlib_decode_noheader_buffer
SOIL.lib(image_helper.o) : error LNK2019: unresolved external symbol _sqrtf referenced in function _RGBE_to_RGBdivA2
D:\mylittletanks\tanks\Debug\tanks.exe : fatal error LNK1120: 2 unresolved externals
Build log was saved at "file://d:\mylittletanks\tanks\tanks\Debug\BuildLog.htm"
tanks - 3 error(s)
W katalogu VC++ mam SOIL.lib linkuje go. Nie wiem czy dobrze rozumie nie znalazlem nic jak to dodać poprawnie.

Offline Mormegil

  • Użytkownik
    • Moj dev blog

# Sierpień 09, 2008, 16:30:51
Plik soil.lib linkuje sie poprawnie, ale korzysta z symboli, ktorych linker nie moze znalezc. Brakuje jeszcze jakiegos pliku.

Po nazwach sadzac:
    _sqrtf - jakis modul matematyczny
    __alloca - cos z obsluga pamieci

Offline micran

  • Użytkownik
    • Micran - Warsztat

# Sierpień 09, 2008, 16:33:52
Jak znajde je to gdzie je mam wrzucic w include czy do lib . Chodzi o katalogi.

Offline vashpan

  • Użytkownik
    • Strona

# Sierpień 10, 2008, 10:47:55
Najpierw sprawdz czy soil.lib nie byl kompilowany np. pod GCC albo jakas stara wersja MSVCPP, bo te funkcje ( na dodatek niskopoziomowe ) powinny byc w runtimie.
« Ostatnia zmiana: Sierpień 10, 2008, 10:55:47 wysłana przez vashpan »