Форум программистов, компьютерный форум CyberForum.ru

C++ SDL 2.0 Портится ссылка на объект SDL_Renderer - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить функцию, позволяющую распознавать наличие вещественных корней в квадратном уравнении http://www.cyberforum.ru/cpp/thread1311943.html
Даны три квадратных уравнения ax^2+bx+с, bx^2+ax+с, cx^2+ax+b. Сколько из них имеют вещественные корни. (определить функцию, позволяющую распознавать наличие вещественных корней в квадратном уравнении.)
C++ Скажите пожалуйста используется ли в этой программе полиморфизм? Скажите пожалуйста используется ли в этой программе полиморфизм? Так и ладом не понял что такое полиморфизм #include <stdio.h> #include <conio.h> class chlenistonogie // класс, реализующий «тип членистоногие» { private: char *imya; char *priznak1; http://www.cyberforum.ru/cpp/thread1310131.html
C++ Необходимо найти такие три точки, которые определяют треугольник
Дано множество точек на плоскости . Необходимо найти такие три точки , которые определяют треугольник максимальной площади .
Реализация скалярного произведения двух векторов с оптиммизацией на CUDA C++
помагите реализовать операцию скалярного произведения двух векторов размерностью N на C++ с оптиммизацией на CUDA
C++ Приделать к программе быструю сортировку и бинарный поиск http://www.cyberforum.ru/cpp/thread1308628.html
Нужна ваша помощь. Есть консольная программа для ввода, вывода данных. Ко всему нужно этому нужно приделать быструю сортировку и бинарный поиск. Кому не лень, помогите пожалуйста. //--------------------------------------------------------------------------- #include <vcl.h> #include <windows.h> #include <iostream.h> #include <iomanip.h> #include <fstream.h> #include <stdio.h> #pragma...
C++ Разработка под PSP Народ, есть у кого компилятор под PSP (*.PBP)? "C"-подобного языка... Нужно хотя бы выводить на нее консоль типа "CMD". подробнее

Показать сообщение отдельно
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
27.11.2014, 09:49     C++ SDL 2.0 Портится ссылка на объект SDL_Renderer
Доброе утро.
Как всё работает:
Есть главный класс CApp с объектом SDL_Renderer*, который вызывает
CApp::OnInit(), который вызывает
AreaControl.OnLoad( SDL_Renderer*), который вызывает
CTexture.OnLoad(SDL_Renderer*), который вызывает
SDL_CreateTextureFromSurface(SDL_Renderer*), после чего
CApp::OnInit() вызывает
Entity.OnLoad(SDL_Renderer*), который вызывает
CTexture.OnLoad(SDL_Renderer*), который вызывает
SDL_CreateTextureFromSurface(SDL_Renderer*).
Суть проблемы:
После вызова AreaControl.OnLoad( SDL_Renderer*) портиться объект SDL_Renderer* и при вызове Entity.OnLoad(SDL_Renderer*) не срабатывает функция SDL_CreateTextureFromSurface(SDL_Renderer*). с ошибкой "Invalid SDL_Renderer".
При чем если не вызывать AreaControl.OnLoad( SDL_Renderer*) всё срабатывает нормально, вопрос, как можеть портиться ссылка на объект?

Добавлено через 10 минут
Для полноты картины:
CApp:OnInit()
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
bool CApp::OnInit() {
 
    if(SDL_Init(SDL_INIT_EVERYTHING < 0))
    {
        return false;
    }
 
    Display = SDL_CreateWindow("Platformer", SDL_WINDOWPOS_CENTERED,
                               SDL_WINDOWPOS_CENTERED, WWIDTH,
                               WHEIGHT, SDL_WINDOW_OPENGL);
    if(Display == NULL)
    {
        printf("Could not create window: %s\n", SDL_GetError());
        return false;
    }
 
    Renderer = SDL_CreateRenderer(Display, -1, SDL_RENDERER_ACCELERATED);
    if(Renderer == NULL)
    {
        printf("Could not create renderer: %s\n", SDL_GetError());
        return false;
    }
 
 
    if(CArea::AreaControl.OnLoad("Area/Example.area", Renderer) == false)
    {
        printf("Could not load Example.area: %s\n", SDL_GetError());
        return false;
    }
 
    if(Entity1.OnLoad("Image/set_test.tga", Renderer, 24, 24, 9) == false)
    {
        printf("Could not load 1 set_test.tga: %s\n", SDL_GetError());
        return false;
    }
 
    if(Entity2.OnLoad("Image/set_test.tga", Renderer, 24, 24, 9) == false)
    {
        printf("Could not load 2 set_test.tga: %s\n", SDL_GetError());
        return false;
    }
 
    Entity2.X = 100;
 
    Entity1.Anim_Control.SetFrameRate(500);
    Entity2.Anim_Control.SetFrameRate(1000);
 
    CEntity::EntityList.push_back(&Entity1);
    CEntity::EntityList.push_back(&Entity2);
 
 
    return true;
}

AreaControl.OnLoad( SDL_Renderer*)
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
bool CArea::OnLoad(char* File, SDL_Renderer* Renderer)
{
    FILE* FileHandle = fopen(File, "r");
 
    if(FileHandle == NULL)
    {
        return false;
    }
 
    char TilesetFile[255] ={0};
 
    fscanf(FileHandle, "%s\n", TilesetFile);
 
    if((Textr_Tileset = CTexture::OnLoad(TilesetFile, Renderer))== false)
    {
        fclose(FileHandle);
 
        return false;
    }
 
    fscanf(FileHandle, "%d\n", &AreaSize);
 
    for(int X = 0;X < AreaSize;X++)
    {
        for(int Y = 0;Y < AreaSize;Y++)
        {
            char* MapFile;
 
            fscanf(FileHandle, "%s", MapFile);
 
            CMap tempMap;
            if(tempMap.OnLoad(MapFile) == false)
            {
                fclose(FileHandle);
 
                return false;
            }
 
            tempMap.Textr_Tileset = Textr_Tileset;
 
            MapList.push_back(tempMap);
        }
        fscanf(FileHandle, "\n");
    }
 
    fclose(FileHandle);
 
    return true;
}

CTexture.OnLoad(SDL_Renderer*)
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SDL_Texture* CTexture::OnLoad(char* File, SDL_Renderer* Renderer)
{
    SDL_Surface* Surf_Temp = NULL;
    SDL_RWops* Rwop = NULL;
    SDL_Texture* Text_Return = NULL;
 
    Rwop = SDL_RWFromFile(File, "rb");
    Surf_Temp = IMG_LoadTGA_RW(Rwop);
 
    if(Surf_Temp == NULL)
    {
        printf("IMG_LoadTGA_RW: %s\n:", IMG_GetError());
        return NULL;
    }
 
    Text_Return = SDL_CreateTextureFromSurface(Renderer, Surf_Temp);
 
    if(Text_Return == NULL)
    {
        printf("SDL_CreateTextureFromSurface failed: %s\n", SDL_GetError());
        return NULL;
    }
 
    SDL_FreeRW(Rwop);
    SDL_FreeSurface(Surf_Temp);
 
    return Text_Return;
}

Entity.OnLoad(SDL_Renderer*)
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool CEntity::OnLoad(char* File, SDL_Renderer* Renderer, int Width, int Height, int MaxFrames)
{
    if((Textr_Entity = CTexture::OnLoad(File, Renderer)) == NULL)
    {
        return false;
    }
 
    this->Width = Width;
    this->Height = Height;
 
    Anim_Control.MaxFrames = MaxFrames;
 
    return true;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru