使用SDL&;OpenGL问题

使用SDL&;OpenGL问题,opengl,2d,sdl,truetype,Opengl,2d,Sdl,Truetype,因此,我环顾四周,并没有找到在SDL和OpenGL中实现这一点的最佳方法。此时,我可以用TTF在屏幕上显示文本,但它并没有真正按照应该的方式显示文本。附件是显示文本时引擎外观的屏幕截图。基本上,从我在代码中看到的情况来看,我认为正在发生的事情是,我并没有用我正在用作窗口的主SDL_曲面来屏蔽我的文本纹理。我这么说是因为在图片中,我的角色周围有一个红色的碰撞框,他被我的文本纹理覆盖了,我正在用它渲染文本。你知道我能做什么吗 在我的游戏循环中,我在将所有内容绘制到屏幕之前和之后调用beginDraw

因此,我环顾四周,并没有找到在SDL和OpenGL中实现这一点的最佳方法。此时,我可以用TTF在屏幕上显示文本,但它并没有真正按照应该的方式显示文本。附件是显示文本时引擎外观的屏幕截图。基本上,从我在代码中看到的情况来看,我认为正在发生的事情是,我并没有用我正在用作窗口的主SDL_曲面来屏蔽我的文本纹理。我这么说是因为在图片中,我的角色周围有一个红色的碰撞框,他被我的文本纹理覆盖了,我正在用它渲染文本。你知道我能做什么吗

在我的游戏循环中,我在将所有内容绘制到屏幕之前和之后调用beginDraw()和endDraw()

图片:

可在此处找到所有发动机代码:

附言:我将为这篇文章写另一篇文章,但如果你们已经在看我的代码,我可能也会问这个问题。我注意到发动机有一些内存问题。在任务管理器中,分配给我的程序的内存在不断攀升,因为它在11000 K左右启动

void graphics::SDL_GL_RenderText(float x1, float y1, int width, int height, const char* text, int ptsize, const char* ttfLoc, int r, int g, int b){
SDL_Surface* temp;
SDL_Surface* temp2;
SDL_Rect rect;
TTF_Font* font;
SDL_Color textColor;
unsigned int texture;

font = TTF_OpenFont( ttfLoc , ptsize );
textColor.r = r;
textColor.g = g;
textColor.b = b;

temp = TTF_RenderText_Blended( font, text, textColor );

// width = nextpoweroftwo(width);
// height = nextpoweroftwo(height);

temp2 = SDL_CreateRGBSurface(0, width, height, 32, r, g, b, 0);
SDL_BlitSurface(temp, 0, temp2, 0);

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, temp2->w, temp2->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, temp2->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

/* prepare to render our texture */
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glColor3f(1.0f, 1.0f, 1.0f);

/* Draw a quad at location */
glBegin(GL_QUADS);
glTexCoord2d(0,0);
glVertex2f(x1, y1);
glTexCoord2d(1,0);
glVertex2f(x1 + temp2->w, y1);
glTexCoord2d(1,1);
glVertex2f(x1 + temp2->w, y1 + temp2->h);
glTexCoord2d(0,1);
glVertex2f(x1, y1 + temp2->h);
glEnd();
glFinish();
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);

SDL_FreeSurface(temp);
SDL_FreeSurface(temp2);
TTF_CloseFont(font);
glDeleteTextures(1, &texture);
}

}


}

很少有人(如果有的话)会查看您的所有信息源并帮助您解决问题。请仅在此处发布相关位,并将内存泄漏问题作为单独的问题发布。好的,很抱歉,我添加了渲染文本的功能。您似乎希望文本为alpha混合,但您没有在OpenGL中启用alpha混合。
void graphics::GL_BeginDraw(){
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix(); //Start rendering phase
glOrtho(0,width,height,0,-1,1); //Set the matrix
void graphics::GL_EndDraw(){
glPopMatrix(); //End rendering phase
SDL_GL_SwapBuffers();
glFinish();