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

C++

Войти
Регистрация
Восстановить пароль
 
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
#1

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

27.11.2014, 09:49. Просмотров 271. Ответов 0
Метки нет (Все метки)

Доброе утро.
Как всё работает:
Есть главный класс 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2014, 09:49     C++ SDL 2.0 Портится ссылка на объект SDL_Renderer
Посмотрите здесь:

C++ WinAPI Портится кодировка при выводе массива в файл
C++ Почему портится поток cin при использовании функции getline
Ссылка на объект не указывает на экземпляр объекта C++ C++
SDL - Конфигурирование C++
C++ SDL C++
Ссылка на объект, возвращаемый функцией C++
SDL mouse C++
C++ Ссылка на объект класса
Изменение каждого бита WAV-файла - файл "портится" C++
Ссылка на временный объект C++
C++ Ссылка на объект не указывает на экземпляр объекта
Ссылка на объект как свойство класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 03:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru