Работает ли glGenTexture только в основном? - PullRequest
2 голосов
/ 26 апреля 2011

Я загружал текстуры в openGL раньше, работал нормально. Но на этот раз я хотел загрузить текстуру в конструкторе моего класса рендеринга. (Я использую MVC с абстрактными базовыми классами в качестве интерфейсов). Первоначально я пытался загрузить png-файл, а не bmp, как я делал раньше, поэтому я предположил, что это как-то связано с этим, но когда я вернулся к своему bmp-коду, он все равно не работал. Итак, я решил перенести код текстуры bmp в основной (того же проекта MVC), и он работает. Фактическая часть, которая не работала, была:

GLuint textureId;
    glGenTextures(1, &textureId); 
    glBindTexture(GL_TEXTURE_2D, textureId);
    //Map the image to the texture
    glTexImage2D(GL_TEXTURE_2D,//This bit!!               
                 0,                           
                 GL_RGB,                      
                 image->width, image->height,  
                 0,                            
                 GL_RGB, 
                 GL_UNSIGNED_BYTE,                                 
                 image->pixels);

если я прошел через программу, я заметил, что textureID остался прежним (не изменился на 1, потому что на него не была привязана текстура)

Почему это? и можно ли это исправить?

Ответы [ 2 ]

3 голосов
/ 26 апреля 2011

Когда вызывается конструктор? Вам нужен действительный контекст OpenGL, чтобы сделать любой вызов GL. Обычной ошибкой является создание объектов в глобальной области видимости, и это означает, что объект создается при запуске программы до вызова main (), и в этот момент контекст OpenGL еще не создан.

1 голос
/ 26 апреля 2011

Похоже, вы внесли textureId в локальную переменную, которая исчезает, когда завершается текущая функция (конструктор).Попробуйте переменную члена класса, если хотите, чтобы она дольше проживала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...