【问题标题】:SDL Multiple Function RenderingSDL 多功能渲染
【发布时间】:2015-10-30 01:02:38
【问题描述】:

我希望我的游戏引擎美观整洁,而不是编写一堆多余的代码,我宁愿包含为我做这件事的函数。

void draw::image(){
    SDL_Surface *bmp = SDL_LoadBMP("C:\\Users\\Joe\\Documents\\Visual Studio 2013\\Projects\\SDL_APP1\\map1.bmp");
    SDL_Texture*bmptx;
    SDL_Renderer * renderer = SDL_CreateRenderer(_window, -1, 0);
    bmptx = SDL_CreateTextureFromSurface(renderer, bmp);
    SDL_FreeSurface(bmp);
    SDL_RenderCopy(renderer, bmptx, NULL, NULL);
    SDL_RenderPresent(renderer);
}

void draw::text(string q, float x, float y, float w, float h){
    SDL_SetRenderDrawColor(renderer, 64, 64, 64, 255);
    SDL_RenderDrawLine(renderer, x, y, w, h);
    SDL_RenderPresent(renderer);
    }

我的问题是我不知道如何格式化 text() 函数,以便它绘制到与 image() 函数相同的渲染器。我想要它,以便在我的主循环中,我可以调用 text 和 image 函数,它们将同时绘制到同一个渲染器。这样我就不必直接将它们编码到我的主循环中。旁注我使用的是 SDL 2。

【问题讨论】:

  • 谷歌批处理主题;创建一个批处理类,允许根据渲染类型(例如三角形条、三角形扇形、线、点等)以及其他属性(例如法线)构建不同类型的批处理,然后有一个 BatchManager 类来管理所有批处理,这些批处理将然后一次性将所有完整批次发送到渲染设备。您可能还需要另一个类来处理所有存储,例如 AssetStorage。在我的 OpenGL 着色器引擎中,这就是设置的方式。虽然我没有使用 SDL,但你应该能够实现同样的目标。

标签: c++ textures rendering sdl game-engine


【解决方案1】:

您可能希望将指向您之前创建的渲染器的指针(可能在 main() 中)传递给每个绘图函数。为您绘制的每个对象创建一个新的渲染器效率非常低。

void draw::image(SDL_Renderer *renderer)
{
//  ...
}

void draw::text(SDL_Renderer *renderer, string q, float x, float y, float w, float h)
{
    SDL_SetRenderDrawColor(renderer, 64, 64, 64, 255);
//   ...
}

然后,在您创建窗口后的 main() 中,您将创建您的渲染器:

renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);

然后将其传递给您的绘图函数。假设你的方法是静态的,那么:

draw::image(renderer);

或者如果你在堆栈上有一个对象:

myDrawObject.image(renderer);

或者,如果您有一个指向您的 draw 对象之一的指针:

myDrawPtr->image(renderer);

另外,您可能需要多考虑一下这种方法。大概您想在每一帧都绘制这些东西,因此使用您当前的方法,您需要 SDL 从磁盘(或磁盘缓存)加载 BMP 文件,并将其转换为纹理所需的任何内部格式,每一帧。这不太可能为您提供可接受的性能,尤其是当您希望每帧渲染多个图像时。

很有可能,更好的方法是将其中一些资源存储在draw 类的成员变量中。但这是基本的 C++ 内容,因此您可能需要围绕类主题进行更多阅读和教程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2013-06-06
    • 2019-07-08
    • 2016-10-28
    相关资源
    最近更新 更多