не выводятся все рисунки с текстурой

322
16 апреля 2019, 12:40

Я создаю кучу спрайтов и загружаю картинки в текстуры вот так.

Sprite *s1 = new Sprite [MAX_SPRITES];
#if 1
    Sprite *s2 = new Sprite [MAX_SPRITES];
    Sprite *s3 = new Sprite [MAX_SPRITES];
    Sprite *s4 = new Sprite [MAX_SPRITES];
    Sprite *s5 = new Sprite [MAX_SPRITES];
#endif
#if 1
    Sprite *background = new Sprite ( );
    background->load ( 262156 );
    background->set_pos ( 0.0, 0.0 );
    background->set_size ( 1.0, 1.0 );
#endif
    for ( int i = 0; i < MAX_SPRITES; i++ ) {
        s1[i].set_size ( 0.15, 0.2 );
        s2[i].set_size ( 0.15, 0.2 );
        s3[i].set_size ( 0.15, 0.2 );
        s4[i].set_size ( 0.15, 0.2 );
        s5[i].set_size ( 0.15, 0.2 );
    }

Все спрайты отображаются, кроме спрайта background. background загружает спрайт 1920x1080, но я не думаю что это от размера зависит. Всем спрайтам я задаю размер, по командам видно где размер, а где позиция. Спрайтам s* я тоже задаю позицию но несколько иначе и в примере я этого не указал, но они то отображаются, а background нет. Также я пробовал другой момент, создавал отдельный проект из этого, удалял всё лишнее и загружал маленькой спрайт и он тоже не отображался, но в чём же проблема а? Код спрайта ниже.

#include "Sprite.hpp"
    Sprite::Sprite ( long pos )
    {
        //init_texture ( );
    }
    Sprite::Sprite ( )
    {
    }
    void Sprite::free_data ( )
    {
        if ( texture ) delete ( texture );
        if ( vertices ) delete ( vertices );
        if ( pixels ) delete ( pixels );
    }
    void Sprite::load ( long pos )
    {
        offset = pos;
        std::FILE *fd = std::fopen ( "data", "r" );
        if ( !fd ) {
            std::perror ( "sprite load" );
            exit ( EXIT_FAILURE );
        }
        int ret;
        ret = std::fseek ( fd, pos, SEEK_SET );
        if ( ret == -1 ) {
            perror ( "fseek\n" );
        }
        ret = std::fread ( &width, sizeof ( unsigned int ), 1, fd );
        if ( ret == -1 ) {
            perror ( "width\n" );
        }
        ret = std::fread ( &height, sizeof ( unsigned int ), 1, fd );
        if ( ret == -1 ) {
            perror ( "heigth\n" );
        }
        ret = std::fread ( &max_pixels, sizeof ( unsigned int ), 1, fd );
        if ( ret == -1 ) {
            perror ( "max_pixels\n" );
        }
        pixels = new unsigned char [ max_pixels ];
        if ( !pixels ) {
            printf (" !@!\n" );
        }

        ret = std::fread ( &pixels[0] , sizeof ( unsigned char ), max_pixels, fd );
        if ( ret == -1 ) {
            perror ( "pixels\n" );
        }
        std::fclose ( fd );
        glGenTextures ( 1, &tex );
        glBindTexture ( GL_TEXTURE_2D, tex );
    #if 1
        glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
            glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
            glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER );
            glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER );
            glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER );
    #endif
    //      gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels );
            glTexImage2D ( GL_TEXTURE_2D,
                            0,
                            GL_RGBA,
                            width,
                            height,
                            0,
                            GL_RGBA,
                            GL_UNSIGNED_BYTE,
                            pixels );
            glEnable ( GL_TEXTURE_2D );

        max_draw = height * width;
        vertices = new float [ 12 ];
        vertices[0] = 0.0f;
        vertices[1] = 0.0f;
        vertices[2] = 0.0f;
        vertices[3] = fheight;
        vertices[4] = fwidth;
        vertices[5] = 0.0f;
        vertices[6] = fwidth;
        vertices[7] = 0.0f;
        vertices[8] = fwidth;
        vertices[9] = fheight;
        vertices[10] = 0.0f;
        vertices[11] = fheight;
        texture = new float [ 12 ];
        texture[0] = 0.0f;
        texture[1] = 1.0f;
        texture[2] = 0.0f;
        texture[3] = 0.0f;
        texture[4] = 1.0f;
        texture[5] = 1.0f;
        texture[6] = 1.0f;
        texture[7] = 1.0f;
        texture[8] = 1.0f;
        texture[9] = 0.0f;
        texture[10] = 0.0f;
        texture[11] = 0.0f;
    }
    void Sprite::render ( )
    {
    #if 1
        if ( y > 1.2 ) return;
        if ( y < -0.3 ) return;
    #endif
        glBindTexture ( GL_TEXTURE_2D, tex );
        glPushMatrix ( );
    #if 0
        glFrontFace ( GL_CCW );
        glEnable ( GL_CULL_FACE );
        glCullFace ( GL_BACK );
    #endif
        glTranslatef ( this->x, this->y, 0 );
        glEnableClientState ( GL_VERTEX_ARRAY );
        glEnableClientState ( GL_TEXTURE_COORD_ARRAY );
        glVertexPointer ( 2, GL_FLOAT, 0, vertices );
        glTexCoordPointer ( 2, GL_FLOAT, 0, texture );
        glDrawArrays ( GL_TRIANGLES, 0, 12 );
        glDisableClientState ( GL_VERTEX_ARRAY );
        glDisableClientState ( GL_TEXTURE_COORD_ARRAY );
    //  glDisable ( GL_CULL_FACE );
    //  glTranslatef ( 0, 0, -10 );
        glPopMatrix ( );
        glFlush ( );
    }
    float Sprite::get_width ( )
    {
        return width;
    }
    float Sprite::get_height ( )
    {
        return height;
    }
    float Sprite::get_x ( )
    {
        return x;
    }
    float Sprite::get_y ( )
    {
        return y;
    }
    void Sprite::set_pos ( float x, float y )
    {
        this->x = x;
        this->y = y;
    }
    void Sprite::slice ( int width, int height )
    {
    }
    void Sprite::set_size ( float width, float height )
    {
        this->fwidth = width;
        this->fheight = height;
    }
    int Sprite::get_max_frames ( )
    {
        return max_frames;
    }
READ ALSO
fflush(stdout) в QProcess

fflush(stdout) в QProcess

Задача такова: Существует консольное приложение, осуществляющее некоторое действие (в частности: копирование файла с сохранением времени...

144
Winsock отправка массива типа vector

Winsock отправка массива типа vector

Имею такую матрицу vector<vector<float>> matrix n-го размеракаким образом ее передать через сокеты на сервер

179
Пять Чисел Задача C++

Пять Чисел Задача C++

Написал такой код, проходит половину тестов, из тех что не проходят - половина ограничение по времени, половина неверный ответГде в коде ошибка...

188
UB в невыполняемом коде

UB в невыполняемом коде

Содержит ли эта программа UB? Функция foo не вызывается

167