by Anonymous » 04 Mar 2025, 08:45
Ich versuche, SDL3 zu verwenden, um das Ergebnis einer Software -Renderer -Engine anzuzeigen. Der Haupt -Thread besteht aus einer einfachen SDL -Schleife, die die zuletzt gerenderte Frame -Engine abreißt.
Code: Select all
int main(int argc, char *argv[])
{
SDL_Window *win = NULL;
SDL_Renderer *renderer = NULL;
int width = 320, height = 240;
bool loopShouldStop = false;
SDL_Init(SDL_INIT_VIDEO);
win = SDL_CreateWindow("SDL window", width, height, 0);
renderer = SDL_CreateRenderer(win, NULL);
SDL_Texture* texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB96_FLOAT, SDL_TEXTUREACCESS_STREAMING, width, height);
SoftwareRenderer engine;
// [...]
while (!loopShouldStop)
{
SDL_Event event;
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_EVENT_QUIT:
loopShouldStop = true;
break;
}
}
SDL_UpdateTexture(texture, NULL, engine.getFrame().data(), width * 3 * sizeof(float));
SDL_RenderClear(texture);
SDL_RenderTexture(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}
Es scheint, dass der Schuldige der SDL_UPDATETEXTURE ist, der extrem langsam ist. Ich habe versucht, den Ansatz SDL_LOCKTEXTURE und sdl_unlockTexture sowie 8 -Bit -Texturformat anstelle von Float One zu verwenden, aber es gibt keinen bemerkenswerten Unterschied in der Leistung.>
Ich versuche, SDL3 zu verwenden, um das Ergebnis einer Software -Renderer -Engine anzuzeigen. Der Haupt -Thread besteht aus einer einfachen SDL -Schleife, die die zuletzt gerenderte Frame -Engine abreißt.[code]int main(int argc, char *argv[])
{
SDL_Window *win = NULL;
SDL_Renderer *renderer = NULL;
int width = 320, height = 240;
bool loopShouldStop = false;
SDL_Init(SDL_INIT_VIDEO);
win = SDL_CreateWindow("SDL window", width, height, 0);
renderer = SDL_CreateRenderer(win, NULL);
SDL_Texture* texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB96_FLOAT, SDL_TEXTUREACCESS_STREAMING, width, height);
SoftwareRenderer engine;
// [...]
while (!loopShouldStop)
{
SDL_Event event;
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_EVENT_QUIT:
loopShouldStop = true;
break;
}
}
SDL_UpdateTexture(texture, NULL, engine.getFrame().data(), width * 3 * sizeof(float));
SDL_RenderClear(texture);
SDL_RenderTexture(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}
[/code]
Es scheint, dass der Schuldige der SDL_UPDATETEXTURE ist, der extrem langsam ist. Ich habe versucht, den Ansatz SDL_LOCKTEXTURE und sdl_unlockTexture sowie 8 -Bit -Texturformat anstelle von Float One zu verwenden, aber es gibt keinen bemerkenswerten Unterschied in der Leistung.>