[c++] gorąco!!!

0

podczas wyświetlania okna opengl w c++, użycie procesora wynosi 100%!!!
jak przerzucić pracę na kartę graficzną?
(randeon 9200 128mb)

0

nie znam sie za dobrze na opengl, ale z tego co wiem, to jezeli masz zainstalowana karte graficzna to raczej ona zajmuje sie generowaniem grafiki w opengl. z analiz przykladowych programow zauwazylem, ze np programy napisane w BCB obsluguja zdarzenie OnIdle i tam wlasnie jest wywolywana procedura generujaca grafike. z tego tez powodu uzycie procesora jest tak duze.
wystarczy zrezygnowac z obslugi zdarzenia OnIdle, i samemu w inny sposob wywolywac procedury generujace grafike w opengl

0

lukasz21212121 zepewne twój kod działa w oparciu o pętle komunikatów Windows (działa kiedy nie ma komunikatów) lub w oparciu o pętle while. Pomyśl przez chwilę sam. Przecież tak napisany program będzie używał kompa jak się tylko da, na tyle ile komponenty mu pozwalają. Jeżeli chcesz zmniejszyć obciążenie zrób sobie timer i niech wywołuje się np. co 0.06 s (60ms) to powinno pomóc...

0

a jak zrobić timer? w pascalu było delay():-)
I co mam zrobić z tym OnIdle?

0

OnIdle to zdaje sie po polsku NaIgle, a na igle można np. usiaść. aczkolwiek może to być bolesne

0

OnIdle to zdaje sie po polsku NaIgle, a na igle można np. usiaść. aczkolwiek może to być bolesne

Jak ktoś usiądzie na igle, odpowiednio ustawionej żeby się nie przewróciła to go zaboli, ale jeżeli POMYŚLI TO NIE!!! Bo po angielsku Idle oznacza bezczynność panie żartownisiu.

0

a propoS timera to nie chce mi się pisać tego samego jeszcze raz więc umieszczam link:
http://cpw.netax.info/forum/viewtopic.php?p=2985&highlight=#2985

0

Sproboj w tej petli wstawic instrukcje Sleep(n) gdzie n to ilosc milisekund.
to powinno troche zwolnic glowny procesor, a takze nie zaszkodzi za bardzo plynnosci animacji

0

sleep nie działa, to co w tym linku jest do Vc++, a ja mam borland,
wpisałem timer(1);
ale jest błąd!!!
CZy trzeba wcześniej dać jakąś zmienną, lub jakąś bibliotekę?

0

Jeśli mozna to pokaz petle komunikatów i co sie dzieje potem...

0

tworzenie okna skopiowane z nehe, a kod rysujący:
/*************************************************************************************
*************************
***************************************************************************************/
float theta;
int DrawGLScene(GLvoid) // Here's where we do all the drawing
{
static float ola,olb,olc ;

  if(keys[VK_NUMPAD6]){ola-=0.01f;}
  if(keys[VK_NUMPAD4]){ola+=0.01f;}
  if(keys[VK_ADD]){olc+=0.01f;}
  if(keys[VK_SUBTRACT]){olc-=0.01f;}
  if(keys[VK_NUMPAD2]){olb+=0.01f;}
  if(keys[VK_NUMPAD8]){olb-=0.01f;}


glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear screen and depth buffer
glLoadIdentity();       // Reset the current modelview matrix
     glTranslatef(ola,olb,olc);
       glRotatef(90,90,0,0);




glTranslatef(0.0f,0.0f,-1.0f);
  *  glRotatef( theta, 0.0f, 1.0f, 0.0f );         * Move left 1.5 units and into the screen 6.0
glBegin(GL_TRIANGLES);		        // Drawing using triangles
           glColor3f( 1.0f, 1.0f, 0.0f ); glVertex3f( 0.0f, 0.5f, 0.0f );

glColor3f( 0.0f, 0.0f, 1.0f ); glVertex3f( 0.5f, -0.5f, -0.5f );
glColor3f( 0.0f, 0.0f, 1.0f ); glVertex3f( -0.5f, -0.5f, -0.5f );

glColor3f( 1.0f, 1.0f, 0.0f ); glVertex3f( 0.0f, 0.5f, 0.0f );
glColor3f( 0.0f, 1.0f, 0.0f ); glVertex3f( 0.5f, -0.5f, -0.5f );
glColor3f( 0.0f, 1.0f, 0.0f ); glVertex3f( 0.5f, -0.5f, 0.5f );

glColor3f( 1.0f, 1.0f, 0.0f ); glVertex3f( 0.0f, 0.5f, 0.0f );
glColor3f( 1.0f, 0.0f, 0.0f ); glVertex3f( -0.5f, -0.5f, 0.5f );
glColor3f( 1.0f, 0.0f, 0.0f ); glVertex3f( 0.5f, -0.5f, 0.5f );

glColor3f( 1.0f, 1.0f, 0.0f ); glVertex3f( 0.0f, 0.5f, 0.0f );
glColor3f( 1.0f, 1.0f, 1.0f ); glVertex3f( -0.5f, -0.5f, 0.5f );
glColor3f( 1.0f, 1.0f, 1.0f ); glVertex3f( -0.5f, -0.5f, -0.5f );

glEnd();

theta += 0.15f; // Finished Drawing The Triangle
glTranslatef(0.0f,-0.5f,0.0f);
glBegin(GL_QUADS);
glColor3f( 1.0f, 1.0f, 0.0f ); glVertex3f( 2.0f, 0.0f, 2.0f );
glColor3f( 0.0f, 1.0f, 0.0f ); glVertex3f( 2.0f, 0.0f, -2.0f );
glColor3f( 0.0f, 1.0f, 0.0f ); glVertex3f( -2.0f, 0.0f, -2.0f );
glColor3f( 1.0f, 1.0f, 0.0f ); glVertex3f( -2.0f, 0.0f, 2.0f );

glEnd();

return true;                            // Done drawing the quad

}
/*************************************************************************************
*************************
***************************************************************************************/

NO I TEGO timer() mi nie działa

0

to co napisales to jest to procedura rysujaca. tutaj bardziej chodzi o petle, z ktorej jest ona wywolywana. mozna takze zmodyfikowac te procedure, ale bardziej zalecal bym wlasnie zmodyfikowanie petli glownej.
a funkcja Sleep() dziala na 100% poniewaz jest to funkcja winapi (oczywiscie jezeli piszesz pod windows. sprawdz dokladnie w pomocy opis tej funkcji.
natomiast timer() nie jest zadna funkcja! informacji odnosnie timer'a takze mozesz znalezc w pomocy

0

dzięki, wszytko ok.

1 użytkowników online, w tym zalogowanych: 0, gości: 1