我正在尝试通过OpenGL为2d平台加载纹理,代码似乎在这个确切的部分崩溃,但是C ++或openGL缺乏知识似乎是我的问题,请帮助!
bool Texture::LoadTextureFromFile( std::string path )
{
//Texture loading success
bool textureLoaded = false;
//Generate and set current image ID
GLuint imgID = 0;
glGenTextures( 1, &imgID );
glBindTexture(GL_TEXTURE_2D ,imgID );
//Load image
GLboolean success = glLoadTextures( path.c_str() );
//Image loaded successfully
if( success == GL_TRUE )
{
//Convert image to RGBA
// success = ilConvertImage( IL_RGBA, IL_UNSIGNED_BYTE );
if( success == GL_TRUE )
{
//Create texture from file pixels
textureLoaded = LoadTextureFromPixels32
( (GLuint*)glGetDoublev, (GLuint*)glGetIntegerv( GL_TEXTURE_WIDTH ), GLuint*(glGetIntegerv( GL_TEXTURE_HEIGHT )) );
}
//Delete file from memory
glDeleteTextures( 1, &imgID );
}
//Report error
if( !textureLoaded )
{
printf( "Unable to load %s\n", path.c_str() );
}
return textureLoaded;
}
答案 0 :(得分:0)
有一些可能的问题。
首先,你从哪里获得glLoadTextures()?它做了什么?这不是OpenGL规范的一部分。我不清楚它的作用。这个函数可能会为你完成整个纹理加载,下面的代码只是搞砸了。
接下来,你的LoadTextureFromPixels32()的第一个参数是glGetDoubleV。你传给它一个指向函数glGetDoubleV的指针,这绝对不对。我假设该参数需要一个指向加载的图像数据的指针。
最后,您的代码会删除您刚刚使用glDeleteTextures()创建的纹理。这是没有意义的。纹理对象的ID存储在imgID中,这是一个局部变量。你正在删除它,所以纹理消失了。
创建纹理的正常过程是:
就是这样。