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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Необходимо найти такие три точки, которые определяют треугольник http://www.cyberforum.ru/cpp/thread1310008.html
Дано множество точек на плоскости . Необходимо найти такие три точки , которые определяют треугольник максимальной площади .
C++ Реализация скалярного произведения двух векторов с оптиммизацией на CUDA помагите реализовать операцию скалярного произведения двух векторов размерностью N на C++ с оптиммизацией на CUDA http://www.cyberforum.ru/cpp/thread1309043.html
Разработка под PSP C++
Народ, есть у кого компилятор под PSP (*.PBP)? "C"-подобного языка... Нужно хотя бы выводить на нее консоль типа "CMD".
C++ Открыть и закрыть файл exe через определенное время
Извините за тупой вопрос. Мне нужно просто открыть экзешник и со временем,например 5 секунд,чтобы сам просто закрылся. То есть просто открыть файл подождать закрыть. Если ли такая функция, типо открытие с таймером. например открыть C:\\Windows\\notepad.exe.:(
C++ Правильная стройка классов http://www.cyberforum.ru/cpp/thread1307063.html
Здравствуйте! Пытаюсь реализовать MVC на С++. Застрял на начальном этапе - создание M, V, C. Вот структура проекта: Листинг: Model.h #pragma once
C++ Возможно ли с помощью EGit в Eclipse добавить в репозиторий внешние библиотеки? Завёл себе репозиторий на bitbucket' e. С помощью плагина для eclipse залил туда код, но внешние библиотеки туда не попали. Можно ли всё - таки их туда тоже добавить? подробнее

Показать сообщение отдельно
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114

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

27.11.2014, 09:49. Просмотров 301. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru