1. Aşağıdakilerden hangisini kullanmak performans açısından daha iyidir?
a.
glBegin(GL_LINES);
glVertex2d(a, b);
glVertex2d(c, d);
glEnd();
glBegin(GL_LINES);
glVertex2d(e, f);
glVertex2d(g, h);
glEnd();b.
glBegin(GL_LINES);
glVertex2d(a, b);
glVertex2d(c, d);
glVertex2d(e, f);
glVertex2d(g, h);
glEnd();Tahminen b şıkkının daha iyi olduğunu düşünerek primitif çizdiren sınıfımıza "batching" olduğunu sandığım bir yöntem ekledik. Önce line'lar bir vektöre ekleniyor. Bir fonksiyon da bu vektörü baştan sona gezerek hepsini tek bir glBegin-glEnd çifti içerisinde çiziyor.
ıkinci sorum bu vektörden birşeyler silme hakkında.
şu anda böyle bir fonksiyona sahibim.
void IPrimitive::DeleteLine(int iNo)
{
std::vector<ILine>::iterator iter;
for (iter = vecLines.begin(); iter != vecLines.end(); iter++)
{
if (iter->no == iNo)
{
// MSVS 2005'te iterator döndürüyor bu fonksiyon.
// Nedenini bilmiyorum.
iter = vecLines.erase(iter);
}
}
}Sorun şu ki silinecek eleman vektöre son eklenen eleman ise run time error alıyorum. Eğer değilse sorunsuzca siliniyor. Vector'den eleman silme hakkında Google'da epey kaynak buldum ama hepsinde aynı sorunu aldım ya da doğru implement edemedim.
Aldığım error şu:
---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!
Program: ...
File: d:\program files\microsoft visual studio 8\vc\include\vector
Line: 118
Expression: ("_Myptr < ((_Myvec *)(this->_Mycont))->_Mylast", 0)
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
---------------------------
Abort Retry Ignore
---------------------------
şimdiden teşekkürler. :rolleyes: