我正在学习 SDL2,但我也在使用使用 OpenGL 调用的 imgui 库。从我在网上各种博客上读到的内容来看,我无法轻松混合 SDL2 渲染器和 opengl 调用;我要么使用其中之一,要么使用另一个。
我读过的大多数教程都使用渲染器,所以我不太明白如何在没有渲染器的情况下使用 SDL2 来绘制图元或绘制精灵。
以此为例:http://lazyfoo.net/tutorials/SDL/11_clip_rendering_and_sprite_sheets/index.php http://lazyfoo.net/tutorials/SDL/11_clip_rendering_and_sprite_sheets/index.php
他创建了 sdl 渲染器:
gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_ACCELERATED );
然后他用它来渲染图像:
void LTexture::render( int x, int y, SDL_Rect* clip )
{
//Set rendering space and render to screen
SDL_Rect renderQuad = { x, y, mWidth, mHeight };
//Set clip rendering dimensions
if( clip != NULL )
{
renderQuad.w = clip->w;
renderQuad.h = clip->h;
}
//Render to screen
SDL_RenderCopy( gRenderer, mTexture, clip, &renderQuad );
}
然后他打电话给他的render()
从 spritesheet 中绘制图像:
//Clear screen
SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
SDL_RenderClear( gRenderer );
//Render top left sprite
gSpriteSheetTexture.render( 0, 0, &gSpriteClips[ 0 ] );
//Render top right sprite
gSpriteSheetTexture.render( SCREEN_WIDTH - gSpriteClips[ 1 ].w, 0, &gSpriteClips[ 1 ] );
//Render bottom left sprite
gSpriteSheetTexture.render( 0, SCREEN_HEIGHT - gSpriteClips[ 2 ].h, &gSpriteClips[ 2 ] );
//Render bottom right sprite
gSpriteSheetTexture.render( SCREEN_WIDTH - gSpriteClips[ 3 ].w, SCREEN_HEIGHT - gSpriteClips[ 3 ].h, &gSpriteClips[ 3 ] );
//Update screen
SDL_RenderPresent( gRenderer );
我明白发生了什么,但现在我无法使用 sdl 渲染器,我该如何完成同样的任务?我现在不能使用任何SDL2绘图功能吗?我是否只使用原始 opengl 调用,并且只使用 SDL 进行键盘绑定?
基本上,如果我不能使用 SDL2 来绘制东西(就像在精灵示例中),我不明白如何使用SDL Renderer
因为它似乎与我正在使用的 gui 库不兼容,该库使用 opengl 调用进行渲染。