如何解决是否可以将SDL_Texture绘制到OpenGL?
我目前正在使用SDL编写游戏,并且使用以这种方式创建的纹理
SDL_Texture* target_texture = SDL_CreateTexture(ren,SDL_PIXELFORMAT_BGR555,SDL_TEXTUREACCESS_TARGET,256,224);
我以后使用
SDL_SetRenderTarget(ren,target_texture);
要使所有内容都绘制到该纹理上,一切都可以正常工作,之后,我只是使用以下方式禁用了渲染目标:
SDL_SetRenderTarget(ren,NULL);
我想将游戏转换为使用OpenGL绘制东西,并能够在其中使用3D,但是我遇到了一个问题。 SDL_GL_BindTexture似乎不适用于SDL_Texture, 我的绘图代码是
SDL_Rect rect = { 32,16,224 };
float w = 320.f;
float h = 240.f;
glViewport(0,w,h);
glClearColor(0.f,0.f,1.f);
glClear(GL_COLOR_BUFFER_BIT);
float X = float(rect.x) / float(w);
float Y = float(rect.y) / float(h);
float Width = float(rect.w) / float(w);
float Height = float(rect.y) / float(h);
//Bind the SDL_Texture in OpenGL
SDL_GL_BindTexture(target_texture,NULL,NULL);
//Draw the SDL_Texture * as a Quad
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS); {
glColor4f(1.0f,1.0f,1.0f);
glTexCoord2f(0,0); glVertex3f(X,Y,0);
glTexCoord2f(1,0); glVertex3f(X + Width,1); glVertex3f(X + Width,Y + Height,0);
glTexCoord2f(0,1); glVertex3f(X,0);
} glEnd();
glDisable(GL_TEXTURE_2D);
SDL_GL_SwapWindow(win);
这似乎不起作用,仅在窗口上绘制了一个白色正方形,这不是我想要的,而是如果我这样做
SDL_RenderCopy(ren,target_texture,&rect);
SDL_RenderPresent(ren);
它工作正常,但是根本不允许我使用OpenGL。我该如何解决?希望我解释得足够好
最小可复制代码示例:
#include <iostream>
#include <SDL.h>
#include <SDL_opengl.h>
#include <GL/gl.h>
int main(int argc,char* argv[])
{
SDL_Window* win = SDL_CreateWindow("test",SDL_WINDOWPOS_CENTERED,320,240,SDL_WINDOW_SHOWN);
SDL_Renderer* ren = SDL_CreateRenderer(win,SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
SDL_Texture* target_texture = SDL_CreateTexture(ren,224);
while (true)
{
SDL_SetRenderTarget(ren,target_texture);
SDL_SetRenderDrawColor(ren,255,255);
SDL_RenderClear(ren);
SDL_SetRenderTarget(ren,NULL);
SDL_Rect rect = { 32,0);
} glEnd();
glDisable(GL_TEXTURE_2D);
SDL_GL_SwapWindow(win);
SDL_Delay(16);
}
}
解决方法
一些问题:
- 您没有将
SDL_WINDOW_OPENGL
传递给SDL_CreateWindow()
- 您没有使用
SDL_GL_CreateContext()
创建OpenGL上下文。 - 您正在尝试同时使用加速的SDL_Renderer和OpenGL; currently无法保存/恢复GL状态SDL_Renderer(可能)用于执行其工作
如果您对使用SDL_Renderer感到困惑,请使用SDL_RENDERER_SOFTWARE
标志创建一个。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。