R
meines wissens nach sind große polys schneller verarbeitet als kleine, weil dort weniger kanten entstechen. kanten sind auf neuen grakas schlecht, weil die dann eventuell 256bit aus dem speicher lesen, 32bit setzen und dann 256bit in den speicher schreiben müssen an einer kante. das entfällt bei größen polys. wenn du aber ein riesiges poly hast und man kann nur wenig davon sehen, dann wird das noch über den rand hinweg gezeichnet mittels band-guard.
wenn du peformance gewinnen willst hilft es oft bei multitexturing mipmaps und gepackte texturen zu verwenden.
int CTexture::isExtensionSupported(const char *extension)
{
char *extensions;
extensions=(char *) glGetString(GL_VERSION);
extensions=(char *) glGetString(GL_EXTENSIONS);
int len=strlen(extensions);
char Str[10240];
for(int i=0; i<len; i++)
if(extensions[i]==' ')
Str[i]='\n';
else
Str[i]=extensions[i];
if(isInString(Str,extension))
return 1;
return 0;
}
bool CTexture::Init()
{
int hasDxt1 = isExtensionSupported("GL_ARB_texture_compression");
if(!hasDxt1)
return false;
glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC) wglGetProcAddress("glGetCompressedTexImage");
GLenum glenum=glGetError();
.
.
.
}
bool CTexture::ConvertToDxt1(int level)
{
glTexImage2D(GL_TEXTURE_2D, level, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,m_SizeX,m_SizeY,0, GL_BGRA_EXT, GL_UNSIGNED_BYTE,texbuffer);
GLenum glenum=glGetError();
if (glenum != GL_NO_ERROR)
return false;
GLint success;
glGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_COMPRESSED_ARB,
&success);
if (!success)
return false;
m_compressedSize = 0;
glGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB,
&m_compressedSize );
if (!m_compressedSize)
return false;
//hier kann man optinal die gepackte textur sich speichern :)
glGetCompressedTexImage(GL_TEXTURE_2D, level, texbuffer);
return true;
}
damit könntest du experimentieren ... ist nur mal so von mir zusammengeschustert worden und weil es rausgerippt ist wohl nicht sofort compilierbar.
du kannst damit mit ein wenig arbeit dxt texturen mit mipmaps speichern
damit (falls du es noch nicht benutzt) bin ich mir sicher hollst du noch 50% raus
ansonsten kannst du per LOD einstellung für texturen noch die filtering qualität ändern (für texturen die nicht scharf sein müssen, wie z.B. verzerte envmaps), das mach der nvidia treiber von sich aus auch schon ein wenig.
wenn du trilineare filterung an hast, könntest du durch bilinear ebenfalls geschwindigkeit steigern.
rapso->greets();