Performance


  • Mod

    was ist an einer 100% auslastung schlecht? man muesste sich doch eher bei nur 5% auslastung sorgen machen wieso der rechner zu 95% nichts tut.



  • @rapso ich bin faul also darf mein Laptop auch faul sein. Daher soll er eine nidrige Auslastung haben 😉

    Hier ist mal mein Code mit dem ich Texturen lade und wie ich sie einbinde.

    #include "Textur.h"
    
    GLboolean CTextur::init()
    {
    	ilutRenderer(ILUT_OPENGL);
    	ilInit();
    	iluInit();
    	ilutInit();
    
    	return true;
    }
    
    CTextur::CTextur()
    {
    	id = 0;
    	init();
    }
    
    CTextur::CTextur(const char* filename)
    {
    	id = 0;
    	init();
    	load(filename);
    }
    
    CTextur::~CTextur()
    {
    	kill();
    }
    
    GLuint CTextur::load(const char *filename)
    {
    	ILuint imageId;
    	ilGenImages(1, &imageId);
    	ilBindImage(imageId);
    	if (!ilLoadImage( (const char *)filename )) printf("Loading image (%s) failed\n", filename);
    	else printf("Textur %s loaded\n", filename);
    
    	switch (ilGetError()) {
    		case IL_INVALID_ENUM:
    			printf("An unacceptable enumerated value was passed to a function.");
    			break;
    		case IL_OUT_OF_MEMORY:
    			printf("Could not allocate enough memory in an operation. ");
    			break;
    		case IL_FORMAT_NOT_SUPPORTED:
    			printf("The format a function tried to use was not able to be used by that function. ");
    			break;
    		case IL_INTERNAL_ERROR:
    			printf("A serious error has occurred. Please e-mail DooMWiz with the conditions leading up to this error being reported. ");
    			break;
    		case IL_INVALID_VALUE:
    			printf("An invalid value was passed to a function or was in a file. ");
    			break;
    		case IL_ILLEGAL_OPERATION:
    			printf("The operation attempted is not allowable in the current state. The function returns with no ill side effects. ");
    			break;
    		case IL_ILLEGAL_FILE_VALUE:
    			printf("An illegal value was found in a file trying to be loaded. ");
    			break;
    		case IL_INVALID_FILE_HEADER:
    			printf("A file's header was incorrect. ");
    			break;
    		case IL_INVALID_PARAM:
    			printf("An invalid parameter was passed to a function, such as a NULL pointer. ");
    			break;
    		case IL_COULD_NOT_OPEN_FILE:
    			printf("Could not open the file specified. The file may already be open by another app or may not exist. ");
    			break;
    		case IL_INVALID_EXTENSION:
    			printf("The extension of the specified filename was not correct for the type of image-loading function. ");
    			break;
    		case IL_FILE_ALREADY_EXISTS:
    			printf("The filename specified already belongs to another file. To overwrite files by default, call ilEnable with the IL_FILE_OVERWRITE parameter. ");
    			break;
    		case IL_OUT_FORMAT_SAME:
    			printf("Tried to convert an image from its format to the same format. ");
    			break;
    		case IL_STACK_OVERFLOW:
    			printf("One of the internal stacks was already filled, and the user tried to add on to the full stack. ");
    			break;
    		case IL_STACK_UNDERFLOW:
    			printf("One of the internal stacks was empty, and the user tried to empty the already empty stack. ");
    			break;
    		case IL_INVALID_CONVERSION:
    			printf("An invalid conversion attempt was tried. ");
    			break;
    		case IL_LIB_JPEG_ERROR:
    			printf("An error occurred in the libjpeg library. ");
    			break;
    		case IL_LIB_PNG_ERROR:
    			printf("An error occurred in the libpng library. ");
    			break;
    		case ILUT_NOT_SUPPORTED:
    			printf("A type is valid but not supported in the current build.");
    			break;
    		case IL_UNKNOWN_ERROR:
    		default:
    			break;
    	}
    	if (ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE) == 0)
    		return -1;
    
    	// Getting width and height
    	width = ilGetInteger(IL_IMAGE_WIDTH);
    	height = ilGetInteger(IL_IMAGE_HEIGHT);
    
    	// Creating OpenGL texture : MipMapped
    	glGenTextures(1, &id);
    	bind();
    
    	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
    	gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, width, height, GL_RGBA, GL_UNSIGNED_BYTE, ilGetData());
    
    	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ilGetData());
    
    	// Deleting image
    	ilDeleteImages(1, &imageId);
    
    	return 0;
    }
    
    void CTextur::kill()
    {
    	if (id != 0)
    	{
    		glDeleteTextures(1, &id);
    		id = 0;
    	}
    }
    
    void CTextur::bind()
    {
    	glEnable(GL_TEXTURE_2D);
    	glBindTexture(GL_TEXTURE_2D, id);
    }
    
    void CTextur::unbind()
    {
    	glBindTexture(GL_TEXTURE_2D, 0);
    	glDisable(GL_TEXTURE_2D);
    }
    

    Hier binde ich die Datei an das Objekt

    [/cpp]

    #include "Key.h"
    
    CKey::CKey(float rr,float gg,float bb,char cc,CTextur *Key, CTextur *Char): r(rr), g(gg), b(bb), character(cc), texChar(Char), texKey(Key)
    {
    	r = rr;
    	g = gg;
    	b = bb;
    	character = cc;
    }
    
    CKey::~CKey(void)
    {
    }
    
    void CKey::draw(vector2df size)
    {
    	//glColor3f(r,g,b);
    	glPushMatrix();
    	texKey->bind();
    	glBegin(GL_QUADS);
    		glTexCoord2f(0,1); glVertex2f(0,0);
    		glTexCoord2f(0,0); glVertex2f(0,size.Y);
    		glTexCoord2f(1,0); glVertex2f(size.X,size.Y);
    		glTexCoord2f(1,1); glVertex2f(size.X,0);
    	glEnd();
    	texKey->unbind();
    	texChar->bind();
    	glBegin(GL_QUADS);
    		glTexCoord2f(0, 1); glVertex2f(size.X*0.25f,size.Y*0.25f);
    		glTexCoord2f(0, 0); glVertex2f(size.X*0.25f,size.Y*0.75f);
    		glTexCoord2f(1, 0); glVertex2f(size.X*0.75f, size.Y*0.75f);
    		glTexCoord2f(1, 1); glVertex2f(size.X*0.75f,size.Y*0.25f);
    	glEnd();
    	texChar->unbind();
    	glPopMatrix();
    	glTranslatef(size.X,0,0.0f);
    }
    
    void CKey::_draw(vector2df size)
    {	
    }
    
    und hier werden sie initialisiert
    
    [cpp]
    #include "Keyboard.h"
    
    CKeyboard::CKeyboard(void) : layout(5)
    {
    	pos.X = -0.5;
    	pos.Y = -0.7;
    	size.X = 1.5;
    	size.Y = 1.5;
    	rot = 0;
    	output = new COutput();
    	output->size.X = size.X;
    	output->size.Y = size.Y*0.4f;
    	output->pos.X = pos.X;
    	output->pos.Y = pos.Y + size.Y;
    	initiated = false;
    	visible = true;
    }
    
    CKeyboard::~CKeyboard(void)
    {
    	for( std::map<const char, CTextur*>::iterator it = texKey.begin(); it != texKey.end();)
    	{
    		it->second->~CTextur();
    		it = texKey.erase(it);
    	}
    	for( Layout::iterator R = layout.begin() ; R != layout.end() ; ++R )
    	{
    		for( Row::iterator K = R->begin() ; K != R->end() ; ++K )
    		{
    			delete(*K);
    		}
    	}
    }
    
    void CKeyboard::init()
    {
    	texKey['°'] = new CTextur("Tasten/Taste.tif");
    
    	texKey['|'] = new CTextur("Tasten/Esc.tif");
    	layout[0].push_back(new CKey(1.0,0.0,0.0,'|',texKey['°'],texKey['|']));
    
    	texKey['1'] = new CTextur("Tasten/1.tif");
    	layout[0].push_back(new CKey(0.0,1.0,0.0,'1',texKey['°'],texKey['1']));
    
    	texKey['2'] = new CTextur("Tasten/2.tif");
    	layout[0].push_back(new CKey(0.0,0.1,0.0,'2',texKey['°'],texKey['2']));
    
    	texKey['3'] = new CTextur("Tasten/3.tif");
    	layout[0].push_back(new CKey(0.0,0.0,1.0,'3',texKey['°'],texKey['3']));
    
    	texKey['4'] = new CTextur("Tasten/4.tif");
    	layout[0].push_back(new CKey(0.0,0.0,0.1,'4',texKey['°'],texKey['4']));
    
    	texKey['5'] = new CTextur("Tasten/5.tif");
    	layout[0].push_back(new CKey(0.0,0.0,1.0,'5',texKey['°'],texKey['5']));
    
    	texKey['6'] = new CTextur("Tasten/6.tif");
    	layout[0].push_back(new CKey(0.0,0.1,0.0,'6',texKey['°'],texKey['6']));
    
    	texKey['7'] = new CTextur("Tasten/7.tif");
    	layout[0].push_back(new CKey(0.0,1.0,0.0,'7',texKey['°'],texKey['7']));
    
    	texKey['8'] = new CTextur("Tasten/8.tif");
    	layout[0].push_back(new CKey(0.1,0.0,0.0,'8',texKey['°'],texKey['8']));
    
    	texKey['9'] = new CTextur("Tasten/9.tif");
    	layout[0].push_back(new CKey(1.0,0.0,0.0,'9',texKey['°'],texKey['9']));
    
    	texKey['0'] = new CTextur("Tasten/0.tif");
    	layout[0].push_back(new CKey(0.1,0.0,0.0,'0',texKey['°'],texKey['0']));
    
    	texKey['<'] = new CTextur("Tasten/Löschen.tif");
    	layout[0].push_back(new CKey(1.0,1.0,0.0,'<',texKey['°'],texKey['<']));
    
    	texKey['<'] = new CTextur("Tasten/Löschen.tif");
    	layout[0].push_back(new CKey(1.0,1.0,0.0,'<',texKey['°'],texKey['<']));
    
    	texKey['Q'] = new CTextur("Tasten/Q.tif");
    	layout[1].push_back(new CKey(0.0,0.1,0.0,'Q',texKey['°'],texKey['Q']));
    
    	texKey['W'] = new CTextur("Tasten/W.tif");
    	layout[1].push_back(new CKey(0.0,0.0,1.0,'W',texKey['°'],texKey['W']));
    
    	texKey['E'] = new CTextur("Tasten/E.tif");
    	layout[1].push_back(new CKey(0.0,0.0,0.1,'E',texKey['°'],texKey['E']));
    
    	texKey['R'] = new CTextur("Tasten/R.tif");
    	layout[1].push_back(new CKey(0.0,0.0,1.0,'R',texKey['°'],texKey['R']));
    
    	texKey['T'] = new CTextur("Tasten/T.tif");
    	layout[1].push_back(new CKey(0.0,0.1,0.0,'T',texKey['°'],texKey['T']));
    
    	texKey['Z'] = new CTextur("Tasten/Z.tif");
    	layout[1].push_back(new CKey(0.0,1.0,0.0,'Z',texKey['°'],texKey['Z']));
    
    	texKey['U'] = new CTextur("Tasten/U.tif");
    	layout[1].push_back(new CKey(0.1,0.0,0.0,'U',texKey['°'],texKey['U']));
    
    	texKey['I'] = new CTextur("Tasten/I.tif");
    	layout[1].push_back(new CKey(1.0,0.0,0.0,'I',texKey['°'],texKey['I']));
    
    	texKey['O'] = new CTextur("Tasten/O.tif");
    	layout[1].push_back(new CKey(0.1,0.0,0.0,'O',texKey['°'],texKey['O']));
    
    	texKey['P'] = new CTextur("Tasten/P.tif");
    	layout[1].push_back(new CKey(0.0,1.0,0.0,'P',texKey['°'],texKey['P']));
    
    	texKey['Ü'] = new CTextur("Tasten/Ü.tif");
    	layout[1].push_back(new CKey(0.0,0.1,0.0,'Ü',texKey['°'],texKey['Ü']));
    
    	texKey['\n'] = new CTextur("Tasten/Return.tif");
    	layout[1].push_back(new CKey(0.0,1.0,0.0,'\n',texKey['°'],texKey['\n']));
    
    	texKey['\n'] = new CTextur("Tasten/Return.tif");
    	layout[1].push_back(new CKey(0.0,1.0,0.0,'\n',texKey['°'],texKey['\n']));
    
    	texKey['A'] = new CTextur("Tasten/A.tif");
    	layout[2].push_back(new CKey(1.0,0.0,0.0,'A',texKey['°'],texKey['A']));
    
    	texKey['S'] = new CTextur("Tasten/S.tif");
    	layout[2].push_back(new CKey(0.1,0.0,0.0,'S',texKey['°'],texKey['S']));
    
    	texKey['D'] = new CTextur("Tasten/D.tif");
    	layout[2].push_back(new CKey(0.0,1.0,0.0,'D',texKey['°'],texKey['D']));
    
    	texKey['F'] = new CTextur("Tasten/F.tif");
    	layout[2].push_back(new CKey(0.0,0.1,0.0,'F',texKey['°'],texKey['F']));
    
    	texKey['G'] = new CTextur("Tasten/G.tif");
    	layout[2].push_back(new CKey(0.0,0.0,1.0,'G',texKey['°'],texKey['G']));
    
    	texKey['H'] = new CTextur("Tasten/H.tif");
    	layout[2].push_back(new CKey(0.0,0.0,0.1,'H',texKey['°'],texKey['H']));
    
    	texKey['J'] = new CTextur("Tasten/J.tif");
    	layout[2].push_back(new CKey(0.0,0.0,1.0,'J',texKey['°'],texKey['J']));
    
    	texKey['K'] = new CTextur("Tasten/K.tif");
    	layout[2].push_back(new CKey(0.0,0.1,0.0,'K',texKey['°'],texKey['K']));
    
    	texKey['L'] = new CTextur("Tasten/L.tif");
    	layout[2].push_back(new CKey(0.0,1.0,0.0,'L',texKey['°'],texKey['L']));
    
    	texKey['Ö'] = new CTextur("Tasten/Ö.tif");
    	layout[2].push_back(new CKey(0.1,0.0,0.0,'Ö',texKey['°'],texKey['Ö']));
    
    	texKey['Ä'] = new CTextur("Tasten/Ä.tif");
    	layout[2].push_back(new CKey(1.0,0.0,0.0,'Ä',texKey['°'],texKey['Ä']));
    
    	texKey['\n'] = new CTextur("Tasten/Return.tif");
    	layout[2].push_back(new CKey(0.0,1.0,0.0,'\n',texKey['°'],texKey['\n']));
    
    	texKey['\n'] = new CTextur("Tasten/Return.tif");
    	layout[2].push_back(new CKey(0.0,1.0,0.0,'\n',texKey['°'],texKey['\n']));
    
    	texKey['Y'] = new CTextur("Tasten/Y.tif");
    	layout[3].push_back(new CKey(0.0,0.1,0.0,'Y',texKey['°'],texKey['Y']));
    
    	texKey['X'] = new CTextur("Tasten/X.tif");
    	layout[3].push_back(new CKey(0.0,0.0,1.0,'X',texKey['°'],texKey['X']));
    
    	texKey['C'] = new CTextur("Tasten/C.tif");
    	layout[3].push_back(new CKey(0.0,0.0,0.1,'C',texKey['°'],texKey['C']));
    
    	texKey['V'] = new CTextur("Tasten/V.tif");
    	layout[3].push_back(new CKey(0.0,0.0,1.0,'V',texKey['°'],texKey['V']));
    
    	texKey['B'] = new CTextur("Tasten/B.tif");
    	layout[3].push_back(new CKey(0.0,0.1,0.0,'B',texKey['°'],texKey['B']));
    
    	texKey['N'] = new CTextur("Tasten/N.tif");
    	layout[3].push_back(new CKey(0.0,1.0,0.0,'N',texKey['°'],texKey['N']));
    
    	texKey['M'] = new CTextur("Tasten/M.tif");
    	layout[3].push_back(new CKey(0.1,0.0,0.0,'M',texKey['°'],texKey['M']));
    
    	texKey['ß'] = new CTextur("Tasten/ß.tif");
    	layout[3].push_back(new CKey(1.0,0.0,0.0,'ß',texKey['°'],texKey['ß']));
    
    	texKey['.'] = new CTextur("Tasten/Punkt.tif");
    	layout[3].push_back(new CKey(0.1,0.0,0.0,'.',texKey['°'],texKey['.']));
    
    	texKey[','] = new CTextur("Tasten/Komma.tif");
    	layout[3].push_back(new CKey(0.0,1.0,0.0,',',texKey['°'],texKey[',']));
    
    	texKey[':'] = new CTextur("Tasten/Doppelpunkt.tif");
    	layout[3].push_back(new CKey(0.0,0.1,0.0,':',texKey['°'],texKey[':']));
    
    	texKey['>'] = new CTextur("Tasten/Up.tif");
    	layout[3].push_back(new CKey(0.0,1.0,1.0,'>',texKey['°'],texKey['>']));
    
    	texKey['>'] = new CTextur("Tasten/Up.tif");
    	layout[3].push_back(new CKey(0.0,1.0,1.0,'>',texKey['°'],texKey['>']));
    
    	texKey['?'] = new CTextur("Tasten/Fragezeichen.tif");
    	layout[4].push_back(new CKey(1.0,0.0,0.0,'?',texKey['°'],texKey['?']));
    
    	texKey['!'] = new CTextur("Tasten/Ausrufezeichen.tif");
    	layout[4].push_back(new CKey(0.1,0.0,0.0,'!',texKey['°'],texKey['!']));
    
    	texKey[' '] = new CTextur("Tasten/Leertaste.tif");
    	layout[4].push_back(new CKey(0.0,1.0,1.0,'_',texKey['°'],texKey[' ']));
    
    	texKey[' '] = new CTextur("Tasten/Leertaste.tif");
    	layout[4].push_back(new CKey(0.0,1.0,1.0,'_',texKey['°'],texKey[' ']));
    
    	texKey[' '] = new CTextur("Tasten/Leertaste.tif");
    	layout[4].push_back(new CKey(0.0,1.0,1.0,'_',texKey['°'],texKey[' ']));
    
    	texKey[' '] = new CTextur("Tasten/Leertaste.tif");
    	layout[4].push_back(new CKey(0.0,1.0,1.0,'_',texKey['°'],texKey[' ']));
    
    	texKey[' '] = new CTextur("Tasten/Leertaste.tif");
    	layout[4].push_back(new CKey(0.0,1.0,1.0,'_',texKey['°'],texKey[' ']));
    
    	texKey[' '] = new CTextur("Tasten/Leertaste.tif");
    	layout[4].push_back(new CKey(0.0,1.0,1.0,'_',texKey['°'],texKey[' ']));
    
    	texKey['"'] = new CTextur("Tasten/Häckchen.tif");
    	layout[4].push_back(new CKey(0.0,1.0,0.0,'"',texKey['°'],texKey['"']));
    
    	texKey['('] = new CTextur("Tasten/(.tif");
    	layout[4].push_back(new CKey(0.1,0.0,0.0,'(',texKey['°'],texKey['(']));
    
    	texKey[')'] = new CTextur("Tasten/).tif");
    	layout[4].push_back(new CKey(1.0,0.0,0.0,')',texKey['°'],texKey[')']));
    
    	//output->textures = texKey;
    
    	initiated = true;
    }
    void CKeyboard::draw()
    {
    	if(!initiated) 
    	{
    		init();
    	}
    
    	vector2df keySize(size.X/layout[0].size(), size.Y/layout.size());
    	glPushMatrix();
    	glLoadIdentity();
    	glTranslatef(pos.X,pos.Y,0.0f);
    	glRotatef(rot,0,0,1);
    	output->size.X = size.X;
    	output->size.Y = size.Y*0.4f;
    	output->pos.X = pos.X;
    	output->pos.Y = pos.Y + size.Y;
    	output->draw();
    
    	if(visible)
    	{
    		glColor3f(1.0f,1.0f,1.0f);
    		glBegin(GL_QUADS);
    			glVertex2f(0,0);
    			glVertex2f(0,size.Y);
    			glVertex2f(size.X,size.Y);
    			glVertex2f(size.X,0);
    		glEnd();
    		glTranslatef(0,size.Y,0.0f);
    		glTranslatef(0,-(size.Y/5),0.0f);		
    		glPushMatrix();
    		for(Layout::iterator it = layout.begin(); it != layout.end(); ++it)
    		{
    			glPushMatrix();
    			for(Row::iterator rit = it->begin(); rit != it->end(); ++rit)
    			{
    				(*rit)->draw(keySize);
    			}
    			glPopMatrix();
    			glTranslatef(0,-keySize.Y,0.0f);
    		}
    		glPopMatrix();
    	}
    	glPopMatrix();
    }
    
    bool CKeyboard::hitTest(vector2df maus, bool drag)
    {
    	if  (   maus.X > pos.X
    		&&	maus.X < pos.X + size.X
    		&&	maus.Y > pos.Y
    		&&	maus.Y < pos.Y + size.Y
    		)
    	{
    		vector2df dist = maus - pos;
    		dist.Y = (size.Y-dist.Y);
    
    		if(!drag && dist.Y > size.Y)  
    		{
    			visible = !visible;
    		}
    		else if(visible)
    		{
    			vector2df keySize(size.X/layout[0].size(), size.Y/layout.size());
    			unsigned int row = int(dist.Y/keySize.Y);
    			unsigned int column = int(dist.X/keySize.X);
    			if(row<layout.size() && column<layout[row].size())
    			{				
    				/*if(output->add(layout[row][column]->character))
    				{
    					//std::cout<<"Tastatur getroffen:";
    					//std::cout<<"distX="<<dist.X<<", distY="<<dist.Y<<"=";
    					std::cout<<layout[row][column]->character<<"\n";
    				}
    				else
    				{
    					visible = false;
    				}*/
    			}
    		}
    		if(dist.Y > size.Y) 
    		{
    			return true;
    		}
    	}
    	return false;
    }
    
    void CKeyboard::move(vector2df maus)
    {
    	pos.Y +=- maus.Y;
    	pos.X +=- maus.X;
    }
    

    In dem restlichen Teil kommen keine Texturen mehr vor bzw. werden geladen oder ähnliches.


  • Mod

    Ich sehe keine stelle im code die dafuer sorgen wuerde dass dein programm nicht 100% auslastet. wenn nicht gerade irgend ne hardware stallt, ist 100% wohl richtig.



  • Hä? Was meinst du damit?
    Also wie gesagt ich habe von einem Freund eine fast gleich aber die hat eine minimal Auslastung.
    Gibt es eine Möglichkeit mein Programm zu optimieren?



  • Gibt es eine Möglichkeit mein Programm zu optimieren?

    Sicher gibt es die. Die Auslastung deines PC´s hat damit aber in dem Falle nichts zu tun. Ist doch OK wenn dein PC seine Resourcen auch in die Ausführung des Programms steckt. Bei deinem Freund läuft dann wohl was falsch.



  • Wenn dein Zeil eine möglichst geringe CPU-Auslastung ist, dann einfach sleeps reinbauen.


  • Mod

    Lenni schrieb:

    Hä? Was meinst du damit?

    Hae? womit?

    Also wie gesagt ich habe von einem Freund eine fast gleich aber die hat eine minimal Auslastung.

    Wieso sollte ein programm nicht zu 100% laufen? Ich sehe keinen Sinn darin dass das Programm von selbst entscheiden sollte 10s bei 10%Last zu laufen, statt 1s bei 100% last.

    Gibt es eine Möglichkeit mein Programm zu optimieren?

    du kannst "Sleep" einbauen. die funktion erlaubt dir dein programm fuer ms zu pausieren, sodass du deine wunschauslastung/langsamkeit deines programmes erreichen kannst.



  • das ist aber alles sehr hypothetisch, denn anhand des gezeigten source-codes ist gar nicht ersichtlich in welchen intervalen ein redraw stattfindet.
    falls das permanent passiert ist die auslastung zwangslaeufig maximal.



  • 1. Falls ihr mich falsch versteht. Mein Programm läuft dauerhaft mit einer CPU-Auslastung von 100%. Auf gut Deutsch ich kann damit nicht arbeiten. Und da es sich um eine Tastatur handelt, wäre es vll ganz gut wenn man sie auch benutzen kann.

    2. In der Render-Funktion habe ich schön längst sleep(10) eingebaut aber es bringt gar nichts

    3. Ich habe nicht das Gefühl das bei dem Freund von mir was falsch läuft, da man bei ihm perfekt arbeiten kann und bei mir rukelt halt alles etc..



  • Kann es sein, dass du ne Riva TNT und nen Pentium 1 Prozessor mit 90 Mhz hast ?



  • 1,7 GH
    1 GB Ram

    Dürfte reichen wie schon gesagt die andere Tastatur von dem Freund läuft. Und damit meine ich bei mir am PC. Und weil meine sehr fast identisch ist, dürfte da ja nicht so ein großer unterscheid sein



  • Lenni schrieb:

    1,7 GH
    1 GB Ram

    Dürfte reichen wie schon gesagt die andere Tastatur von dem Freund läuft. Und damit meine ich bei mir am PC. Und weil meine sehr fast identisch ist, dürfte da ja nicht so ein großer unterscheid sein

    Evtl. hast du keine (OpenGL) Treiber installiert? Oder einen Hardware-Defekt?

    und wie hellihjb schon gefragt hat: wann/wie/wie oft wird denn die Draw-Funktion aufgerufen?

    Und ein ganz allgemeiner Tipp: benutz mal einen Profiler



  • Was meinst du mit Opengl Treiber? Also ich habe schon andere Programme geschrieben, die alle liefen. Nur wenn ich Texturen lade.
    Und zu den draw-Funktionen.
    Also die gesamte Tastatur wird einmal gezeichnet in der Main und zwar in Renderteil wo sie auch hingehört. Die Tasten werden auch einmal auf die Tastatur gezeichen genau wie die Tasten.
    Hardware-Defekt kann es wohl auch nicht sein. Ansonsten würden doch die anderen Programme nicht laufen mit Texturen die ich von anderen habe.
    Und was meinst du mit Profiler?



  • Die OpenGL-Funktionen stellt normalerweise dein Grafikkarten-Treiber bereit, nur wenn dieser nicht installiert ist, stellt Windows die Funktionen bereit. Natürlich ist dies dann meist langsamer usw.



  • Gut ja stimmt. Aber ich werde wohl welche haben, wenn schon die anderen Programme mit Grafiken super funktionieren und nur meine nicht. Da muss es doch an einem Quellcode Problem liegen und nicht etwa an den Treibern oder PC selber.
    Der PC sucht sich ja nicht aus welchen Coder er mag und Reesourcen zur Verfügung stellt und anderen nicht.


  • Mod

    Lenni schrieb:

    Gut ja stimmt. Aber ich werde wohl welche haben, wenn schon die anderen Programme mit Grafiken super funktionieren und nur meine nicht. Da muss es doch an einem Quellcode Problem liegen und nicht etwa an den Treibern oder PC selber.

    wenn du etwas verlangst was deine hardware nicht liefern kann, schaltet opengl eventuell in einen emulationsmodus.
    welche graka hast du? frag bei opengl den treibernamen ab (gibt funktionen die dir nen string mit namen liefern, ich weiss es gerade nicht auswendig)

    Der PC sucht sich ja nicht aus welchen Coder er mag und Reesourcen zur Verfügung stellt und anderen nicht.

    er stellt es dem zu verfuegung bei dem er es kann.



  • achso okay hmm mal gucken

    öhm meine Grafigkarte is ATI MOBILITY RADEON X300


  • Mod

    http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/getstring.html

    bzw

    http://www.opengl.org/resources/faq/technical/extensions.htm

    kann dir helfen rauszufinden ob du hardwaresupport hast oder emuliert wirst.

    noch ein einfacher tests ist bilineares filtering bei den texturen auszuschalten, die emulierte version wird dann sehr viel schneller laufen, wenn es auf hardware laeuft wird es gleich langsam bleiben oder sogar ein wenig langsammer sein.



  • das ist aber alles sehr hypothetisch, denn anhand des gezeigten source-codes ist gar nicht ersichtlich in welchen intervalen ein redraw stattfindet.
    falls das permanent passiert ist die auslastung zwangslaeufig maximal.

    Ein guter Punkt. Hast du VSync deaktiviert, wenn ja, dann läuft dein Programm zwangsläufig mit 100% Auslastung.

    Andere Frage: Du benutzt doch hoffentlich Texturen der Größe 2^n? Andere Größen werden nämlich nur von neueren Grafikkarten unterstützt, die Extension dafür heißt GL_ARB_texture_non_power_of_two...

    Grüße

    Martin



  • Okay da werde ich mal nachgucken. Danke!
    Öhm doofe Frage.. wo kann ich das VSync deaktivieren? Kp wo das steht.
    Und zu der Größe. Ja ich verwende die richtige


Anmelden zum Antworten