मैं SDL2 उपयोग कर रहा हूँ एक खेल है कि हर फ्रेम पर एक tilemap प्रदर्शित करता है लिखने के लिए, लेकिन प्रदर्शन बहुत धीमी है। मैंने समस्या को अलग करने के लिए एक छोटा सा कार्यक्रम लिखा था। ध्यान दें कि "temp.bmp" एक 16x16 छवि है।SDL2 tilemap - बहुत धीमी गति से
#include <stdio.h>
#include "SDL2/SDL.h"
#include "SDL2/SDL_timer.h"
#include "SDL2/SDL_image.h"
int main()
{
SDL_Window* win;
SDL_Renderer* ren;
int x, y;
SDL_Init(SDL_INIT_VIDEO);
SDL_CreateWindowAndRenderer(800, 600, 0, &win, &ren);
SDL_Surface* sf = IMG_Load("temp.bmp");
SDL_Texture* tx = SDL_CreateTextureFromSurface(ren, sf);
for(;;) {
Uint32 t = SDL_GetTicks();
for(x=0; x<800; x+=16) {
for(y=0; y<600; y+=16) {
SDL_Rect src = { 0, 0, 16, 16 };
SDL_Rect dst = { x, y, 16, 16 };
SDL_RenderCopy(ren, tx, &src, &dst);
}
}
SDL_RenderPresent(ren);
printf("%ld ms\n", SDL_GetTicks() - t);
}
}
प्रोग्राम चलाना, मुझे लगता है कि फ्रेम को प्रस्तुत करने में लगभग 16ms लगते हैं। यह बिल्कुल 60 एफपीएस (1000/60) है, जो गेम तर्क के लिए कोई जगह नहीं छोड़ता है। इसके अलावा, मैं इसे एक सुंदर तेज़ कंप्यूटर में चला रहा हूं।
मैं बहुत यकीन है कि मैं गलत रणनीति का उपयोग कर रहा हूँ, लेकिन मुझे यकीन है कि सही एक हो क्या नहीं कर रहा हूँ। हो सकता है कि एक बड़ा बनावट बनाना और इसे कम करना अक्सर रास्ता तय करना होगा, लेकिन मुझे किसी अन्य पर एक बनावट की प्रतिलिपि बनाने के बारे में कोई दस्तावेज नहीं मिला।
तो, मैं कैसे tilemap प्रदर्शन में सुधार कर सकते हैं?
आप 'SDL_RenderPresent'to से पहले एक प्रदर्शन मेसर जोड़ सकता है कि आप अपने समय से पहले की वहाँ ढीला है। – dzada
मुझे एसडीएल 2 नहीं पता, लेकिन शायद प्रतिपादन बनाम बनाम सीमित हो रहा है? क्या आपने पूर्णस्क्रीन मोड में चलाने का प्रयास किया है? – user694733
@dzada अधिकांश समय SDL_RenderPresent पर खर्च किया जाता है। लगभग 2 एमएस पहले, और 14 एमएस के बाद। –