GL_UNSIGNED_SHORT_5_6_5 undeclared?

1

I have a problem loading a texture using SDL library.

Usually I make programs on Linux but I try to create a code that is compatible with Visual Studio also. On Linux are everything OK but on Visual Studio it crashes in "GL_UNSIGNED_SHORT_5_6_5" in the glTexImage2D(...) function.

Below is a general idea about what i want to do which I inspired by this tutorial:

#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;
}

The error is:

error C2065: 'GL_UNSIGNED_SHORT_5_6_5' : undeclared identifier

Here is the image that I try to load and it is configured as a bitmap (8bit 5 6 5) with GIMP 2.8

NOTE: When I uncoment #include < GL/glext.h > which is not needed on Linux, I get the above message: Unhandled exception at 0x00d1193f in testTesxture.exe: 0xC0000005: Access violation reading location 0x00000014.

Generally if I save a bitmap image (for example with paint) how can I uderstand the type I have to put (GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_BYTE etc)?

c++
visual-studio-2010
opengl
sdl
glteximage2d
asked on Stack Overflow May 13, 2013 by Nebula • edited May 13, 2013 by Nebula

2 Answers

3

The problem is likely that Windows uses an older version of OpenGL than Linux, and this old OpenGL version does not have that specific identifier (and others, I'm sure). To get around this and any other possible version problems, I would use GLEW which does the hard work for you.

answered on Stack Overflow May 13, 2013 by Victor Sand • edited May 13, 2013 by Victor Sand
0

In windows, add this line after the includes:

 #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

According to this video.

answered on Stack Overflow Jun 21, 2015 by User10259 • edited Sep 6, 2020 by Tegra Morgan

User contributions licensed under CC BY-SA 3.0