我觉得很愚蠢...几乎立即发布后我解决了它......不知何故,我设法将内存地址作为纹理的值。我决定停止发送它作为参考而不是静态值(对此有何评论?)。
我将它作为参考发回的唯一地方是在我将其从SDL转换为纹理之后,也许这里也不需要它。任何想法都会很棒!
如果其他人遇到与我相同的问题,我会将此原帖留在此。
*解决*
所以这是一个破解,因为它工作UNTIL我绑定纹理。我会去的。
首先我使用SDL加载图像并将其转换为纹理,转换代码与此处完全相同:http://content.gpwiki.org/index.php/SDL:Tutorials:Using_SDL_with_OpenGL(链接所以我不打字太多)。 init代码也一样。
加载纹理后,它会保存到地图中,如下所示:
FUNC:
GLuint& Loader::loadTex(const string name)
代码:
//Check if the text is already loaded, if it is return it
map<string, GLuint&>::const_iterator it = m_loadedTextures.find(name);
if(it != m_loadedTextures.end())
{
return it->second;
}
SDL_Surface* surface = NULL;
//Load the file
string loadPath = m_prePath + name;
surface = lEntity.loadImage(loadPath.c_str(), true);
if(surface == NULL)
{
//load default texture?
}
//convert the SDL_Surface to a texture
GLuint newTexture = lEntity.glEntity.GetTextureFromSurface(surface);
GLenum h = glGetError();
//free the surface
SDL_FreeSurface(surface);
//add to map
m_loadedTextures.insert(pair<string, GLuint&>(name, newTexture));
return newTexture;
所以在我收到纹理后,我试着像这样绘制它:
FUNC:
bool OpenGlEntity::renderOpenGl(int x, int y, int w, int h, GLuint& image, SDL_Rect& clip)
代码:
GLuint texture = image;
// Bind the texture to which subsequent calls refer to
glBindTexture( GL_TEXTURE_2D, texture );
glBegin( GL_QUADS );
//Bottom-left vertex (corner)
glTexCoord2i( 0, 0 );
glVertex3f( 100.f, 100.f, 0.0f );
//Bottom-right vertex (corner)
glTexCoord2i( 1, 0 );
glVertex3f( 228.f, 100.f, 0.f );
//Top-right vertex (corner)
glTexCoord2i( 1, 1 );
glVertex3f( 228.f, 228.f, 0.f );
//Top-left vertex (corner)
glTexCoord2i( 0, 1 );
glVertex3f( 100.f, 228.f, 0.f );
glEnd();
这里的事情是,如果我在绘制它时不要绑定纹理,它将显示最后一个绑定纹理(在我链接的转换代码中绑定)。但是,如果我绑定纹理,我会改为显示白色BG。
我意识到绑定的纹理可能以某种方式被破坏了,但是如何!?我似乎无法追踪这一点,我从昨天起就开始使用它了。
我非常感谢你的帮助。谢谢你的时间。
答案 0 :(得分:0)
我觉得很愚蠢...几乎立即发布后我解决了它...不知怎的,我设法将内存地址作为纹理的值。我决定停止发送它作为参考而不是静态值(对此的任何评论?)。
我将它作为参考发回的唯一地方是在我将其从SDL转换为纹理之后,也许这里也不需要它。任何想法都会很棒!
如果其他人遇到与我相同的问题,我会留下原帖。