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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Рекурсивное и нерекурсивное вычисление функции http://www.cyberforum.ru/cpp-beginners/thread1312309.html
Программа считает рекурсивное и не рекурсивное значение функции. Но не хочет считывать значение n. Буду рада решению с объяснением. #include <stdio.h> #include <math.h> double func1(int n); double func2(int n); void main() { int n;
C++ Сортировка элементов массива через функции void sorting(int a, int s, int n) { int r = 0; while (r < s) { for (int i = 0; i < n; i++) { if (a > a) { int c = a; http://www.cyberforum.ru/cpp-beginners/thread1312303.html
C++ Порядок хранения структур в ОЗУ и memset
Всем добра! Вопрос в следующем. если объявить массив например m - то он будет храниться в ОЗУ как сплошная последовательность символов и для обнуления этого массива можно использовать функцию memset(m, 0, sizeof(m)); А как именно в ОЗУ хранятся структуры? Тоже как сплошная последовательность, или как-то иначе? Цель вопроса состоит в понимании можно ли для обнуления структур использовать...
Как инициализировать массив в классе C++
private: static char const figury_={0,4,0,0, 0,1,0,3, 2,1,0,3, 0,2,0,2, 1,2,0,2, 1,1,0,3, 0,2,1,2, '/0','/0','/0','/0'};
C++ Редактирование и удаление из списка http://www.cyberforum.ru/cpp-beginners/thread1312275.html
Код не корректно работает функция (удаления и редактирования) удаляется не тот элемент из списка который надо, а после редактирования из файла не выводится первый элемент... подправьте пожалуйста.... структура: struct Dogovor { int Dogovor_id; int klient_id ; int uslugi_id ; };
C++ Отсортировать большое число элементов за минимальное время, используя битовый массив Всем привет! Вот, получил задание такое: написать сортировку большого числа элементов за минимальное время, используя битовый массив. Работать с числами используя их двоичный код. Видимо надо использовать битовые операции, смотреть на разряды и т.д. Но я на самом деле не знаю с чего начать, т.к. тут еще есть условие о большом количестве элементов и минимальном времени. И еще этот битовый... подробнее

Показать сообщение отдельно
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
27.11.2014, 11:07     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*) всё срабатывает нормально, вопрос, как можеть портиться ссылка на объект?

Для полноты картины:
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;
}


Добавлено через 27 минут
Похоже всё дело в классе CArea

Добавлено через 28 минут
Можете расслабить булки, проблема решена = ) нужно было переменную MapFile объявить так же как и TilesetFile:
char MapFile[255]; ну и слэши экранировать в файле.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru