我在使用SDL库加载纹理时遇到问题。GL_UNSIGNED_SHORT_5_6_5未申报?
通常我在Linux上制作程序,但我尝试创建一个与Visual Studio兼容的代码。 在Linux上一切正常,但在Visual Studio上,它在glTexImage2D(...)函数中的“GL_UNSIGNED_SHORT_5_6_5”中崩溃。
下面是关于什么我想做的事情,我通过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是我尝试加载的图像,它使用GIMP 2配置为位图(8位5 6 5) 0.8
注意:当我uncoment 的#include < GL/glext.h>这是没有必要在Linux上,我得到了上述消息:0000005:在testTesxture.exe在0x00d1193f 未处理的异常访问违反阅读地点0x00000014。
通常,如果我保存一个位图图像(例如油漆),我该如何理解我必须放置的类型(GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_BYTE等)?
为什么你'#包括'注释掉? –
olevegard
2013-05-13 11:49:07
对不起,我应该取消注释。它编译但结果如下:testTesxture.exe中的0x00d1193f未处理的异常:0xC0000005:访问冲突读取位置0x00000014。 – Nebula 2013-05-13 11:59:43