c++ - SDL_RenderSetViewport 取所有绘制的对象

标签 c++ c++14 sdl sdl-2

我在右上角创建一个视口(viewport),在那里我渲染图像。但我最终渲染了我在该视口(viewport)上绘制的所有对象,而不是屏幕的其余部分。在这种情况下,我画了一个三角形。

这是代码: 窗口

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();
}

最佳答案

解决方案 keltar :

您永远不会将视口(viewport)重置为全屏 (SDL_RenderSetViewport(renderer, NULL))。但是,目前尚不清楚为什么您根本需要单独的视口(viewport) - 所写的问题最好使用单个 RenderCopy 将您的“视口(viewport)”结构作为目标矩形来完成。

关于c++ - SDL_RenderSetViewport 取所有绘制的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53365781/

相关文章:

c++ - C++中的扭曲替代方案

c++ - 使用c++程序控制linux终端

c++ - 在 OpenGL 中设置相机

c++ - OpenCV 2.4.8 编译链接错误

c++ - C/C++ 允许短路编译器优化

c++ - 每个循环的区别

c++ - 如何检测某些可调用对象是否采用右值引用?

c++ - 使用 enable_if 的模板特化在 Clang 中失败,适用于 GCC

c++ - 界面上打印奇怪的文字

c++ - 如何从线程中取回数据?