2013-05-13 4 views
1

У меня проблема с загрузкой текстуры с использованием библиотеки SDL.GL_UNSIGNED_SHORT_5_6_5 не объявлен?

Обычно я делаю программы на Linux, но я также пытаюсь создать код, совместимый с Visual Studio. В Linux все нормально, но в Visual Studio он сбой в «GL_UNSIGNED_SHORT_5_6_5» в функции glTexImage2D (...).

Ниже приводится общее представление о том, что я хочу сделать, который я вдохновлен this учебник:

#include "stdafx.h" 
#include <stdlib.h> 
#include <stdio.h> 
#include <GL/glut.h> 
//#include <GL/glext.h> 
#include "SDL.h" 

int brick; 
float c=0.5; 
float rx_min=0, ry_min=0; 
float rx_max=1, ry_max=1; 

unsigned int LoadTexture(const char* filename); 
void DrawTexture(int object); 
void setupmywindow(); 
void myDrawing(); 


void setupmywindow() 
{ 
    glClearColor(1.0,1.0,1.0,0); 
    glColor3f(0.0, 0.0, 0.0);  
    glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); 
    gluOrtho2D(rx_min,ry_min, rx_max, ry_max); 
    brick = LoadTexture("brick.bmp"); 
} 

void DrawTexture(int object) 
{ 
    glBindTexture(GL_TEXTURE_2D, object); 
    glColor3f(c,c,c); 
    glBegin(GL_QUADS); 
     glTexCoord2f(0., 1.); 
     glVertex2f(rx_min , ry_min); 
     glTexCoord2f(0., 0.); 
     glVertex2f(rx_min, ry_max); 
     glTexCoord2f(1., 0.); 
     glVertex2f(rx_max , ry_max); 
     glTexCoord2f(1., 1.); 
     glVertex2f(rx_max , ry_min); 
    glEnd(); 
} 
unsigned int LoadTexture(const char* filename) 
{ 
    SDL_Surface* img=SDL_LoadBMP(filename); 
    unsigned int id; 
    glGenTextures(1, &id); 
    glBindTexture(GL_TEXTURE_2D,id); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->w, img->h, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, img->pixels); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    SDL_FreeSurface(img); 
    return id; 
} 

void myDrawing() 
{  
    glClear(GL_COLOR_BUFFER_BIT); 
    DrawTexture(brick); 

    glFlush(); 

} 

int main(int argc, char **argv) 
{ 

    printf("AUTH Computational Physics - Computer Graphics\n"); 
    printf("Project >>TestTexture.cpp\n"); 
    printf("--------------------------------------------------------\n"); 

    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); 
    glutInitWindowPosition(50,50); 
    glutCreateWindow("Texture Test"); 

    setupmywindow();   
    glutDisplayFunc(myDrawing); 

    glutMainLoop(); 

    return 0; 
} 

Ошибка является:

ошибка C2065: 'GL_UNSIGNED_SHORT_5_6_5': необъявленный идентификатор

Here - это изображение, которое я пытаюсь загрузить, и оно настроено как растровое изображение (8 бит 5 6 5) с помощью GIMP 2 +0,8

ПРИМЕЧАНИЕ: Когда я uncoment #include < GL/glext.h> который не нужен на Linux, я получаю вышеуказанное сообщение: Необработанное исключение в 0x00d1193f в testTesxture.exe: 0xC0000005: Access место для обнаружения ошибок 0x00000014.

Обычно, если я сохраняю растровое изображение (например, с краской), как я могу убрать тип, который мне нужно поставить (GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_BYTE и т. Д.)?

+1

Почему вы должны '#include ' закомментирована? – olevegard

+0

Извините, я должен раскомментировать его. Он компилируется, но с этим результатом: Необработанное исключение в 0x00d1193f в testTesxture.exe: 0xC0000005: Доступ к чтению с ошибкой 0x00000014. – Nebula

ответ

3

Проблема в том, что Windows использует более старую версию OpenGL, чем Linux, и эта старая версия OpenGL не имеет этого конкретного идентификатора (и другие, я уверен). Чтобы обойти эту и любые другие возможные проблемы с версией, я бы использовал GLEW, который делает тяжелую работу для вас.

+0

Должен ли я изменить формат изображения и изменить GL_UNSIGNED_SHORT_5_6_5 с чем-то еще? Если да, то как я могу это сделать? – Nebula

+1

Я бы порекомендовал использовать GLEW, чтобы пройти действительно действительно старую версию OpenGL, используемую Windows, если не сказать иначе. Я не знаю, какие форматы поддерживаются различными версиями. –

0

В окнах, добавьте эту строку после включает в себя:

#ifndef GL_UNSIGNED_SHORT_5_6_5 
#define GL_UNSIGNED_SHORT_5_6_5 0x8363 
#endif 
#ifndef GL_CLAMP_TO_EDGE 
#define GL_CLAMP_TO_EDGE 0x812F 
#endif 

Согласно https://www.youtube.com/user/thecplusplusguy

 Смежные вопросы

  • Нет связанных вопросов^_^