O
ok, ich hab das jetzt so gelöst:
Zuerst suche ich mir für jede karte jeden möglichen modus raus, und vergleich sie am ende mithilfe des bubblesort algorythmus, die beste einstellung wird dann als quality, und die schlechteste als speed gespeichert, der rest verfällt
das ganze is teil eines Dx klassenconstructors(bitte schlagen wenn das mies is)
natürlich fehlt noch was, da ich noch nich alle features kenne, aber es sollte eigentlich kein problem sein, dass zu verändern/erweitern, jetzt wo ich den dreh raus hab
bei dem backbuffertest bin ich mir aber nich so sicher, da ich nich so ganz den unterschied zwischen videomode(frontbuffer?) und backbuffermode herausbekommen hab,und da ich auch in meinem schlauen buch keinen hinweis drauf bekommen hab, wo ich nun im zweifelsfall den frontbuffer ändern kann,hab ich dafür bis auf weiteres einen festen wert genommen,natürlich werd ich es sofort ändern, wenn mir jemand sagt, wie ich den frontbuffer ändern kann
struct CardCaps{
int Adapter;
D3DMULTISAMPLE_TYPE Multisampletype;
DWORD* MultiSampleQuality;
D3DFORMAT BackbufferFormat;
D3DFORMAT DepthStencilformat;
UINT Width;
UINT Height;
};
bool DXclass::getAdapter(){
int Adapters=D3D->GetAdapterCount();
vector<CardCaps> Cardcaps;
D3DFORMAT Bildbuffer[2];
Bildbuffer[0]=D3DFMT_X8R8G8B8;
Bildbuffer[1]=D3DFMT_R5G6B5;
D3DFORMAT ZBuffer[4];
ZBuffer[0]=D3DFMT_D24FS8;
ZBuffer[1]=D3DFMT_D24S8;
ZBuffer[2]=D3DFMT_D24X4S4;
ZBuffer[3]=D3DFMT_D32;
D3DMULTISAMPLE_TYPE Multisampling[3];
Multisampling[0]=D3DMULTISAMPLE_4_SAMPLES;
Multisampling[1]=D3DMULTISAMPLE_2_SAMPLES;
Multisampling[2]=D3DMULTISAMPLE_NONE;
DWORD* BQuality;
DWORD* ZQuality;
for(int Adapter=0;Adapter<Adapters;Adapter++){//hier werden für jeden adapter die wichtigsten eigenschaften rausgesucht
for(int Bildformat=0;Bildformat<2;Bildformat++){//backbuffer
if(SUCCEEDED(D3D->CheckDeviceFormat(Adapter,D3DDEVTYPE_HAL,D3DFMT_X8R8G8B8,D3DUSAGE_DEPTHSTENCIL,D3DRTYPE_SURFACE,Bildbuffer[Bildformat]))&&SUCCEEDED(D3D->CheckDeviceType(Adapter,D3DDEVTYPE_HAL,D3DFMT_X8R8G8B8,Bildbuffer[Bildformat],false))){
for(int Zformat=0;Zformat<4;Zformat++){//z-stencil buffer
if(SUCCEEDED(D3D->CheckDeviceFormat(Adapter,D3DDEVTYPE_HAL,D3DFMT_X8R8G8B8,D3DUSAGE_DEPTHSTENCIL,D3DRTYPE_SURFACE,ZBuffer[Zformat]))&&SUCCEEDED(D3D->CheckDepthStencilMatch(Adapter,D3DDEVTYPE_HAL,D3DFMT_X8R8G8B8,Bildbuffer[Bildformat],ZBuffer[Zformat]))){
for(int Multisampleformat=0;Multisampleformat<3;Multisampleformat++){//multisampling
if(SUCCEEDED(D3D->CheckDeviceMultiSampleType(Adapter,D3DDEVTYPE_HAL,Bildbuffer[Bildformat],false,Multisampling[Multisampleformat],BQuality))&&SUCCEEDED(D3D->CheckDeviceMultiSampleType(Adapter,D3DDEVTYPE_HAL,ZBuffer[Zformat],false,Multisampling[Multisampleformat],ZQuality))){//quality des multisamplings
Cardcaps.push_back();
if(ZQuality<BQuality){
Cardcaps.back().MultiSampleQuality=ZQuality-1;
}
else
{
Cardcaps.back().MultiSampleQuality=BQuality-1;
}
Cardcaps.back().Multisampletype=Multisampling[Multisampleformat];
Cardcaps.back().BackbufferFormat=Bildbuffer[Bildformat];
Cardcaps.back().DepthStencilformat=ZBuffer[Zformat];
}
}
}
}
}
}
}
//BUBBLE SORT ALGORITHMUS schlechtestes-bestes
unsigned int size=Cardcaps.size();
if(size>0){
bool wechsel=true;
CardCaps temp;
while(wechsel==true){
wechsel=false;
for(unsigned int mode=0;mode<(size-1);mode++){
if(Cardcaps[mode].BackbufferFormat>Cardcaps[mode+1].BackbufferFormat){
temp=Cardcaps[mode];
Cardcaps[mode]=Cardcaps[mode+1];
Cardcaps[mode+1]=temp;
wechsel=true;
}
else
{
if(Cardcaps[mode].DepthStencilformat>Cardcaps[mode+1].DepthStencilformat){
temp=Cardcaps[mode];
Cardcaps[mode]=Cardcaps[mode+1];
Cardcaps[mode+1]=temp;
wechsel=true;
}
else
{
if(Cardcaps[mode].Multisampletype>Cardcaps[mode+1].Multisampletype){
temp=Cardcaps[mode];
Cardcaps[mode]=Cardcaps[mode+1];
Cardcaps[mode+1]=temp;
wechsel=true;
}
else
{
if(Cardcaps[mode].MultiSampleQuality>Cardcaps[mode+1].MultiSampleQuality){
temp=Cardcaps[mode];
Cardcaps[mode]=Cardcaps[mode+1];
Cardcaps[mode+1]=temp;
wechsel=true;
}
}
}
}
}
}
this->Speedmode=Cardcaps[0];
this->Qualitymode=Cardcaps[size-1];
return true;
}
else
{
return false;
}