tak sem to našel.. špatně umístěnej příkaz glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
Příspěvky odeslané z IP adresy 147.251.216.–
hmmm.. udělal jsem si stejnou aplikaci ve win api a funguje to.. ale tohle dělám jako klientský okno v ATL a nejde to.. zkusim najít důvod
To Wizard :
ne, to je muj překlep.. ta druhý volání funkce drawPixmap(pixIFS); je tam navíc..
zkoušel sem upravit destroy na:
void OpenGL::destroyPixmap(pixmap** p)
{
pixmap* map = *p;
if (map->pixels) {
//MessageBox(_T(""), _T(""), NULL);
delete[] map->pixels; // uvolnit vlastni pixmapu
}
if (map) {
delete map; // i okolni strukturu
}
*p = NULL;
}
ale nepomaha to.
první příspěvek ignorujte ;).. takže
mám funkce:
Citovat:
//-----------------------------------------------------------------------------
// Funkce pro vytvoreni pixmapy o zadane velikosti
//-----------------------------------------------------------------------------
pixmap * OpenGL::createPixmap(const unsigned int width, const unsigned int height)
{
pixmap *p = new pixmap;
if (!p) return NULL;
p->width=width; // naplneni struktury
p->height=height;
p->pixels = new unsigned char [3*width*height];
if (!p->pixels) { // alokace pole pro pixely
delete p; // alokace se nepovedla
return NULL;
}
else {
memset(p->pixels, 0, 3*width*height); // smazani pixmapy
}
return p;
}
//-----------------------------------------------------------------------------
// Funkce pro zruseni pixmapy
//-----------------------------------------------------------------------------
void OpenGL::destroyPixmap(pixmap *p)
{
if (p->pixels) {
delete[] p->pixels; // uvolnit vlastni pixmapu
}
if (p) {
delete p; // i okolni strukturu
}
p = NULL;
}
//-----------------------------------------------------------------------------
// Funkce pro vykresleni pixmapy do barvoveho bufferu
//-----------------------------------------------------------------------------
void OpenGL::drawPixmap(const pixmap *p)
{
if (!p || !p->pixels) return;
glDrawPixels( // vykresleni pixmapy
p->width, p->height, // sirka a vyska pixmapy
GL_RGB, // format dat pixelu
GL_UNSIGNED_BYTE, // datovy typ kazde barevne slozky
p->pixels); // ukazatel na pamet s barvami pixelu
}
při překreslení zavolám:
Citovat:
...
pixIFS=createPixmap(width, height); // velikost okna
drawPixmap(pixIFS); // vykresleni pixmapy
destroyPixmap(pixIFS);
drawPixmap(pixIFS);
...
ale při změně velikosti okna zde aplikace spadne a nevím proč confused smiley.. tušíte někdo? přitom když zadám za sebou zobrazení dvou pixel map takto:
Citovat:
...
pixIFS=createPixmap(410, 504); // libovolna velikost
drawPixmap(pixIFS); // vykresleni pixmapy
destroyPixmap(pixIFS);
drawPixmap(pixIFS);
pixIFS=createPixmap(200, 15); // libovolna velikost
drawPixmap(pixIFS); // vykresleni pixmapy
destroyPixmap(pixIFS);
drawPixmap(pixIFS);
...
tak zobrazení funguje..
...
pixIFS=createPixmap(410, 504); // libovolna velikost
drawPixmap(pixIFS); // vykresleni pixmapy
destroyPixmap(pixIFS);
drawPixmap(pixIFS);
pixIFS=createPixmap(200, 15); // libovolna velikost
drawPixmap(pixIFS); // vykresleni pixmapy
destroyPixmap(pixIFS);
drawPixmap(pixIFS);
...
tak zobrazení funguje..