gpt4 book ai didi

c++ - GL_UNSIGNED_SHORT_5_6_5 未声明?

转载 作者:行者123 更新时间:2023-11-30 02:55:23 24 4
gpt4 key购买 nike

我在使用 SDL 库加载纹理时遇到问题。

通常我在 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;
}

错误是:

error C2065: 'GL_UNSIGNED_SHORT_5_6_5' : undeclared identifier

Here是我尝试加载的图像,它被配置为带有 GIMP 2.8 的位图(8 位 5 6 5)

注意:当我取消注释 #include < GL/glext.h > 在 Linux 上不需要时,我收到以上消息:testTesxture.exe 中 0x00d1193f 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000014。

通常,如果我保存一个位图图像(例如带有绘画),我如何理解我必须放置的类型(GL_UNSIGNED_SHORT_5_6_5、GL_UNSIGNED_BYTE 等)?

最佳答案

问题很可能是 Windows 使用的 OpenGL 版本比 Linux 旧,而这个旧的 OpenGL 版本没有那个特定的标识符(我敢肯定还有其他标识符)。为了解决这个问题和任何其他可能的版本问题,我会使用 GLEW哪个为你做了艰苦的工作。

关于c++ - GL_UNSIGNED_SHORT_5_6_5 未声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16521226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com