#define SDL_MAIN_HANDLED
#include <SDL.h>
#define WINDOWW 640
#define WINDOWH 400
#define AND &&
#define OR ||
SDL_Window*SDLWindow=NULL;
SDL_Renderer*SDLRenderer=NULL;
SDL_Texture*GEMScreen=0;
SDL_Rect SRC,DST;
int kolor=0,wyp=0,h,v;
#define PUT(x,y) {map[x+y*w]=kolor;srand(wyp*1000+(x%16)+(y%16)); if(!wyp OR rand()%2) ekr[x+y*w]=kolor;else ekr[x+y*w]=-1;}
void fill(int x,int y,int wyp) {
Uint32 ekr[WINDOWW*WINDOWH],map[WINDOWW*WINDOWH],k;
Uint8 ok=1;
int dx=1,dy=1,s; //kierunki skanowania
int py=y,px=x,px0=x,w=WINDOWW,gl=x,gp=x;
SRC.x=0;SRC.y=0;SRC.w=WINDOWW;SRC.h=WINDOWH;SDL_RenderReadPixels(SDLRenderer,&SRC,SDL_PIXELFORMAT_RGBA32,ekr,WINDOWW*4);
SDL_RenderReadPixels(SDLRenderer,&SRC,SDL_PIXELFORMAT_RGBA32,map,WINDOWW*4);
k=ekr[x+y*w]; //kolor tla
for(s=0;s<=1;s++){ //etapy skanowania
while(ok AND y>=0 AND y<WINDOWH){
while(map[x+y*w]==k AND x<WINDOWW){
if(dx>0)gp=x;else gl=x;
PUT(x,y)
x+=dx;
}
dx=-dx;x=px+dx;
while(map[x+y*w]==k AND x>=0){
if(dx>0)gp=x;else gl=x;
PUT(x,y)
x+=dx;
}
x-=dx;ok=0;y+=dy;dx=-dx;
for(x;x<=gp;x++)if(map[x+y*w]==k){ok=1;break;} //szukanie k
if(ok)px=x;
}
x=px=px0;y=py-1;dy=-dy;ok=map[x+y*w]==k;gl=gp=x;
}
SDL_UpdateTexture(GEMScreen,NULL,ekr,w*4);
}
void pbox(int x,int y,int x1,int y1){
SDL_SetRenderDrawColor(SDLRenderer,255,255,255,255);
DST.x=x;DST.y=y;DST.w=(x1)-(x)+1;DST.h=(y1)-(y)+1;SDL_RenderFillRect(SDLRenderer,&DST);
SDL_SetRenderDrawColor(SDLRenderer,0,0,0,0);
SDL_RenderDrawRect(SDLRenderer,&DST);
fill(x+(x1-x)/2,y+(y1-y)/2,wyp);
SDL_RenderDrawPoint(SDLRenderer,x+(x1-x)/2,y+(y1-y)/2);
//SDL_SetRenderTarget(SDLRenderer,GEMScreen);
}
void menu(){
SDL_SetRenderTarget(SDLRenderer,GEMScreen);
SDL_SetRenderDrawColor(SDLRenderer,255,0,0,255);
SDL_RenderClear(SDLRenderer);
SDL_SetRenderDrawColor(SDLRenderer,0,0,0,0);
for(v=0;v<=5;v++){
for(h=0;h<=5;h++){
pbox(390+h*36+36,v*36-28+36,30+390+h*36+36,28+v*36-28+36);
wyp++;
}
}
}
int main(int argc,char**argv){
if(SDL_Init(SDL_INIT_EVERYTHING) != 0) {puts(SDL_GetError());exit(1);}
SDL_SetHint(SDL_HINT_RENDER_VSYNC, "1");
SDL_CreateWindowAndRenderer(WINDOWW,WINDOWH, 0, &SDLWindow, &SDLRenderer);
SDL_RenderClear(SDLRenderer);
GEMScreen=SDL_CreateTexture(SDLRenderer,SDL_PIXELFORMAT_RGBA32,SDL_TEXTUREACCESS_TARGET,WINDOWW,WINDOWH);
menu();
DST.x=10;DST.y=10;DST.w=100;DST.h=100;SDL_RenderDrawRect(SDLRenderer,&DST);
SDL_SetRenderTarget(SDLRenderer,0);
SDL_RenderCopy(SDLRenderer,GEMScreen,NULL,NULL);
SDL_RenderPresent(SDLRenderer);
SDL_Delay(3000);
}
The program is not working properly. After adding SetTarget on line 50 (in void pbox) it works fine. What is it about ??
It’s a piece of code from another program and it still works wrong if I add SetTarget right after calling “pbox”.