sfml. наверно дело в loadfromfile

Подскажите , что не так ? выдаёт: An internal OpenGL call failed in Texture.cpp(98). Expression: glFlush() Error description: GL_INVALID_OPERATION The specified operation is not allowed in the current state. и эти картиночки не рисуются. складывается ощущение , что не так что-то с loadfromFile. может надо всё в одном файле jpg иметь и читать всё с него, меняя только параметры setTextureRect ?

    #include <iostream>
    #include <SFML/Graphics.hpp>
    #include <vector>

    const int QUESTFONTSIZE = 50;
    const int TEXTFRAMHEIGHT = 150;
    const int IMGPADDINGLEFT = 350;
    const int BUTTONPADDINGTOP = 1200;
    const float THICKNESS = 8.0f;
          
    enum types {
  
        square = 4, //квадрат
        circle = 0, //круг
        rectangle = 40, //прямоугольник
        trianglei = 3, //треугольник по трем вершинам

    };

    struct pica {   
        enum types type;
        int r;
        float x0;
        float y0;
  
        float x1;
        float y1;
  
        float x2;
        float y2;



        sf::Color FillColor;
        sf::Color outlineColor;
        float OutlineThickness;
        float angle;
        float width;
        float height;

    
     };

    const std::vector<pica> flower = { 
        {circle, 30,148,125,0,0,0,0,sf::Color(255, 96, 114) , sf::Color(0,0,0) ,THICKNESS,   2.0f },
        {circle,30,21,20,0,0,0,0,sf::Color(107, 177, 0) , sf::Color(0,0,0) ,THICKNESS,   2.0f },
        {circle,30,148,20,0,0,0,0,sf::Color(107, 177, 0) , sf::Color(0,0,0) ,THICKNESS,   2.0f},
        {circle,30,18,125,0,0,0,0,sf::Color(181, 72, 213) , sf::Color(0,0,0) ,THICKNESS,   2.0f },
        {circle,45,70,57,0,0,0,0,sf::Color(255, 220, 156) , sf::Color(0,0,0) ,THICKNESS,   2.0f },

        {trianglei,10,0.0f,230.0f,80.0f,230.0f,40.0f,260.0f, sf::Color(253, 255, 5) , sf::Color(0,0,0) ,THICKNESS},
    
        {trianglei,10,140.0f,230.0f,220.0f,230.0f,180.0f,260.0f, sf::Color(253, 255, 5) , sf::Color(0,0,0) ,THICKNESS},
   
        {rectangle,0,105,160,0,0,0,0,sf::Color(42, 170, 205) , sf::Color(0,0,0) ,THICKNESS,   0,10,180}
    };

    const std::vector<pica> tree = {


        {circle, 10,15,155,0,0,0,0,sf::Color(255, 96, 114) , sf::Color(0,0,0) ,THICKNESS,   2.0f },
        {circle, 10,245,155,0,0,0,0,sf::Color(107, 177, 0) , sf::Color(0,0,0) ,THICKNESS,   2.0f },
        {circle, 10,-45,224,0,0,0,0,sf::Color(107, 177, 0) , sf::Color(0,0,0) ,THICKNESS,   2.0f},
        {circle,10,315,224,0,0,0,0,sf::Color(181, 72, 213) , sf::Color(0,0,0) ,THICKNESS,   2.0f },
        {circle,10,131,10,0,0,0,0,sf::Color(255, 220, 156) , sf::Color(0,0,0) ,THICKNESS,   2.0f },

        {trianglei,10,0.0f  ,150.0f+60.0f,290.0f  ,150.0f + 60.0f,145.50f ,90.0f  + 60.0f, sf::Color(60, 255, 5) , sf::Color(0,0,0) ,THICKNESS},                                
        {trianglei,10,50.0f ,80.0f +60.0f,230.0f  ,80.0f +  60.0f,140.0f   ,30.0f + 60.0f, sf::Color(60, 255, 5) , sf::Color(0,0,0) ,THICKNESS},                                
        {trianglei,10,80.0f ,23.0f +60.0f,200.0f  ,23.0f +  60.0f,140.0f   ,0.0f  + 40.0f, sf::Color(60, 255, 5) , sf::Color(0,0,0) ,THICKNESS},
        {rectangle,0,137,100,0,0,0,0,sf::Color(42, 170, 205) , sf::Color(0,0,0) ,THICKNESS,   0,10,180}
    };


    class NumberButtons {
        int qtyButton;
        std::vector<sf::Texture> MyTexture;
        std::vector<sf::Sprite> Buttons;

    public:
        NumberButtons(int qtyButton);
        std::vector<sf::Sprite>& getButtons() { return Buttons; }
        int getqtyButton() { return qtyButton; }
    };

    NumberButtons::NumberButtons(int qtyButton){
        this->qtyButton = qtyButton;
        std::string fileName;
        for (int i = 1; i < qtyButton+1; i++){
    
        MyTexture.emplace_back(sf::Texture());
        Buttons.emplace_back(sf::Sprite());

        fileName = "pica\\digit" + std::to_string(i) + ".jpg";
        Buttons.back().setTexture(MyTexture.back());
        Buttons.back().setScale(0.15f, 0.15f);
        Buttons.back().setTextureRect(sf::IntRect(0, 0, 500, 500));
        Buttons.back().move(i*100+305, 0);
        MyTexture.back().loadFromFile(fileName);
        //Buttons.back().getTexture
        }
    }
    class SimpleImage {
        int padding;
        std::vector<sf::CircleShape>    CircleBaseFigure;
        std::vector<sf::RectangleShape> RectangleFigure;
        std::vector<sf::ConvexShape>    TriangleiFigure; //равнобедренный треугольник

        int CircleBaseFigureQTY;
        int RectangleFigureQTY;
        int TriangleiBaseFigureQTY;



    public: SimpleImage(const std::vector<pica> & fig, int paddingleft);
          int getCircleBaseFigureQTY() { return CircleBaseFigureQTY; }
          int getRectangleFigureQTY()  { return RectangleFigureQTY; }
          int getGetTriangleiFigureQTY() { return TriangleiBaseFigureQTY; }
              std::vector<sf::CircleShape>& GetCircle() { return CircleBaseFigure; }
              std::vector<sf::RectangleShape>& GetRectangleFigure() { return RectangleFigure; }
              std::vector<sf::ConvexShape>& GetTriangleiFigure() { return TriangleiFigure; }

    };

    SimpleImage::SimpleImage(const std::vector<pica>& fig, int paddingleft) {
        //(*fig)[0]
        CircleBaseFigureQTY = 0; RectangleFigureQTY = 0; TriangleiBaseFigureQTY = 0;
   
   
        for (int i = 0; i < fig.size(); i++)
        {
            switch (fig[i].type)
            {
            case circle:  CircleBaseFigure.emplace_back(sf::CircleShape(fig[i].r)); CircleBaseFigureQTY++;
                CircleBaseFigure.back().move(fig[i].x0+ paddingleft, fig[i].y0 + TEXTFRAMHEIGHT);
                CircleBaseFigure.back().setFillColor(fig[i].FillColor);
                CircleBaseFigure.back().setOutlineColor(fig[i].outlineColor);
                CircleBaseFigure.back().setOutlineThickness(fig[i].OutlineThickness);
                CircleBaseFigure.back().rotate(fig[i].angle);
                          break;

            case trianglei:  TriangleiFigure.emplace_back(sf::ConvexShape(3)); TriangleiBaseFigureQTY++;
                TriangleiFigure.back().setPoint(0, sf::Vector2f(fig[i].x0 , fig[i].y0 ));
                TriangleiFigure.back().setPoint(1, sf::Vector2f(fig[i].x1 , fig[i].y1 ));
                TriangleiFigure.back().setPoint(2, sf::Vector2f(fig[i].x2 , fig[i].y2 ));
                TriangleiFigure.back().setFillColor(fig[i].FillColor);
                TriangleiFigure.back().setOutlineColor(fig[i].outlineColor);
                TriangleiFigure.back().setOutlineThickness(fig[i].OutlineThickness);
                TriangleiFigure.back().move(paddingleft,  TEXTFRAMHEIGHT);
                break;                               
                
            case rectangle:  RectangleFigure.emplace_back(sf::RectangleShape(sf::Vector2f(fig[i].width, fig[i].height))); RectangleFigureQTY++;
                RectangleFigure.back().move(fig[i].x0 + paddingleft, fig[i].y0 + TEXTFRAMHEIGHT);
                //RectangleFigure.back().move(fig[i].x + paddingleft, fig[i].y + TEXTFRAMHEIGHT);
                RectangleFigure.back().setFillColor(fig[i].FillColor);
                RectangleFigure.back().setOutlineColor(fig[i].outlineColor);
                RectangleFigure.back().setOutlineThickness(fig[i].OutlineThickness);

                RectangleFigure.back().rotate(fig[i].angle);
                break;
            //case trianglei:  TriangleiFigure.emplace_back(sf::CircleShape(fig[i].r, 3)); CircleBaseFigureQTY++;
            //    CircleBaseFigure.back().move(fig[i].x + paddingleft, fig[i].y + TEXTFRAMHEIGHT);
            //    CircleBaseFigure.back().setFillColor(fig[i].FillColor);
            //    CircleBaseFigure.back().setOutlineColor(fig[i].outlineColor);
            //    CircleBaseFigure.back().setOutlineThickness(fig[i].OutlineThickness);
            //    CircleBaseFigure.back().rotate(fig[i].angle);
            //    break;


            default:
                break;
            }


        }
   
    }

    class TextFrameBase {
        int size;//размер шрифта
        std::string question;
        sf::Text text;
        sf::Font font;//шрифт
    public: 
   
        TextFrameBase(int size,const wchar_t* quest) ;
        sf::Text gettext(){ return text; }

    };

    TextFrameBase::TextFrameBase(int size,  const wchar_t* quest) {
        this->size = size;   
        font.loadFromFile("Arial_Narrow.ttf");
        text = sf::Text("", font, size);
        text.setFillColor(sf::Color::Black);
        text.setString(quest);
        text.setPosition(10, 10);
    }



    class Window {
        static  bool first;
        sf::RenderWindow* window; //сам экран
        int width;  //ширина 
        int height; //высота экрана 
        int space;
        int number; //номер вопроса
        TextFrameBase textFrame;
        SimpleImage img1;
        SimpleImage img2;
        NumberButtons Buttons;
    public: Window(int w, int h , const wchar_t* quest, const std::vector<pica>& fig1, const std::vector<pica>& fig2, int qtyButtons ) : width(w), height(h), textFrame(QUESTFONTSIZE, quest), img1(fig1,30), img2(fig2, IMGPADDINGLEFT), Buttons(qtyButtons){
        sf::RectangleShape List(sf::Vector2f(width, height));
        List.setPosition(0, 0);
        List.setFillColor(sf::Color::White);
        if (!first) {
        window = new sf::RenderWindow(sf::VideoMode(w, h), "Game");
        first = true;
        }
        while (window->isOpen()) {
            sf::Event event;
            while (window->pollEvent(event)) {
                if (event.type == sf::Event::Closed) {
                    window->close();
                }
            }
            window->clear();
            window->draw(List);              
            window->draw(textFrame.gettext());
        
            int cQTY1 = img1.getCircleBaseFigureQTY();
            std::vector<sf::CircleShape>& C1 = img1.GetCircle();
            for (int i = 0; i < cQTY1; i++)
                window->draw(C1[i]);
            std::vector<sf::RectangleShape>& R1 = img1.GetRectangleFigure();
            int rQTY1 = img1.getRectangleFigureQTY();
            for (int i = 0; i < rQTY1; i++)
                window->draw(R1[i]);

            int tQTY1 = img1.getGetTriangleiFigureQTY();
            std::vector<sf::ConvexShape> G1 = img1.GetTriangleiFigure();
            for (int i = 0; i < tQTY1; i++)
                window->draw(G1[i]);
            std::vector<sf::CircleShape>& C2 = img2.GetCircle();
            int cQTY2 = img2.getCircleBaseFigureQTY();
            for (int i = 0; i < cQTY2; i++)
                window->draw(C2[i]);
            int rQTY2 = img2.getRectangleFigureQTY();
            std::vector<sf::RectangleShape>& R2 = img2.GetRectangleFigure();
            for (int i = 0; i < rQTY2; i++)
                window->draw(R2[i]);
            int tQTY2 = img2.getGetTriangleiFigureQTY();
            std::vector<sf::ConvexShape> G2 = img2.GetTriangleiFigure();
            for (int i = 0; i < tQTY2; i++)
                window->draw(G2[i]);

            std::vector<sf::Sprite> &B = Buttons.getButtons();
            for (int i = 0; i < Buttons.getqtyButton(); i++)
                window->draw(B[i]);
                //window->draw(Buttons.getButtons()[i]);

            window->display();
        }
    }

    };


    bool Window::first = false;



    class QuestionBase {
        TextFrameBase txt;
    };

    int main(int count, char** arr) {

        Window w(1280, 752,L"testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest", flower,tree,10);
    
    }

Ответы (0 шт):