sdl软件渲染器不工作,工作在硬件加速的一个
sdl software renderer not working , works in hardware accelerated one
我正在使用sdl2,并尝试使用他们的软件渲染而不是硬件渲染。到目前为止,我一直在使用他们的硬件渲染,一切都显示得很好。对我来说,拥有一个软件渲染是非常重要的。
最大的问题是为什么软件渲染器和硬件渲染器的行为不同?以及如何修复?
这是我的问题:
因此,我使用SDL_CreateSoftwareRenderer
创建了一个渲染器,它渲染到一个表面,然后我显示那个表面,实际上就是窗口表面。(出于某种原因,我需要一个表面…)。
然后在一个循环中进行渲染:
SDL_SetRenderDrawColor(gRenderer, 0XFF, 0XFF, 0X00, 0XFF);
SDL_RenderClear(gRenderer);
SDL_SetRenderDrawColor(gRenderer, 0X0F, 0X00, 0XF0, 0XFF);
SDL_SetRenderDrawColor(gRenderer, 0X0F, 0X00, 0XF0, 0XFF);
SDL_Rect rect;
rect.x = 0;
rect.y = 5;
rect.w = 10;
rect.h = 2;
SDL_RenderFillRect(gRenderer, &rect);
std::cout << "begin" << std::endl;
for (auto& i : zIndexOrder) {
//Rectangles[i]->get_x();
Rectangles[i]->updat_move_fnct();
if (Rectangles[i]->everyframe_fct != NULL)Rectangles[i]->everyframe_fct(Rectangles[i]);
//Rectangles[i]->index_th = i;
}
for (auto u : Underwindows)u->Refresh();
for (auto& i : zIndexOrder)Rectangles[i]->draw(this);
SDL_SetRenderDrawColor(gRenderer, 0X0F, 0X00, 0XF0, 0XFF);
rect.x = 0;
rect.y = 5;
rect.w = 5;
rect.h = 5;
SDL_RenderFillRect(gRenderer, &rect);
std::cout << "true RENDERER " << gRenderer << std::endl;
if (SOFTWARE_RENDERING) SDL_UpdateWindowSurface(gWindow);
else SDL_RenderPresent(gRenderer);
这里用SDL_RenderFillRect(f->get_screen_render(), &rect);
画的两个矩形画得很好,但在ectangles[i]->draw(this);
中,如果我调用相同的调用,它不起作用,我的意思是我调用
SDL_SetRenderDrawColor(f->get_screen_render(), 0X0F, 0X00, 0XF0, 0XFF);
SDL_Rect rect;
rect.x = 6;
rect.y = 5;
rect.w = 10;
rect.h = 55;
SDL_RenderFillRect(f->get_screen_render(), &rect);
在CCD_ 4中并且矩形不绘制。
请注意,这三个矩形的大小不同,可以看出差异,清晰的颜色与绘制颜色不同,f->get_screen_render()
为渲染器提供了与其他两个调用中的指针相同的指针,这部分代码是执行的(我知道这一点要感谢控制台),最后它在其他两个绘制之间执行。
它们可能是为什么所有东西都能使用硬件加速渲染器而不是软件渲染器的原因吗?
我的代码由数千行代码组成,所以如果有人想帮助我,我可以把它交给他,但我不能把它放在这里。
感谢您的帮助^^
问题就在这里:
if (SOFTWARE_RENDERING) SDL_UpdateWindowSurface(gWindow);
else SDL_RenderPresent(gRenderer);
无论渲染驱动程序是什么,都应该始终调用SDL_RenderPresent。
相关文章:
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };
- 多 GPU 批处理 1D FFT:似乎只有一个 GPU 可以工作
- 一个非常简单的win32套接字代码,但工作错误
- 为什么断点显示数组的第二个值是一个大数字?额外学分工作
- 为什么通过定义另一个指针单元格,整个代码停止工作?
- 为什么我不能声明一个 constexpr 本地,而一个 const 一个工作?
- 我正在尝试从 GMocked 类返回一个 rapidjson::值,但我似乎无法让它工作
- 给定的两个代码有什么区别.一个在 ideone 上运行时超出时间限制,另一个工作正常
- Rcpp:一个函数在NumericVector上工作,另一个需要将其视为标量
- C++11: 如何编写一个像 Get 一样工作的模板函数<tuple>...但是收到参数包?
- 类似的代码.一个工作,一个崩溃.为什么?
- 我在一个生成随机数的程序工作,我想将这些数字存储在一个数组中
- 在删除另一个类中的一个类的对象时析构函数如何工作
- VS为我提供了对构造函数的另一个解决方案,但我想知道为什么我的工作不起作用
- 当其中一个函数未编译时,函数重载查找如何工作?
- C :用sizeof()operator在for for loop中增加一个int变量,只能工作一次
- OpenCV:文件存储操作员">>"在一个项目中工作,但不在另一个项目中工作(在同一类上)
- 仅一个功能的链接错误.在同一类和CPP文件中具有相似签名的其他函数工作正常
- LNK2019与另一个工作项目具有相同属性的项目上的错误
- xcb_get_image_reply另一个工作区/桌面上的窗口失败