Я создаю область просмотра в верхнем правом углу, где я отрисовываю изображение.но в итоге я рендерил все объекты, которые я рисую в этом окне просмотра, а не на остальной части экрана.в этом случае я нарисовал треугольник.
это код: окно
Window::Window (const std::string &title, int width, int height): title(title),width(width),height(height){closed=!init();}
bool Window::init(){
window=SDL_CreateWindow(title.c_str(),SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,width,height,0);
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
}
void Window::clear() const{
SDL_RenderPresent(renderer);
SDL_SetRenderDrawColor(renderer,0,0,200,255);
SDL_RenderClear(renderer);
}
код розыгрыша:
Draw::Draw(int w,int h,int x,int y,int r,int g,int b,int a):w(w),h(h),x(x),y(y),r(r),g(g),b(b),a(a){}
Draw::Draw(int w,int h,int x,int y,const std::string &image):w(w),h(h),x(x),y(y){
auto surface = IMG_Load(image.c_str());
texture=SDL_CreateTextureFromSurface(Window::renderer,surface);
SDL_FreeSurface(surface);
}
void Draw::drawline() const{
SDL_SetRenderDrawColor(Window::renderer,r,g,b,a);
SDL_RenderDrawLine(Window::renderer,x,y,w,h);
}
void Draw::drawviewport() {
SDL_Rect viewport ={x,y,w,h};
SDL_RenderSetViewport(Window::renderer, &viewport );
SDL_RenderCopy( Window::renderer, texture, NULL, NULL );
SDL_RenderSetViewport(Window::renderer, NULL );
}
основной код:
Window window("test SDL 1", 1920, 1080);
Draw rs(960,550,960,0,"deposit/sdl.jpg");
Draw linha1(0,400,200,200,255,255,0,0);
Draw linha2(400,400,200,200,255,255,0,0);
Draw linha3(400,400,0,400,255,255,0,0);
while(!window.isClosed()){
rs.drawviewport();
linha1.drawline();
linha2.drawline();
linha3.drawline();
window.clear();
}